diff --git a/.packages b/.packages
index 1f0b101..cfa718c 100644
--- a/.packages
+++ b/.packages
@@ -77,7 +77,6 @@
 quiver:third_party/pkg/quiver/lib
 quiver_hashcode:third_party/pkg/quiver_hashcode/lib
 resource:third_party/pkg/resource/lib
-scheduled_test:third_party/pkg/scheduled_test/lib
 sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
 shelf:third_party/pkg/shelf/lib
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
@@ -95,8 +94,10 @@
 term_glyph:third_party/pkg/term_glyph/lib
 test:third_party/pkg/test/lib
 test_dart:tools/testing/dart
-testing:pkg/testing/lib
+test_descriptor:third_party/pkg/test_descriptor/lib
+test_process:third_party/pkg/test_process/lib
 test_reflective_loader:third_party/pkg/test_reflective_loader/lib
+testing:pkg/testing/lib
 tuple:third_party/pkg/tuple/lib
 typed_data:third_party/pkg/typed_data/lib
 typed_mock:pkg/typed_mock/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 087bbe5..282a3ac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -56,6 +56,7 @@
   * Renamed the `HtmlEscapeMode` constants `UNKNOWN`, `ATTRIBUTE`,
     `SQ_ATTRIBUTE` and `ELEMENT` to `unknown`, `attribute`, `sqAttribute` and
     `elements`.
+  * Changed return type of `Base64Codec.decode` to `Uint8List`.
 
 * `dart:developer`
   * `Timeline.startSync` and `Timeline.timeSync` now accept an optional
diff --git a/DEPS b/DEPS
index 28211bb..38556fb 100644
--- a/DEPS
+++ b/DEPS
@@ -6,6 +6,13 @@
 # Before adding or updating dependencies, please review the documentation here:
 # https://github.com/dart-lang/sdk/wiki/Adding-and-Updating-Dependencies
 
+allowed_hosts = [
+  'boringssl.googlesource.com',
+  'chromium.googlesource.com',
+  'dart.googlesource.com',
+  'fuchsia.googlesource.com',
+]
+
 vars = {
   # The dart_root is the root of our sdk checkout. This is normally
   # simply sdk, but if using special gclient specs it can be different.
@@ -47,7 +54,7 @@
   "barback-0.13.0_rev": "@34853",
   "barback-0.14.0_rev": "@36398",
   "barback-0.14.1_rev": "@38525",
-  "barback_tag" : "@0.15.2+13",
+  "barback_tag" : "@0.15.2+14",
   "bazel_worker_tag": "@v0.1.4",
   "boolean_selector_tag" : "@1.0.2",
   "boringssl_gen_rev": "@d2b56d1b7657e52eb5a1f075968c773aa3e53614",
@@ -73,13 +80,13 @@
   #     minutes later.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_tag": "@1.0.7",  # Please see the note above before updating.
+  "dart_style_tag": "@1.0.9",  # Please see the note above before updating.
 
   "dartdoc_tag" : "@v0.15.0+1",
   "fixnum_tag": "@0.10.5",
   "func_rev": "@25eec48146a58967d75330075ab376b3838b18a8",
   "glob_tag": "@1.1.5",
-  "html_tag" : "@0.13.2+1",
+  "html_tag" : "@0.13.2+2",
   "http_multi_server_tag" : "@2.0.4",
   "http_parser_tag" : "@3.1.1",
   "http_retry_tag": "@0.1.0",
@@ -105,13 +112,12 @@
   "plugin_tag": "@0.2.0+2",
   "ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_tag": "@1.3.4",
-  "protobuf_tag": "@0.5.4",
+  "protobuf_tag": "@0.6.0",
   "pub_rev": "@667281eef93b4be648cceca400e954e000edba38",
   "pub_semver_tag": "@1.3.2",
   "quiver_tag": "@0.27.0",
   "resource_rev":"@af5a5bf65511943398146cf146e466e5f0b95cb9",
   "root_certificates_rev": "@a4c7c6f23a664a37bc1b6f15a819e3f2a292791a",
-  "scheduled_test_tag": "@0.12.11+1",
   "shelf_static_rev": "@3558aa35a0d2f0f35868c3fd64b258e140db0122",
   "shelf_packages_handler_tag": "@1.0.3",
   "shelf_tag": "@0.7.1",
@@ -120,13 +126,15 @@
   "source_maps-0.9.4_rev": "@38524",
   "source_maps_tag": "@0.10.4",
   "source_span_tag": "@1.4.0",
-  "stack_trace_tag": "@1.8.2",
+  "stack_trace_tag": "@1.9.0",
   "stream_channel_tag": "@1.6.2",
   "string_scanner_tag": "@1.0.2",
   "sunflower_rev": "@879b704933413414679396b129f5dfa96f7a0b1e",
+  "test_descriptor_tag": "@1.0.3",
+  "test_process_tag": "@1.0.1",
   "term_glyph_tag": "@1.0.0",
   "test_reflective_loader_tag": "@0.1.3",
-  "test_tag": "@0.12.24+6",
+  "test_tag": "@0.12.29+1",
   "tuple_tag": "@v1.0.1",
   "typed_data_tag": "@1.1.3",
   "usage_tag": "@3.3.0",
@@ -283,8 +291,6 @@
       + Var("quiver_tag"),
   Var("dart_root") + "/third_party/pkg/resource":
       Var("dart_git") + "resource.git" + Var("resource_rev"),
-  Var("dart_root") + "/third_party/pkg/scheduled_test":
-      Var("dart_git") + "scheduled_test.git" + Var("scheduled_test_tag"),
   Var("dart_root") + "/third_party/pkg/shelf":
       Var("dart_git") + "shelf.git" + Var("shelf_tag"),
   Var("dart_root") + "/third_party/pkg/shelf_packages_handler":
@@ -318,6 +324,10 @@
       Var("dart_git") + "term_glyph.git" + Var("term_glyph_tag"),
   Var("dart_root") + "/third_party/pkg/test":
       Var("dart_git") + "test.git" + Var("test_tag"),
+  Var("dart_root") + "/third_party/pkg/test_descriptor":
+      Var("dart_git") + "test_descriptor.git" + Var("test_descriptor_tag"),
+  Var("dart_root") + "/third_party/pkg/test_process":
+      Var("dart_git") + "test_process.git" + Var("test_process_tag"),
   Var("dart_root") + "/third_party/pkg/test_reflective_loader":
       Var("dart_git") + "test_reflective_loader.git" +
       Var("test_reflective_loader_tag"),
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 4e65f3e..0cdf43b 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -225,14 +225,31 @@
   return []
 
 
+def _CheckValidHostsInDEPS(input_api, output_api):
+  """Checks that DEPS file deps are from allowed_hosts."""
+  # Run only if DEPS file has been modified to annoy fewer bystanders.
+  if all(f.LocalPath() != 'DEPS' for f in input_api.AffectedFiles()):
+    return []
+  # Outsource work to gclient verify
+  try:
+    input_api.subprocess.check_output(['gclient', 'verify'])
+    return []
+  except input_api.subprocess.CalledProcessError, error:
+    return [output_api.PresubmitError(
+        'DEPS file must have only dependencies from allowed hosts.',
+        long_text=error.output)]
+
+
 def CheckChangeOnCommit(input_api, output_api):
-  return (_CheckBuildStatus(input_api, output_api) +
+  return (_CheckValidHostsInDEPS(input_api, output_api) +
+          _CheckBuildStatus(input_api, output_api) +
           _CheckNewTests(input_api, output_api) +
           _CheckDartFormat(input_api, output_api) +
           _CheckStatusFiles(input_api, output_api))
 
 
 def CheckChangeOnUpload(input_api, output_api):
-  return (_CheckNewTests(input_api, output_api) +
+  return (_CheckValidHostsInDEPS(input_api, output_api) +
+          _CheckNewTests(input_api, output_api) +
           _CheckDartFormat(input_api, output_api) +
           _CheckStatusFiles(input_api, output_api))
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index a0879ba..1df31f2 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -35,6 +35,7 @@
 % - Update "FutureOr" specification for Dart 2.0.
 % - Require that a top-level "main" declaration is a valid script-entry
 %   function declaration.
+% - State that the return type of a setter or []= is void when not specified.
 %
 % 1.15
 % - Change how language specification describes control flow.
@@ -1021,7 +1022,9 @@
 \LMLabel{typeOfAFunction}
 
 \LMHash{}
-If a function does not declare a return type explicitly, its return type is \DYNAMIC{} (\ref{typeDynamic}), unless it is a constructor function, in which case its return type is the immediately enclosing class.
+If a function does not declare a return type explicitly, its return type is \DYNAMIC{} (\ref{typeDynamic}),
+unless it is a constructor function, in which case its return type is the immediately enclosing class,
+or it is a setter or operator \code{[]=}, in which case its return type is \VOID{}.
 
 \LMHash{}
 Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and no optional parameters.
@@ -1298,6 +1301,10 @@
 \LMHash{}
 It is a static warning if the return type of the user-declared operator \code{[]=} is explicitly declared and not \VOID{}.
 
+\commentary{
+If no return type is specified for a user-declared operator \code{[]=}, its return type is \VOID{} (\ref{typeOfAFunction}).
+}
+
 % add rationale: return in []= methods will have no effect, a the expression always returns its second argument (the RHS of the assignment, for consistency with assignment in general). So it's best to enforce this by declaring the method to be void, even though the expression that uses it returns an object with the type of the RHS, as described in \ref{assignment}.
 
 
@@ -1366,8 +1373,9 @@
   .
 \end{grammar}
 
-\LMHash{}
-If no return type is specified, the return type of the setter is \DYNAMIC{}.
+\commentary{
+If no return type is specified, the return type of the setter is \VOID{} (\ref{typeOfAFunction}).
+}
 
 \LMHash{}
 A setter definition that is prefixed with the \STATIC{} modifier defines a static setter.
@@ -3657,7 +3665,7 @@
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k])$ \ASYNC{} $=> e$
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow \code{Future<$flatten(T_0)$>}$, where $T_0$ is the static type of $e$and $flatten(T)$ is defined as follows:
 
-If $T = FuturOr<S>$ then $flatten(T) = S$.
+If $T = FutureOr<S>$ then $flatten(T) = S$.
 
 Otherwise if $T <: Future$ then let $S$ be a type such that $T << Future<S>$ and for all $R$, if $T << Future<R>$ then $S << R$.
 
diff --git a/docs/language/informal/instantiate-to-bound.md b/docs/language/informal/instantiate-to-bound.md
index a8fa628..d182dcb 100644
--- a/docs/language/informal/instantiate-to-bound.md
+++ b/docs/language/informal/instantiate-to-bound.md
@@ -1,61 +1,70 @@
 ## Feature: Instantiate to Bound
 
-Author: eernst@
+**Author**: eernst@
+
+**Version**: 0.5 (2018-01-11)
+
+**Status**: Under implementation.
 
 Based on [this description](https://github.com/dart-lang/sdk/issues/27526#issuecomment-260021397) by leafp@.
 
-**Status**: Under implementation. Remaining issue: Can a super-bounded
-type be created by instantiate to bound?
-
-**This document** is an informal specification of the the instantiate to bound
-mechanism in Dart 2. The feature described here, *instantiate to bound*, makes
-it possible to omit some or all actual type arguments in some types using
-generic classes. The missing type arguments will be added implicitly, and the
-chosen value for a given type argument will be the bound on the corresponding
-formal type parameter. In some situations no such bound can be expressed, in
-which case a compile-time error occurs. To resolve that, the type arguments
-can be given explicitly.
+**This document** is an informal specification of the the instantiate to
+bound mechanism in Dart 2. The feature described here, *instantiate to
+bound*, makes it possible to omit some or all actual type arguments in some
+types using generic classes. The missing type arguments will be added
+implicitly, and the chosen value for a given type argument will be the
+bound on the corresponding formal type parameter. In some situations no
+such bound can be expressed, in which case a compile-time error occurs. To
+resolve that, the type arguments can be given explicitly.
 
 ## Background
 
 In Dart 1.x, missing actual type arguments were filled in with the value
 `dynamic`, which was always a useful choice because that would yield types
-which were at the bottom of the set of similar types, as well as at the top.
+which were at the bottom of the set of similar types, as well as at the
+top.
+
 ```dart
 List xs = <int>[]; // OK, also dynamically: List<int> <: List<dynamic>.
 List<int> y = new List(); // OK, also dynamically: List<dynamic> <: List<int>.
 ```
+
 In Dart 2, type inference is used in many situations to infer missing type
 arguments, hence selecting values that will work in the given context.
-However, when the context does not provide any information to this inference
-process, some default choice must be made.
+However, when the context does not provide any information to this
+inference process, some default choice must be made.
 
 In Dart 2, `dynamic` is no longer a super- and subtype of all other types,
-and hence using `dynamic` as the default value for a missing actual
-type argument will create many malformed types:
+and hence using `dynamic` as the default value for a missing actual type
+argument will create many malformed types:
+
 ```dart
 class A<X extends num> {}
 A a = null; // A is malformed if interpreted as A<dynamic>.
 ```
-Hence, a new rule for finding default actual type arguments must be specified.
+
+Hence, a new rule for finding default actual type arguments must be
+specified.
 
 ## Motivation
 
-It is convenient for developers to be able to use a more concise notation for
-some types, and instantiate to bound will enable this.
+It is convenient for developers to be able to use a more concise notation
+for some types, and instantiate to bound will enable this.
 
-We will use a relatively simple mechanism which is allowed to fail. This means
-that developers will have to write actual type arguments explicitly in some
-ambiguous situations, thus adding visual complexity to the source code and
-requiring extra time and effort to choose and write those arguments. However,
-we consider the ability to reason straightforwardly about generic types in
-general more important than (possibly misleading) conciseness.
+We will use a relatively simple mechanism which is allowed to fail. This
+means that developers will have to write actual type arguments explicitly
+in some ambiguous situations, thus adding visual complexity to the source
+code and requiring extra time and effort to choose and write those
+arguments. However, we consider the ability to reason straightforwardly
+about generic types in general more important than (possibly misleading)
+conciseness.
 
-The performance characteristics of the chosen algorithm plays a role as well,
-because it is important to be able to find default type arguments in a short
-amount of time. Because of that, we have chosen to require explicit type
-arguments on bounds except for some "simple" cases. Again, this means that the
-source code will be somewhat more verbose, in return for overall simplicity.
+The performance characteristics of the chosen algorithm plays a role as
+well, because it is important to be able to find default type arguments in
+a short amount of time. Because of that, we have chosen to require explicit
+type arguments on bounds except for some "simple" cases. Again, this means
+that the source code will be somewhat more verbose, in return for overall
+simplicity.
 
 Here are some examples:
 
@@ -75,7 +84,7 @@
 
 class D<T extends Comparable<T>> {}
 
-// Error: no default type arguments can be computed for D.
+// The raw type D is completed to D<Comparable<dynamic>>.
 D x;
 
 // Error: T of D does not have a simple bound, so raw D cannot be a bound.
@@ -91,21 +100,24 @@
 ## Static analysis
 
 Let _G_ be a generic class with formal type parameter declarations
-_F1 .. Fk_ containing formal type parameters _X1 .. Xk_ and bounds _B1
-.. Bk_. We say that the formal type parameter _Xj_ has a _simple bound_
-when one of the following requirements is satisfied:
+_F<sub>1</sub> .. F<sub>k</sub>_ containing formal type parameters
+_X<sub>1</sub> .. X<sub>k</sub>_ and bounds
+_B<sub>1</sub> .. B<sub>k</sub>_. We say that the formal type parameter
+_X<sub>j</sub>_ has a _simple bound_ when one of the following requirements
+is satisfied:
 
-1. _Bj_ is omitted.
+1. _B<sub>j</sub>_ is omitted.
 
-2. _Bj_ is included, but does not contain any of _X1 .. Xk_. If _Bj_
-   contains a type _T_ on the form `qualified` (*for instance, `C` or
-   `p.D`*) which denotes a generic class _G1_ (*that is, _T_ is a raw
-   type*), every type argument of _G1_ has a simple bound.
+2. _B<sub>j</sub>_ is included, but does not contain any of _X<sub>1</sub>
+   .. X<sub>k</sub>_. If _B<sub>j</sub>_ contains a type _T_ on the form
+   `qualified` (*for instance, `C` or `p.D`*) which denotes a generic class
+   _G<sub>1</sub>_ (*that is, _T_ is a raw type*), every type argument of
+   _G<sub>1</sub>_ has a simple bound.
 
-The notion of a simple bound must be interpreted inductively rather
-than coinductively, i.e., if a bound _Bj_ of a generic class _G_ is
-reached during an investigation of whether _Bj_ is a simple bound,
-the answer is no.
+The notion of a simple bound must be interpreted inductively rather than
+coinductively, i.e., if a bound _B<sub>j</sub>_ of a generic class _G_ is
+reached during an investigation of whether _B<sub>j</sub>_ is a simple
+bound, the answer is no.
 
 *For example, with `class C<X extends C> {}` the type parameter `X` does
 not have a simple bound.*
@@ -114,10 +126,10 @@
 involved types to be "simple enough". We impose the following constraint on
 all bounds because any generic type may be used as a raw type.*
 
-It is a compile-time error if a formal parameter bound _B_ contains
-a type _T_ on the form `qualified` and _T_ denotes a generic class
-_G_ (*that is, _T_ is a raw type*), unless every formal type parameter of
-_G_ has a simple bound.
+It is a compile-time error if a formal parameter bound _B_ contains a type
+_T_ on the form `qualified` and _T_ denotes a generic class _G_ (*that is,
+_T_ is a raw type*), unless every formal type parameter of _G_ has a simple
+bound.
 
 *In short, type arguments on bounds can only be omitted if they themselves
 have simple bounds. In particular, `class C<X extends C> {}` is a
@@ -141,56 +153,94 @@
 bound would still be used in cases where no information is available to
 infer the omitted type arguments, e.g., for `List xs = [];`.*
 
-When type inference is providing actual type arguments for a term _G_ on
+*When type inference is providing actual type arguments for a term _G_ on
 the form `qualified` which denotes a generic class, instantiate to bound
-will provide the value for a single type argument in cases where no
-information is available for inferring such an actual type argument. In
-this situation, it is a compile-time error if instantiate to bound fails.
-
-In all these cases, instantiate to bound selects the value for an omitted
-actual type argument as follows:
+may be used to provide the value for type arguments where no information is
+available for inferring such an actual type argument. This document does
+not specify how inference interacts with instantiate to bound, that will be
+specified as part of the specification of inference. We will hence proceed
+to specify instantiate to bound as it applies to a type argument list which
+is omitted, such that a value for all the actual type arguments must be
+computed.*
 
 Let _T_ be a `qualified` term which denotes a generic class _G_ (*so _T_ is
-a raw type*), let _F1 .. Fk_ be the formal type parameter declarations in the
-declaration of _G_, with type parameters _X1 .. Xk_ and bounds _B1 .. Bk_
-with types _T1 .. Tk_, and let _j_ be the position of the actual type
-argument for which the selection will be made.
+a raw type*), let _F<sub>1</sub> .. F<sub>k</sub>_ be the formal type
+parameter declarations in the declaration of _G_, with type parameters
+_X<sub>1</sub> .. X<sub>k</sub>_ and bounds _B<sub>1</sub>
+.. B<sub>k</sub>_ with types _T<sub>1</sub> .. T<sub>k</sub>_. For _i_ in
+_1 .. k_, let _S<sub>i</sub>_ denote the result of performing instantiate
+to bound on the type in the bound, _T<sub>i</sub>_; in the case where
+_B<sub>i</sub>_ is omitted, let _S<sub>i</sub>_ be `dynamic`.
 
-If _Bj_ is omitted, the selected value for _Xj_ is `dynamic`.
+*Note that if _T<sub>i</sub>_ for some _i_ is raw then we know that all its
+omitted type arguments have simple bounds, which limits the complexity of
+the instantiate to bound step for _T<sub>i</sub>_.*
 
-Otherwise, if _Bj_ does not contain any of the formal type parameters
-_X1 .. Xk_, the selected value for _Xj_ is the result of performing
-instantiate to bound on the type in the bound, _Tj_.
+Instantiate to bound then computes an actual type argument list for _G_ as
+follows:
 
-*Note that if _Tj_ is raw then we know that all its omitted type arguments
-have simple bounds, which limits the complexity of the instantiate to bound
-step for _Tj_.*
+Let _U<sub>i,1</sub>_ be _S<sub>i</sub>_, for all _i_ in _1 .. k_. (*This
+is the "current value" of the bound for type variable _i_, at step 1; in
+general we will consider the current step, _m_, and use data for that step,
+e.g., the bound _U<sub>i,m</sub>_, to compute the data for step _m + 1_*).
 
-Otherwise, define the substitution _s_ as follows: for all _j_ in _1 .. k_,
-replace _Xj_ by the result of applying instantiate to bound on _Tj_. Now,
-repeatedly apply _s_ on the types in the bounds _T1 .. Tk_ until _Tj_ does
-not contain any of the formal type parameters _X1 .. Xk_.
+Let _--><sub>m</sub>_ be a relation among the type variables
+_X<sub>1</sub> .. X<sub>k</sub>_ such that
+_X<sub>p</sub> --><sub>m</sub> X<sub>q</sub>_ iff _X<sub>q</sub>_ occurs in
+_U<sub>p,m</sub>_ (*so each type variable is related to, that is, depends
+on, every type variable in its bound, possibly including itself*).
+Let _==><sub>m</sub>_ be the transitive closure of _--><sub>m</sub>_.
+For each _m_, let _U<sub>i,m+1</sub>_, for _i_ in _1 .. k_, be determined
+as follows:
 
-If this process terminates then the selected value is the final
-value of the bound in _Fj_. If it does not terminate, the instantiate
-to bounds process has failed.
+- Let _j_ be the lowest number such that
+  _X<sub>j</sub> ==><sub>m</sub> X<sub>j</sub>_ (*that is, such that this
+  type variable is a member of a dependency cycle*).
+  Let _{Y<sub>1</sub> .. Y<sub>p</sub>}_ be the the maximal subset
+  containing _X<sub>j</sub>_ of _{X<sub>1</sub> .. X<sub>k</sub>}_ where
+  every pair is related: _Y<sub>q</sub> ==><sub>m</sub> Y<sub>r</sub>_, for
+  all _q, r_ in _1 .. p_ (*i.e., this subset is a strongly connected
+  component in the dependency graph containing _X<sub>j</sub>_*).
+  Then _U<sub>i,m+1</sub>_ is the result of substituting, in
+  _U<sub>i,m</sub>_, `Null` for every contravariant occurrence
+  of _X<sub>j</sub>_, and `dynamic` for every covariant occurrence of
+  _X<sub>j</sub>_, for all _i_ in _1 .. k_ such that _X<sub>i</sub>_ is a
+  member of _{Y<sub>1</sub> .. Y<sub>p</sub>}_; and _U<sub>i,m+1</sub>_ is
+  _U<sub>i,m</sub>_, for all other _i_ in _1 .. k_.
+  *That is, we update the bounds of type variables in the dependency cycle
+  such that the type variables in the dependency cycle are replaced by
+  `Null` or `dynamic`, depending on the variance of the location.*
 
-*It can always be determined whether the process will terminate, because
-it always replaces each formal type parameter by a specific term, thus
-incrementally building a regular tree: If the bound in _Fj_ at some step
-_s_ contains some type parameter _Xm_, and it contains _Xm_ again at a
-later step _s+n_, then the process will not terminate. If no such
-repeated occurrence of a type parameter occurs then the process will
-terminate, because the set of formal type parameters is finite.*
+- Otherwise, (*if no such dependency cycle exists*) let _j_ be the
+  lowest number such that _X<sub>j</sub>_ occurs in
+  _U<sub>p,m</sub>_ for some _p_ and
+  _X<sub>j</sub> -/-><sub>m</sub> X<sub>q</sub>_ for all _q_ in _1..k_
+  (*that is, _U<sub>j,m</sub>_ is closed, that is, the current bound of
+  _X<sub>j</sub>_ does not depend on any other type variables; but
+  _X<sub>j</sub>_ is being depended on by the bounds of some other type
+  variables*). Then _U<sub>i,m+1</sub>_ is the result of substituting, in
+  _U<sub>i,m</sub>_, `Null` for every contravariant occurrence
+  of _X<sub>j</sub>_, and _U<sub>j,m</sub>_ for every covariant occurrence
+  of _X<sub>j</sub>_, for all _i_ in _1 .. k_.
 
-*Note that instantiate to bound will always fail if the bound
-on _Fj_ is an F-bound, e.g., `class A<T extends B<T>>`.*
+- Otherwise, (*when no dependencies exist*) terminate with the result
+  _&lt;U<sub>1,m</sub> ..., U<sub>k,m</sub>&gt;_.
+
+*This process will always terminate, because the total number of
+occurrences of type variables from _{X<sub>1</sub> .. X<sub>k</sub>}_ in
+the current bounds is strictly decreasing with each step, and we terminate
+when that number reaches zero.*
+
+*Note that this process may produce a
+[super-bounded type](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/super-bounded-types.md).*
 
 When instantiate to bound is applied to a type it proceeds recursively: For
-a generic instantiation `G<T1..Tk>` it is applied to `T1..Tk`; for
-a function type `T0 Function(T1..Tj, {Tj+1 xj+1 .. Tk xk})` and
-a function type `T0 Function(T1..Tj, [Tj+1 .. Tk])` it is applied
-to `T0..Tk`.
+a generic instantiation _G<T<sub>1</sub> .. T<sub>k</sub>>_ it is applied
+to _T<sub>1</sub> .. T<sub>k</sub>_; for a function type
+_T<sub>0</sub> Function(T<sub>1</sub> .. T<sub>j</sub>, {T<sub>j+1</sub> x<sub>1</sub> .. T<sub>k</sub> x<sub>j+k</sub>})_
+and a function type
+_T<sub>0</sub> Function(T<sub>1</sub> .. T<sub>j</sub>, [T<sub>j+1</sub> .. T<sub>j+k</sub>])_
+it is applied to _T<sub>0</sub> .. T<sub>j+k</sub>_.
 
 *This means that instantiate to bound has no effect on a type that does not
 contain any raw types; conversely, instantiate to bound will act on types
@@ -199,34 +249,24 @@
 
 ## Dynamic semantics
 
-There is no separate dynamic semantics for this mechanism. The semantics
-of a given program _P_ is the semantics of the program _P'_ which is
-created from _P_ by applying instantiate to bound where applicable.
-
-
-## Discussion
-
-A more complex algorithm was considered, possibly involving support for
-recursive (infinite) types. For example:
-
-```dart
-// A global dependency: F and G could be in different libraries.
-class F<T extends G> {}
-class G<T extends F> {}
-```
-
-In this case, instantiating the bounds to the infinite terms
-`G<F<G<F<G<F<...>>>>>>` and `F<G<F<G<F<G<...>>>>>>` would be a consistent
-solution, which could be justified by means of a coinductive
-interpretation of what it means to be a 'simple bound'. However, we do not
-expect solutions to this kind of challenge to be sufficiently useful
-(if even possible) to justify the added complexity, both with respect to
-comprehensibility for human readers, and with respect to the performance
-of tools.
+The instantiate to bound transformation which is specified in the static
+analysis section is used to provide type arguments to dynamic invocations
+of generic functions, when no actual type arguments are passed. Otherwise,
+the semantics of a given program _P_ is the semantics of the program _P'_
+which is created from _P_ by applying instantiate to bound where
+applicable.
 
 
 ## Updates
 
+*   Jan 11th 2018, version 0.5: Revised treatment of variance based on
+    strongly connected components in the dependency graph.
+
+*   Dec 13th 2017: Revised to allow infinite substitution sequences when the
+    value of a type argument is computed, specifying how to detect that
+    the substitution sequence is infinite, and how to obtain a result from
+    there.
+
 *   Sep 15th 2017: Transferred to the SDK repository as
     [instantiate-to-bound.md](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/instantiate-to-bound.md).
 
diff --git a/docs/language/informal/super-bounded-types.md b/docs/language/informal/super-bounded-types.md
new file mode 100644
index 0000000..028db60
--- /dev/null
+++ b/docs/language/informal/super-bounded-types.md
@@ -0,0 +1,553 @@
+## Feature: Super-bounded Types
+
+**Author**: eernst@.
+
+**Version**: 0.5 (2018-01-11).
+
+**Status**: Under discussion.
+
+**This document** is an informal specification of the support in Dart 2 for
+using certain generic types where the declared bounds are violated. The
+feature described here, *super-bounded types*, consists in allowing an
+actual type argument to be a supertype of the declared bound, as long as a
+consistent replacement of `Object`, `dynamic`, and `void` by `Null`
+produces a traditional, well-bounded type. For example, if a class `C`
+takes a type argument `X` which must extend `C<X>`, `C<Object>`,
+`C<dynamic>`, and `C<void>` are correct super-bounded types. This is useful
+because there is no other way to specify a type which retains the knowledge
+that it is a `C` based type, and at the same time it is a supertype of
+`C<T>` for all the `T` that satisfy the specified bound. In other words, it
+allows developers to specify that they want to work with a `C<T>`, except
+that they don't care which `T`, and _every_ such `T` must be allowed.
+
+This permission to use a super-bounded type is only granted in some
+situations. For instance, super-bounded types are allowed as type
+annotations, but they are not allowed in instance creation expressions like
+`new C<Object>()` (assuming that `Object` violates the bound of
+`C`). Similarly, a function declared as
+```dart
+void foo<X extends List<num>>(X x) {
+  ...
+}
+```
+cannot be invoked with `foo<List<dynamic>>('Hello!')`, nor can the type
+argument be inferred to `List<dynamic>` in an invocation like
+`foo('Hello!')`. But `C<void> x = new C<int>();` is OK, and so is
+`x is C<Object>`.
+
+
+## Motivation
+
+Many well-known classes have a characteristic typing structure:
+```dart
+abstract class num implements Comparable<num> {...}
+class Duration implements Comparable<Duration> {...}
+class DateTime implements Comparable<DateTime> {...}
+...
+```
+The class `Comparable<T>` has a method `int compareTo(T other)`,
+which makes it possible to do things like this:
+```dart
+int comparison = a.compareTo(b);
+```
+This works fine when `a` and `b` both have type `num`, or both have type
+`Duration`, but it is not so easy to describe the situation where the
+comparable type can vary. For instance, consider the following:
+```dart
+class ComparablePair<X extends Comparable<X>> {
+  X a, b;
+}
+
+main() {
+  ComparablePair<MysteryType> myPair = ...
+  int comparison = myPair.a.compareTo(myPair.b);
+}
+```
+We could replace `MysteryType` by `num` and then work on pairs
+of `num` only. But can we find a type to replace `MysteryType` such
+that `myPair` can hold an instance of `ComparablePair<T>`, no matter
+which `T` it uses?
+
+We would need a supertype of all those `T` where
+`T extends Comparable<T>`; but we cannot use the obvious ones like
+`Object` or `dynamic`, because they do not satisfy the declared
+bound for the type argument to `ComparablePair`. There is in fact no such
+type in the Dart type system!
+
+This is an issue that comes up in various forms whenever a type parameter
+bound uses the corresponding type variable itself (or multiple type
+parameters mutually depend on each other), that is, whenever we have one
+or more _F-bounded_ type parameters. Here is an example which is concise
+and contains the core of the issue:
+```dart
+class C<X extends C<X>> {
+  X next;
+}
+```
+For each given type `T` it is possible to determine whether `T` is a
+subtype of `C<T>`, in which case that `T` would be an admissible actual
+type argument for `C`. This means that the set of possible values for `X`
+is a well-defined set.
+
+However, there is no type `S` such that the set of possible values for `X`
+is equal to the set of subtypes of `S`; that is, the set of types we seek
+to express is not the set of subtypes of anything. Sure, those types are a
+subset of all subtypes of `Object`, but we need to express that _exact_ set
+of types, not a superset.
+
+Hence, we cannot correctly characterize "all possible values for `X`" as a
+single type argument. This means that we cannot find a `U` such that `C<U>`
+is the least upper bound of all possible types on the form `C<T>`.
+
+But that's exactly what we _must_ find, if we are to safely express the
+greatest possible amount of information about the set of objects whose type
+is on the form `C<T>` for some `T`. In particular, we cannot express the
+type which "should be" the result of
+[instantiate-to-bound](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/instantiate-to-bound.md)
+on the raw type `C`.
+
+We can make an attempt to approximate the least supertype of all correct
+generic instantiations of `C` (that is, a supertype of all types on the
+form `C<T>`). Assume that `T` is an admissible actual type argument for
+`C` (that is, we can rely on `T extends C<T>`):
+```dart
+// Because `T extends C<T>`, and due to generic covariance:
+C<T>  <:  C<C<T>>
+
+// Same facts used on the nested type argument `T`:
+C<C<T>>  <:  C<C<C<T>>> ...
+
+// Same at the next level ...
+C<C<C<T>>>  <:  C<C<C<C<T>>>>
+...
+```
+We can continue ad infinitum, and this means that a good candidate for the
+"least upper bound of all `C<T>`" would be the infinite type `W` where
+`W = C<W>`. Basically, `W = C<C<C<C<C<C<...>>>>>>`, nesting to an
+infinite depth.
+
+Note that `T` "disappears" when we extend the nesting ad infinitum, which
+means that `W` is the result we find for _every_ `T`. Conversely, we cannot
+hope to find a different type `V` (not equal to `C<R>` for any `R`) such
+that `V` is both a supertype of all types on the form `C<T>` for some `T`
+and `V` is a proper subtype of `W`. In other words, if the "least upper
+bound of all `C<T>`" exists, it must be `W`.
+
+However, we do not wish to introduce these infinite types into the Dart
+type universe. The ability to express types on this form will
+inevitably introduce the ability to express many new kinds of types, and we
+do not expect this generalization to improve the expressive power of the
+language in a manner that compensates sufficiently for the burden of
+managing the added complexity.
+
+Instead, we give developers the responsibility to make the choice
+explicitly: They can use super-bounded types to express a range of
+supertypes of these infinite types (as well as other types, if they
+wish). When they do that with an infinite type, they can make the choice to
+unfold it exactly as many times as they want. At the same time, they will
+be forced to maintain a greater level of awareness of the nature of these
+types than they would, had we chosen to model infinite types, e.g., by
+unfolding them to some specific, finite level.
+
+Here are some examples of finite unfoldings, and the effect they have on
+types of expressions:
+```dart
+class C<X extends C<X>> {
+  X next;
+  C(this.next);
+}
+
+class D extends C<D> {
+  D(D next): super(next);
+}
+
+main() {
+  D d = new D(new D(null));
+  C<dynamic> c0 = d;
+  C<C<dynamic>> c1 = d;
+  C<C<C<dynamic>>> c2 = d;
+
+  c0.next.unknown(42); // Statically OK, `c0.next` is `dynamic`.
+  c1.next.unknown(43); // Compile-time error.
+  c1.next.next.unknown(44); // Statically OK.
+  c2.next.next.unknown(45); // Compile-time error.
+  c2.next.next.next.unknown(46); // Statically OK.
+
+  // With type `D`, the static analysis is aware of the cyclic
+  // structure of the type, and every level of nesting is handled
+  // safely. But `D` may be less useful because there may be a
+  // similar type `D2`, and this code will only work with `D`.
+  d.next.next.next.next.next.next.next.unknown(46); // Compile-time error.
+}
+```
+We can make a choice of how to deal with the missing type information. When
+we use `C<dynamic>`, `C<C<dynamic>>` and `C<C<C<dynamic>>>` we will
+implicitly switch to dynamic member access after a few steps of
+navigation.
+
+If we choose to use `C<Object>`, `C<C<Object>>` and so on then we will have
+to use explicit downcasts in order to access all non-`Object` members. We
+will still be able to pass `c0.next` as an argument to a function expecting
+a `C<S>` (where `S` can be anything), but we could also pass it where a
+`String` is expected, etc.
+
+Finally, if we choose to use `C<void>` and so on then we will not even be
+able to access the object where the type information ends: we cannot use
+the value of an expression like `c0.next` at all without an explicit
+cast. This means that we cannot pass `c0.next` as an argument to a function
+that accepts a `C<S>` (for any `S`) without an explicit cast.
+
+In summary, the choice of `dynamic`, `Object`, and `void` offers a range of
+approaches to the lack of typing information, but the amount of information
+remains the same.
+
+
+## Syntax
+
+This feature does not require any modifications to the Dart grammar.
+
+
+## Static analysis
+
+We say that the parameterized type _G<T<sub>1</sub>..T<sub>k</sub>>_ is
+_regular-bounded_ when _T<sub>j</sub> <: [T<sub>1</sub>/X<sub>1</sub> ..
+T<sub>k</sub>/X<sub>k</sub>]B<sub>j</sub>_ for all _j_, _1 <= j <= k_,
+where _X<sub>1</sub>..X<sub>k</sub>_ are the formal type parameters of _G_
+in declaration order, and _B<sub>1</sub>..B<sub>k</sub>_ are the
+corresponding upper bounds.
+
+*This means that each actual type argument satisfies the declared upper
+bound for the corresponding formal type parameter.*
+
+We extend covariance for generic class types such that it can be used also
+in cases where a type argument violates the corresponding bound.
+
+*For instance, assuming the classes `C` and `D` as declared in the
+Motivation section, `C<D>` is a subtype of `C<Object>`. This is new because
+`C<Object>` used to be a compile-time error, which means that no questions
+could be asked about its properties. Note that this is a straightforward
+application of the usual covariance rule: `C<D> <: C<Object>` because
+`D <: Object`. We need this relaxation of the rules in order to be able to
+define which violations of the declared bounds are admissible.*
+
+Let _G_ denote a generic class, _X<sub>1</sub>..X<sub>k</sub>_ the formal
+type parameters of _G_ in declaration order, and
+_B<sub>1</sub>..B<sub>k</sub>_ the types in the corresponding upper bounds,
+using `Object` when the upper bound is omitted. The parameterized type
+_G&lt;T<sub>1</sub>..T<sub>k</sub>&gt;_ is then a _super-bounded type_
+iff the following two requirements are satisfied:
+
+1.   There is a _j_, _1 <= j <= k_, such that _T<sub>j</sub>_ is not a
+     subtype of
+     _[T<sub>1</sub>/X<sub>1</sub>..T<sub>k</sub>/X<sub>k</sub>]B<sub>j</sub>_.
+
+2.   Let _S<sub>j</sub>_, _1 <= j <= k_, be the result of replacing every
+     covariant occurrence of `Object`, `dynamic`, and `void` in
+     _T<sub>j</sub>_ by `Null`, and every contravariant occurrence of `Null`
+     by `Object`. It is then required that
+     _S<sub>j</sub> &lt;:
+     [S<sub>1</sub>/X<sub>1</sub>..S<sub>k</sub>/X<sub>k</sub>]B<sub>j</sub>_
+     for all _j_, _1 <= j <= k_.
+
+*In short, at least one type argument violates its bound, and the type is
+regular-bounded after replacing all occurrences of an extreme type by the
+opposite extreme type, according to their variance.*
+
+*For instance, assuming the declarations of `C` and `D` as in the
+Motivation section, `C<Object>` is a super-bounded type, because `Object`
+violates the declared bound and `C<Null>` is regular-bounded.*
+
+*Here is an example that involves contravariance:*
+
+```dart
+class E<X extends void Function(X)> {}
+```
+
+*With this declaration, `E<void Function(Null)>` is a super-bounded type
+because `E<void Function(Object)>` is a regular-bounded type. Note that
+the contravariance can also be eliminated, yielding a simpler super-bounded
+type: `E<dynamic>` is a super-bounded type because `E<Null>` is a
+regular-bounded type.*
+
+We say that a parameterized type _T_ is _well-bounded_ if it is
+regular-bounded or super-bounded.
+
+*Note that it is possible for a super-bounded type to be nested in another
+type which is super-bounded, and it can also be nested in another type
+which is not super-bounded. For example, assuming `C` as in the Motivation
+section, `C<C<Object>>` is a super-bounded type which contains a
+super-bounded type; in contrast, `List<C<Object>>` is a regular type (a
+generic instantiation of `List`) which contains a super-bounded type
+(`C<Object>`).*
+
+It is a compile-time error if a parameterized type is not well-bounded.
+
+*That is, a parameterized type is regular-bounded, or it is super-bounded,
+or it is an error. This rule replaces and relaxes the rule in the language
+specification that constrains parameterized types to be regular-bounded.*
+
+It is a compile-time error if a type used as the type in an instance
+creation expression (*that is, the `T` in expressions of the form
+`new T(...)`, `new T.id(...)`, `const T(...)`, or `const T.id(...)`*)
+is super-bounded. It is a compile-time error if the type in a redirection
+of a redirecting factory constructor (*that is, the `T` in a phrase of the
+form `T` or `T.id` after `=` in the constructor declaration*) is
+super-bounded. It is a compile-time error if a super-bounded type is
+specified as a superinterface for a class. (*This implies that a
+super-bounded type cannot appear in an `extends`, `implements`, or
+`with` clause, or in a mixin application; e.g., `T` in
+`class C = T with M;` cannot be super-bounded*). Finally, it is a
+compile-time error if a bound in a formal type parameter declaration is
+super-bounded.
+
+*This means that we allow super-bounded types as function return types, as
+type annotations on variables (all of them: library, static, instance, and
+local variables, and formal parameters of functions), in type tests
+(`e is T`), in type casts (`e as T`), in `on` clauses, and as type
+arguments.*
+
+Let _F_ denote a parameterized type alias, _X<sub>1</sub>..X<sub>k</sub>_ the
+formal type parameters of _F_ in declaration order, and
+_B<sub>1</sub>..B<sub>k</sub>_ the types in the corresponding upper bounds,
+using `Object` when the upper bound is omitted. The parameterized type
+_F&lt;T<sub>1</sub>..T<sub>k</sub>&gt;_ is then a _super-bounded type_
+iff the following three requirements are satisfied:
+
+1.   There is a _j_, _1 <= j <= k_, such that _T<sub>j</sub>_ is not a
+     subtype of
+     _[T<sub>1</sub>/X<sub>1</sub>..T<sub>k</sub>/X<sub>k</sub>]B<sub>j</sub>_.
+
+2.   Let _S<sub>j</sub>_, _1 <= j <= k_, be the result of replacing every
+     covariant occurrence of `Object`, `dynamic`, and `void` in
+     _T<sub>j</sub>_ by `Null`, and every contravariant occurrence of `Null`
+     by `dynamic`. It is then required that
+     _S<sub>j</sub> &lt;:
+     [S<sub>1</sub>/X<sub>1</sub>..S<sub>k</sub>/X<sub>k</sub>]B<sub>j</sub>_
+     for all _j_, _1 <= j <= k_.
+
+3.   Let _T_ be the right hand side of the declaration of _F_, then
+     _[T<sub>1</sub>/X<sub>1</sub>..T<sub>k</sub>/X<sub>k</sub>]T_ is a
+     well-bounded type.
+
+*In short, a parameterized type based on a type alias, `F<...>`, must pass the
+super-boundedness checks in itself, and so must the body of `F`.*
+
+*For instance, assume that `F` and `G` are declared as follows:*
+```dart
+class A<X extends C<X>> {
+  ...
+}
+
+typedef F<X extends C<X>> = A<X> Function();
+typedef G<X extends C<X>> = void Function(A<X>);
+```
+*The type `F<Object>` is then a super-bounded type, because `F<Null>` is
+regular-bounded (`Null` is a subtype of `C<Null>`) and because
+`A<Object> Function()` is well-bounded, because `A<Object>` is
+super-bounded. Similarly, `G<Object>` is a super-bounded type because
+`void Function(A<Object>)` is well-bounded because `A<Object>` is
+super-bounded.*
+
+*The subtype relations for super-bounded types follow directly from the
+extension of generic covariance to include actual type arguments that
+violate the declared bounds. For the example in the Motivation section, `D`
+is a subtype of `C<D>` which is a subtype of `C<C<D>>`, which is a subtype
+of `C<C<C<D>>>`, continuing with `C<C<C<Object>>>>`, `C<C<Object>>`,
+`C<Object>`, and `Object`, respectively, and similarly for `dynamic` and
+`void`.*
+
+Types of members from super-bounded class types are computed using the same
+rules as types of members from other types. Types of function applications
+involving super-bounded types are computed using the same rules as types of
+function applications involving other types.
+
+*For instance, using the example class `C` again, if `c1` has static type
+`C<C<dynamic>>` then `c1.next` has static type `C<dynamic>` and
+`c1.next.next` has static type `dynamic`. Similarly, if `List<X> foo(X)`
+were the signature of a method in `C`, `c1.foo` would have static type
+`List<C<dynamic>> Function(C<dynamic>)`. Note that the argument type `X`
+makes that parameter of `foo` covariant, which implies that the reified
+type of the tear-off `c1.foo` would have argument type `Object`, which
+ensures that the expression `c1.foo` evaluates to a value whose dynamic
+type is a subtype of the static type, as it should.*
+
+*Similarly, if we invoke an instance method with statically known argument
+type `C<void>` whose argument is covariant, there will be a dynamic type
+check on the actual argument (which might require that it is, say, of type
+`D`); that check may fail at run time, but this is no different from the
+situation with types that are not super-bounded. In general, the
+introduction of super-bounded types does not introduce new soundness
+considerations around covariance.*
+
+*Super-bounded function types do not have to be only in the statically
+known types of first class functions, they can also be part of the actual
+type of a function at run time.  For instance, a function may be declared
+as follows:*
+
+```dart
+List<C<dynamic>> foo(C<dynamic> x) {
+  ...
+}
+```
+
+*It would then have type exactly `List<C<dynamic>> Function(C<dynamic>)`,
+and this means that it will accept an object which is an instance of a
+subtype of `C<T>` for any `T`, and it will return a list whose element type
+is some subtype of `C<dynamic>`, which could be `D` or `C<C<D>>` at run
+time.*
+
+
+## Dynamic semantics
+
+The reification of a super-bounded type (*e.g., as a parameter type in a
+reified function type*) uses the types as specified.
+
+*For instance `void foo(C<Object> x) => print(x);` will have reified type
+`void Function(C<Object>)`. It is allowed for a run-time entity to have a
+type which contains a super-bounded type, it is only prohibited for
+run-time entities to have a super-bounded type themselves. So there can be
+an instance whose dynamic type is `List<C<Object>>` but no instance whose
+dynamic type is `C<Object>`.*
+
+The subtype rules used for run-time type tests, casts, and generated type
+checks are the same as the subtype rules used during static analysis.
+
+*If an implementation applies an optimization that is only valid when
+super-bounded types cannot exist, or in other ways relies on the (no longer
+valid) assumption that super-bounded types cannot exist, it will need to
+stop using that optimization or making that assumption. We do not expect
+this to be a common situation, nor do we expect significant losses in
+performance due to the introduction of this feature.*
+
+
+## Discussion
+
+The super-bounded type feature is all about violating bounds, in a
+controlled manner. But what is the **motivation for enforcing bounds** in
+the first place? The answer to that question serves to justify why it must
+be 'controlled'. We have at least two reasons, one internal and one
+external.
+
+The **internal reason** is that the bound of each formal type parameter is
+relied upon during type checking of the body of the corresponding generic
+declaration. For instance:
+```dart
+class C<X extends num> {
+  X x;
+  bool get foo => x.isNegative; // Statically safe invocation.
+}
+```
+If we ever allow an instance of `C<Object>` to be created, or even an
+instance of a subclass which has `C<Object>` as a (possibly indirect)
+superclass, then we could end up executing that implementation of `foo` in
+a situation where `x` does not have an `isNegative` getter. In other words,
+the internal issue is that super-bounding may induce a plain soundness
+violation in the scope of the type parameter.
+
+This motivates the ban on super-bounding in instance creation expressions,
+e.g., the ban on `new C<Object>()`.
+
+However, it does not suffice to justify banning super-bounded `implements`
+clauses: There will not be any inherited method implementations from a type
+that a given class implements, and hence no code will ever be executed in
+the above situation (where a formal type parameter is in scope, and its
+actual value violates the bound). In fact, code which could be executed in
+this context would have static knowledge of the super-bound, and hence
+there is no soundness issue in the body of such a class, nor in its
+subclasses or subtypes.
+
+```dart
+// A thought experiment (explaining why this is a compile-time error).
+class D implements C<Object> {
+  Object x;
+  bool get foo => false;
+}
+```
+
+It is reasonable to expect a `C<Object>` to have a field `x` of type
+`Object` and a `foo` getter of type `bool`, and we can easily implement
+that. There is no soundness issue, because no code is inherited from `C`.
+
+But there is also an **external reason**: It is reasonable to expect that
+every instance will satisfy declared bounds, e.g., whenever an object is
+accessed under the type `C<T>` for any `T`, it should be true that `T` is a
+subtype of `num`. This is not a soundness issue per se; the class `D` is
+perfectly consistent in its behavior with a typing as `C<Object>`, and its
+implementation is type safe.
+
+However, it seems reasonable for developers to reckon as follows: When an
+object _o_ has a static type like `C<Object>` it must satisfy the
+expectations associated with `C`. So there exists an actual type argument
+`T` which satisfies the declared bound, and _o_ must then behave like an
+instance of `C<T>`. In the example, with the given bound `num` and using
+covariance, _o_ would then be guaranteed to be typable as a `C<num>`. So
+the following contains downcasts, but it is "reasonable" to expect them to
+be guaranteed to succeed at run time:
+
+```dart
+C<Object> cObject = ...; // Complex creation.
+C<num> cNum = cObject; // Safe, right?
+bool b = (cObject.x as num).isNegative; // Also safe, right?
+```
+
+If `D` is allowed to exist then we can have a consistent language, and the
+above would be OK, but the "safe" downcasts would in fact fail at run
+time. The point is that when we know something is a `C<Object>` then we know
+that it satisfies the constraints of `C<Object>`, and we can't assume that
+it satisfies any stronger constraints (such as those of `C<num>`).
+
+This is not a soundness issue in the traditional sense, but it is an issue
+about how important it is to **allow** developers to make that **extra
+assumption** that all implementations of a given generic class _G_ must be
+just as picky about their actual type arguments as _G_ itself.
+
+We think that it is indeed justified to make these extra assumptions, and
+**hence** we have **banned super-bounded `implements` clauses**.
+
+The extra assumptions which are now supported could be stated as: We can
+rely on the declared bounds on type parameters of generic classes and
+functions, also for code which is outside the scope of those type
+parameters.
+
+In short, the underlying principle is that "there cannot be an instance of
+a generic class (including instances of subtypes), nor an invocation of a
+generic function, whose actual type arguments violate the declared
+bounds".
+
+Super-bounded function types are possible and useful. Consider the
+following example:
+```dart
+// If bound on `X` holds then `C<X>` is regular-bounded.
+typedef F<X extends C<X>> = C<X> Function();
+
+main() {
+  F<C<dynamic>> f = ...; // OK, checking `F<C<Null>>` and `C<dynamic> Function()`.
+  var c0 = f(); // `c0` has type `C<C<dynamic>>`.
+  var c1 = c0.next; // `c1` has type `C<dynamic>`
+  var c2 = c1.next; // `c2` has type `dynamic`
+  ...
+}
+```
+In this example, an unfolding of `C` to a specific level is supported in a
+function type, and application of such a function immediately brings out
+class types like `C<C<dynamic>>` that we have already argued are useful.
+
+
+## Updates
+
+*   Version 0.5 (2018-01-11), generalized to allow replacement of top types
+    covariantly and bottom types contravariantly. Introduced checks on
+    parameterized type aliases (such that bounds declared for the type
+    alias itself are taken into account).
+
+*   Version 0.4 (2017-12-14), clarified several points and corrected
+    locations where super-bounded types were prohibited, but we should just
+    say that the bounds must be satisfied.
+
+*   Version 0.3 (2017-11-07), dropping `super`, instead allowing `Object`,
+    `dynamic`, or `void` for super-bounded types, with a similar treatment as
+    `super` used to get.
+
+*   Version 0.2 (2017-10-31), introduced keyword `super` as a type argument.
+
+*   Version 0.1 (2017-10-20), initial version of this informal specification.
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 815fe24..ae06bdf 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -68,7 +68,7 @@
         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('preview-dart-2',
+    argParser.addFlag('use-cfe',
         negatable: false,
         help: 'Benchmark against the Dart 2.0 front end implementation.');
     argParser.addOption('repeat',
@@ -96,7 +96,7 @@
     final String benchmarkId = argResults.rest.first;
     final int repeatCount = int.parse(argResults['repeat']);
     final bool quick = argResults['quick'];
-    final bool previewDart2 = argResults['preview-dart-2'];
+    final bool useCFE = argResults['use-cfe'];
     final bool verbose = argResults['verbose'];
 
     final Benchmark benchmark =
@@ -118,7 +118,7 @@
       for (int iteration = 0; iteration < actualIterations; iteration++) {
         BenchMarkResult newResult = await benchmark.run(
           quick: quick,
-          previewDart2: previewDart2,
+          useCFE: useCFE,
           verbose: verbose,
         );
         print('  $newResult');
@@ -149,7 +149,7 @@
 
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool previewDart2: 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 f035551..7640ff1 100644
--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+++ b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
@@ -28,7 +28,7 @@
   @override
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool previewDart2: false,
+    bool useCFE: false,
     bool verbose: false,
   }) async {
     if (!quick) {
@@ -38,7 +38,7 @@
     Stopwatch stopwatch = new Stopwatch()..start();
 
     AnalysisServerMemoryUsageTest test = new AnalysisServerMemoryUsageTest();
-    await test.setUp(previewDart2: previewDart2);
+    await test.setUp(useCFE: useCFE);
     await test.subscribeToStatusNotifications();
     await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), []);
     await test.analysisFinished;
@@ -73,7 +73,7 @@
   @override
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool previewDart2: false,
+    bool useCFE: false,
     bool verbose: false,
   }) async {
     Stopwatch stopwatch = new Stopwatch()..start();
@@ -82,7 +82,7 @@
     if (verbose) {
       test.debugStdio();
     }
-    await test.setUp(previewDart2: previewDart2);
+    await test.setUp(useCFE: useCFE);
     await test.subscribeToStatusNotifications();
     await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), []);
     await test.analysisFinished;
diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/analysis_server/benchmark/perf/memory_tests.dart
index 1971bf5..ed9a3d1 100644
--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/memory_tests.dart
@@ -55,7 +55,7 @@
    * The server is automatically started before every test.
    */
   @override
-  Future setUp({bool previewDart2: false}) {
+  Future setUp({bool useCFE: false}) {
     onAnalysisErrors.listen((AnalysisErrorsParams params) {
       currentAnalysisErrors[params.file] = params.errors;
     });
@@ -70,7 +70,7 @@
     });
     return startServer(
       servicesPort: vmServicePort,
-      previewDart2: previewDart2,
+      cfe: useCFE,
     ).then((_) {
       server.listenToOutput(dispatchNotification);
       server.exitCode.then((_) {
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index bd4e9c9..2108ce0 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -363,7 +363,7 @@
         new PluginWatcher(resourceProvider, pluginManager);
 
     defaultContextOptions.generateImplicitErrors = false;
-    defaultContextOptions.useFastaParser = options.previewDart2;
+    defaultContextOptions.useFastaParser = options.useCFE;
 
     {
       String name = options.newAnalysisDriverLog;
@@ -1122,9 +1122,14 @@
   CrashReportSender crashReportSender;
 
   /**
-   * Whether to enable the Dart 2.0 Front End.
+   * Whether to enable the Dart 2.0 preview.
    */
   bool previewDart2 = false;
+
+  /**
+   * Whether to enable the Dart 2.0 Common Front End implementation.
+   */
+  bool useCFE = false;
 }
 
 /**
@@ -1340,6 +1345,7 @@
     builder.byteStore = analysisServer.byteStore;
     builder.fileContentOverlay = analysisServer.fileContentOverlay;
     builder.previewDart2 = analysisServer.options.previewDart2;
+    builder.useCFE = analysisServer.options.useCFE;
     return builder;
   }
 
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index cf271e5..272498f 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -364,7 +364,6 @@
   /**
    * Return a list of all of the plugins that are currently known.
    */
-  @visibleForTesting
   List<PluginInfo> get plugins => _pluginMap.values.toList();
 
   /**
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 039d508..594ca15 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -262,11 +262,16 @@
   static const String CACHE_FOLDER = "cache";
 
   /**
-   * Whether to enable the Dart 2.0 Front End.
+   * Whether to enable the Dart 2.0 preview.
    */
   static const String PREVIEW_DART2 = "preview-dart-2";
 
   /**
+   * Whether to enable the Dart 2.0 Common Front End implementation.
+   */
+  static const String USE_CFE = "use-cfe";
+
+  /**
    * The instrumentation server that is to be used by the analysis server.
    */
   InstrumentationServer instrumentationServer;
@@ -312,6 +317,7 @@
     analysisServerOptions.clientVersion = results[CLIENT_VERSION];
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
     analysisServerOptions.previewDart2 = results[PREVIEW_DART2];
+    analysisServerOptions.useCFE = results[USE_CFE];
 
     ContextBuilderOptions.flutterRepo = results[FLUTTER_REPO];
 
@@ -537,8 +543,9 @@
         defaultsTo: "as-is");
     parser.addOption(CACHE_FOLDER,
         help: "[path] path to the location where to cache data");
-    parser.addFlag(PREVIEW_DART2,
-        help: "Enable the Dart 2.0 Front End implementation.");
+    parser.addFlag(PREVIEW_DART2, help: "Enable the Dart 2.0 preview");
+    parser.addFlag(USE_CFE,
+        help: "Enable the Dart 2.0 Common Front End implementation");
 
     return parser;
   }
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index a43d978..e11f938 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/search.dart';
 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange;
-import 'package:meta/meta.dart';
 
 /**
  * A [SearchEngine] implementation.
@@ -134,7 +133,6 @@
   }
 }
 
-@visibleForTesting
 class SearchMatchImpl implements SearchMatch {
   @override
   final String file;
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 5eb1038..e43652e 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -1169,6 +1169,8 @@
     h3('Status');
     buf.writeln(writeOption('Preview-dart-2',
         diagnosticsSite.socketServer.analysisServerOptions.previewDart2));
+    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/test/analysis/notification_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index 4fc4eb1..9b0a08f 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -14,7 +14,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
-import '../mocks.dart';
 
 main() {
   defineReflectiveSuite(() {
diff --git a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
index 8cfbfad..c3f7d6bb 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
@@ -12,7 +12,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
-import '../mocks.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -37,7 +36,7 @@
 
   Future<Null> prepareAnalyzedFiles() async {
     addGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
-    await pumpEventQueue();
+    await pumpEventQueue(times: 5000);
   }
 
   void processNotification(Notification notification) {
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index 161eb85..dbe5ac0 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -16,7 +16,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
-import '../mocks.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -76,7 +75,7 @@
 import 'does_not_exist.dart';
 ''');
     await waitForTasksFinished();
-    await pumpEventQueue();
+    await pumpEventQueue(times: 5000);
     List<AnalysisError> errors = filesErrors[testFile];
     // Verify that we are generating only 1 error for the bad URI.
     // https://github.com/dart-lang/sdk/issues/23754
@@ -139,7 +138,7 @@
     createProject();
     addTestFile('library lib');
     await waitForTasksFinished();
-    await pumpEventQueue();
+    await pumpEventQueue(times: 5000);
     List<AnalysisError> errors = filesErrors[testFile];
     expect(errors, hasLength(1));
     AnalysisError error = errors[0];
@@ -192,7 +191,7 @@
 }
 ''');
     await waitForTasksFinished();
-    await pumpEventQueue();
+    await pumpEventQueue(times: 5000);
     List<AnalysisError> errors = filesErrors[testFile];
     expect(errors, hasLength(1));
     AnalysisError error = errors[0];
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 1f797a9..8c45789 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -249,44 +249,37 @@
   @override
   String get byteStorePath {
     fail('Unexpected invocation of byteStorePath');
-    return null;
   }
 
   @override
   InstrumentationService get instrumentationService {
     fail('Unexpected invocation of instrumentationService');
-    return null;
   }
 
   @override
   NotificationManager get notificationManager {
     fail('Unexpected invocation of notificationManager');
-    return null;
   }
 
   @override
   List<PluginInfo> get plugins {
     fail('Unexpected invocation of plugins');
-    return null;
   }
 
   @override
   ResourceProvider get resourceProvider {
     fail('Unexpected invocation of resourceProvider');
-    return null;
   }
 
   @override
   String get sdkPath {
     fail('Unexpected invocation of sdkPath');
-    return null;
   }
 
   @override
   Future<Null> addPluginToContextRoot(
       analyzer.ContextRoot contextRoot, String path) async {
     fail('Unexpected invocation of addPluginToContextRoot');
-    return null;
   }
 
   @override
@@ -306,13 +299,11 @@
   @override
   List<String> pathsFor(String pluginPath) {
     fail('Unexpected invocation of pathsFor');
-    return null;
   }
 
   @override
   List<PluginInfo> pluginsForContextRoot(analyzer.ContextRoot contextRoot) {
     fail('Unexpected invocation of pluginsForContextRoot');
-    return null;
   }
 
   @override
@@ -352,6 +343,5 @@
   @override
   Future<List<Null>> stopAll() async {
     fail('Unexpected invocation of stopAll');
-    return null;
   }
 }
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 9ba47f2..bbb3807 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -120,7 +120,7 @@
     server.setAnalysisRoots('0', ['/pkg'], [], {});
     // Pump the event queue to make sure the server has finished any
     // analysis.
-    return pumpEventQueue().then((_) {
+    return pumpEventQueue(times: 5000).then((_) {
       List<Notification> notifications = channel.notificationsReceived;
       expect(notifications, isNotEmpty);
       // expect at least one notification indicating analysis is in progress
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 4cd4a46..4064bbb 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -38,7 +38,7 @@
             reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
       });
 
-      test('$benchmarkId-preview-dart-2', () {
+      test('$benchmarkId-use-cfe', () {
         ProcessResult r = Process.runSync(
           Platform.resolvedExecutable,
           [
@@ -46,7 +46,7 @@
             'run',
             '--repeat=1',
             '--quick',
-            '--preview-dart-2',
+            '--use-cfe',
             benchmarkId
           ],
           workingDirectory: _serverSourcePath,
diff --git a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
index 4395c7a..ad0c8ac 100644
--- a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
+++ b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
@@ -13,8 +13,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../mocks.dart';
-
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ByteStreamClientChannelTest);
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 7933584..94a3acd 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -46,6 +46,15 @@
   });
 }
 
+/// 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 AbstractContextManagerTest extends ContextManagerTest {
   void test_contextsInAnalysisRoot_nestedContext() {
@@ -86,7 +95,7 @@
     // package:analysis_server/src/context_manager.dart 1043:16           ContextManagerImpl._checkForPackagespecUpdate
     // package:analysis_server/src/context_manager.dart 1553:5            ContextManagerImpl._handleWatchEvent
     //return super.test_embedder_added();
-    fail('NoSuchMethodError');
+    _fail('NoSuchMethodError');
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -2164,7 +2173,7 @@
     //return super.test_optionsFile_update_strongMode();
     // After a few other changes, the test now times out on my machine, so I'm
     // disabling it in order to prevent it from being flaky.
-    fail('Test times out');
+    _fail('Test times out');
     var file = resourceProvider.newFile('$projPath/bin/test.dart', r'''
 main() {
   var paths = <int>[];
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 90b92b4..08eeb1ba 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -19,7 +19,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'domain_completion_util.dart';
-import 'mocks.dart' show pumpEventQueue;
 
 main() {
   defineReflectiveSuite(() {
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 9fe5e02..d5a61dc 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -31,6 +31,15 @@
   });
 }
 
+/// 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 ConvertGetterMethodToMethodTest extends _AbstractGetRefactoring_Test {
   test_function() {
@@ -1214,7 +1223,7 @@
 
   @failingTest
   test_OK() {
-    fail('The move file refactoring is not supported under the new driver');
+    _fail('The move file refactoring is not supported under the new driver');
     newFile('/project/bin/lib.dart');
     addTestFile('''
 import 'dart:math';
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 4420642..b9c0748 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
@@ -12,10 +12,19 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OptionsIntegrationTest);
-    defineReflectiveTests(OptionsIntegrationTest_PreviewDart2);
+    defineReflectiveTests(OptionsIntegrationTest_UseCFE);
   });
 }
 
+/// 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 OptionsIntegrationTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
@@ -23,7 +32,7 @@
     // TimeoutException after 0:00:30.000000: Test timed out after 30 seconds
     // (#28868).
 
-    fail('test timeout expected - #28868');
+    _fail('test timeout expected - #28868');
 
     String options = sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
     writeFile(options, '''
@@ -54,7 +63,7 @@
     // TimeoutException after 0:00:30.000000: Test timed out after 30 seconds
     // (#28868).
 
-    fail('test timeout expected - #28868');
+    _fail('test timeout expected - #28868');
 
     String options = sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_FILE);
     writeFile(options, '''
@@ -82,7 +91,7 @@
 }
 
 @reflectiveTest
-class OptionsIntegrationTest_PreviewDart2 extends OptionsIntegrationTest {
+class OptionsIntegrationTest_UseCFE extends OptionsIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 fe968d7..c56fb03 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
-    defineReflectiveTests(AnalysisErrorIntegrationTest_PreviewDart2);
+    defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
   });
 }
 
@@ -101,10 +101,9 @@
 }
 
 @reflectiveTest
-class AnalysisErrorIntegrationTest_PreviewDart2
-    extends AnalysisErrorIntegrationTest {
+class AnalysisErrorIntegrationTest_UseCFE extends AnalysisErrorIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 0d18844..d992b66 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainGetErrorsTest);
-    defineReflectiveTests(AnalysisDomainGetErrorsTest_PreviewDart2);
+    defineReflectiveTests(AnalysisDomainGetErrorsTest_UseCFE);
   });
 }
 
@@ -74,14 +74,14 @@
       {bool checked: true,
       int diagnosticPort,
       int servicesPort,
-      bool previewDart2: false}) {
+      bool cfe: false}) {
     String sdkPath = createNonStandardSdk();
     return server.start(
         checked: checked,
         diagnosticPort: diagnosticPort,
         sdkPath: sdkPath,
         servicesPort: servicesPort,
-        previewDart2: previewDart2);
+        useCFE: cfe);
   }
 
   Future test_getErrors() async {
@@ -100,8 +100,7 @@
 }
 
 @reflectiveTest
-class AnalysisDomainGetErrorsTest_PreviewDart2
-    extends AnalysisDomainGetErrorsTest {
+class AnalysisDomainGetErrorsTest_UseCFE extends AnalysisDomainGetErrorsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 c8a518f..a4912ac 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
-    defineReflectiveTests(GetErrorsTest_PreviewDart2);
+    defineReflectiveTests(GetErrorsTest_UseCFE);
   });
 }
 
@@ -37,7 +37,7 @@
 }
 
 @reflectiveTest
-class GetErrorsTest_PreviewDart2 extends GetErrorsTest {
+class GetErrorsTest_UseCFE extends GetErrorsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 352df8c..f9a45f6 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetHoverIntegrationTest);
-    defineReflectiveTests(AnalysisGetHoverIntegrationTest_PreviewDart2);
+    defineReflectiveTests(AnalysisGetHoverIntegrationTest_UseCFE);
   });
 }
 
@@ -190,10 +190,10 @@
 }
 
 @reflectiveTest
-class AnalysisGetHoverIntegrationTest_PreviewDart2
+class AnalysisGetHoverIntegrationTest_UseCFE
     extends AnalysisGetHoverIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 4823a1a..655fa65 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,8 +15,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
-    defineReflectiveTests(
-        AnalysisGetImportedElementsIntegrationTest_PreviewDart2);
+    defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
   });
 }
 
@@ -142,8 +141,8 @@
 }
 
 @reflectiveTest
-class AnalysisGetImportedElementsIntegrationTest_PreviewDart2
+class AnalysisGetImportedElementsIntegrationTest_UseCFE
     extends AnalysisGetImportedElementsIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 dda8e99..318f244 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetLibraryDependenciesTest);
-    defineReflectiveTests(GetLibraryDependenciesTest_PreviewDart2);
+    defineReflectiveTests(GetLibraryDependenciesTest_UseCFE);
   });
 }
 
@@ -48,8 +48,7 @@
 }
 
 @reflectiveTest
-class GetLibraryDependenciesTest_PreviewDart2
-    extends GetLibraryDependenciesTest {
+class GetLibraryDependenciesTest_UseCFE extends GetLibraryDependenciesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 e9757fb..a9d7bb7 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetNavigationTest);
-    defineReflectiveTests(GetNavigationTest_PreviewDart2);
+    defineReflectiveTests(GetNavigationTest_UseCFE);
   });
 }
 
@@ -68,9 +68,9 @@
 }
 
 @reflectiveTest
-class GetNavigationTest_PreviewDart2 extends GetNavigationTest {
+class GetNavigationTest_UseCFE extends GetNavigationTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 532002c..7142da9 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetReachableSourcesTest);
-    defineReflectiveTests(GetReachableSourcesTest_PreviewDart2);
+    defineReflectiveTests(GetReachableSourcesTest_UseCFE);
   });
 }
 
@@ -50,7 +50,7 @@
 }
 
 @reflectiveTest
-class GetReachableSourcesTest_PreviewDart2 extends GetReachableSourcesTest {
+class GetReachableSourcesTest_UseCFE extends GetReachableSourcesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 8091efa..f52caaf 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
-    defineReflectiveTests(AnalysisHighlightsTest_PreviewDart2);
+    defineReflectiveTests(AnalysisHighlightsTest_UseCFE);
   });
 }
 
@@ -147,9 +147,9 @@
 }
 
 @reflectiveTest
-class AnalysisHighlightsTest_PreviewDart2 extends AnalysisHighlightsTest {
+class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
index 7d7314b..2157e77 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
@@ -14,7 +14,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
-    defineReflectiveTests(AnalysisHighlightsTest_PreviewDart2);
+    defineReflectiveTests(AnalysisHighlightsTest_UseCFE);
   });
 }
 
@@ -24,14 +24,14 @@
     bool checked: true,
     int diagnosticPort,
     int servicesPort,
-    bool previewDart2: false,
+    bool cfe: false,
   }) {
     return server.start(
         checked: checked,
         diagnosticPort: diagnosticPort,
         servicesPort: servicesPort,
         useAnalysisHighlight2: true,
-        previewDart2: previewDart2);
+        useCFE: cfe);
   }
 
   test_highlights() {
@@ -167,7 +167,7 @@
 }
 
 @reflectiveTest
-class AnalysisHighlightsTest_PreviewDart2 extends AnalysisHighlightsTest {
+class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 803c4a1..d217042 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LintIntegrationTest);
-    defineReflectiveTests(LintIntegrationTest_PreviewDart2);
+    defineReflectiveTests(LintIntegrationTest_UseCFE);
   });
 }
 
@@ -84,7 +84,7 @@
 }
 
 @reflectiveTest
-class LintIntegrationTest_PreviewDart2 extends LintIntegrationTest {
+class LintIntegrationTest_UseCFE extends LintIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 bad4f91..1eb6b71 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNavigationTest);
-    defineReflectiveTests(AnalysisNavigationTest_PreviewDart2);
+    defineReflectiveTests(AnalysisNavigationTest_UseCFE);
   });
 }
 
@@ -84,7 +84,6 @@
         }
       }
       fail('No element found for index $index');
-      return null;
     }
 
     void checkLocal(
@@ -137,9 +136,9 @@
 }
 
 @reflectiveTest
-class AnalysisNavigationTest_PreviewDart2 extends AnalysisNavigationTest {
+class AnalysisNavigationTest_UseCFE extends AnalysisNavigationTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 78f8ca4..5174ef4 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OccurrencesTest);
-    defineReflectiveTests(OccurrencesTest_PreviewDart2);
+    defineReflectiveTests(OccurrencesTest_UseCFE);
   });
 }
 
@@ -50,7 +50,6 @@
           }
         }
         fail('No element found matching $elementName');
-        return null;
       }
 
       void check(String elementName, Iterable<String> expectedOccurrences) {
@@ -69,7 +68,7 @@
 }
 
 @reflectiveTest
-class OccurrencesTest_PreviewDart2 extends OccurrencesTest {
+class OccurrencesTest_UseCFE extends OccurrencesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 048ae85..0d5dc43 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
-    defineReflectiveTests(OutlineTest_PreviewDart2);
+    defineReflectiveTests(OutlineTest_UseCFE);
   });
 }
 
@@ -85,7 +85,7 @@
 }
 
 @reflectiveTest
-class OutlineTest_PreviewDart2 extends OutlineTest {
+class OutlineTest_UseCFE extends OutlineTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 ca1bdbea..39c4bb4 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -11,7 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OverridesTest);
-    defineReflectiveTests(OverridesTest_PreviewDart2);
+    defineReflectiveTests(OverridesTest_UseCFE);
   });
 }
 
@@ -123,7 +123,7 @@
 }
 
 @reflectiveTest
-class OverridesTest_PreviewDart2 extends OverridesTest {
+class OverridesTest_UseCFE extends OverridesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 8423906..5cca2f0 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -13,7 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    defineReflectiveTests(SetAnalysisRootsTest_PreviewDart2);
+    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
@@ -80,7 +80,7 @@
 }
 
 @reflectiveTest
-class SetAnalysisRootsTest_PreviewDart2 extends SetAnalysisRootsTest {
+class SetAnalysisRootsTest_UseCFE extends SetAnalysisRootsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 792e290..7a726ab 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -17,7 +17,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
-    defineReflectiveTests(ReanalyzeTest_PreviewDart2);
+    defineReflectiveTests(ReanalyzeTest_UseCFE);
   });
 }
 
@@ -50,7 +50,7 @@
 }
 
 @reflectiveTest
-class ReanalyzeTest_PreviewDart2 extends ReanalyzeTest {
+class ReanalyzeTest_UseCFE extends ReanalyzeTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 23693a7..319a4a4 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -11,7 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
-    defineReflectiveTests(ReanalyzeTest_PreviewDart2);
+    defineReflectiveTests(ReanalyzeTest_UseCFE);
   });
 }
 
@@ -41,7 +41,7 @@
 }
 
 @reflectiveTest
-class ReanalyzeTest_PreviewDart2 extends ReanalyzeTest {
+class ReanalyzeTest_UseCFE extends ReanalyzeTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 80869a9..f9ebcb0 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    defineReflectiveTests(SetAnalysisRootsTest_PreviewDart2);
+    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
@@ -33,7 +33,7 @@
 }
 
 @reflectiveTest
-class SetAnalysisRootsTest_PreviewDart2 extends SetAnalysisRootsTest {
+class SetAnalysisRootsTest_UseCFE extends SetAnalysisRootsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 3ee248a..ff147fc 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
@@ -11,7 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetGeneralSubscriptionsTest);
-    defineReflectiveTests(SetGeneralSubscriptionsTest_PreviewDart2);
+    defineReflectiveTests(SetGeneralSubscriptionsTest_UseCFE);
   });
 }
 
@@ -41,8 +41,7 @@
 }
 
 @reflectiveTest
-class SetGeneralSubscriptionsTest_PreviewDart2
-    extends SetGeneralSubscriptionsTest {
+class SetGeneralSubscriptionsTest_UseCFE extends SetGeneralSubscriptionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 6a07229..7d86706 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPriorityFilesTest);
-    defineReflectiveTests(SetPriorityFilesTest_PreviewDart2);
+    defineReflectiveTests(SetPriorityFilesTest_UseCFE);
   });
 }
 
@@ -31,7 +31,7 @@
 }
 
 @reflectiveTest
-class SetPriorityFilesTest_PreviewDart2 extends SetPriorityFilesTest {
+class SetPriorityFilesTest_UseCFE extends SetPriorityFilesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 1656f80..02dcd05 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_PreviewDart2);
+    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -33,7 +33,7 @@
 }
 
 @reflectiveTest
-class SetSubscriptionsTest_PreviewDart2 extends SetSubscriptionsTest {
+class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 c42ee65..42ef868 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_PreviewDart2);
+    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -53,9 +53,9 @@
 }
 
 @reflectiveTest
-class UpdateContentTest_PreviewDart2 extends UpdateContentTest {
+class UpdateContentTest_UseCFE extends UpdateContentTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 ac2644b..2238262 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_PreviewDart2);
+    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -108,7 +108,7 @@
 }
 
 @reflectiveTest
-class UpdateContentTest_PreviewDart2 extends UpdateContentTest {
+class UpdateContentTest_UseCFE extends UpdateContentTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 f4d9610..5d6b548 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateOptionsTest);
-    defineReflectiveTests(UpdateOptionsTest_PreviewDart2);
+    defineReflectiveTests(UpdateOptionsTest_UseCFE);
   });
 }
 
@@ -48,7 +48,7 @@
 }
 
 @reflectiveTest
-class UpdateOptionsTest_PreviewDart2 extends UpdateOptionsTest {
+class UpdateOptionsTest_UseCFE extends UpdateOptionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 d7dfdfd..d04e9ee 100644
--- a/pkg/analysis_server/test/integration/analytics/enable_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/enable_test.dart
@@ -11,7 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EnableTest);
-    defineReflectiveTests(EnableTest_PreviewDart2);
+    defineReflectiveTests(EnableTest_UseCFE);
   });
 }
 
@@ -34,7 +34,7 @@
 }
 
 @reflectiveTest
-class EnableTest_PreviewDart2 extends EnableTest {
+class EnableTest_UseCFE extends EnableTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 daf089d..712a050 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsEnabledTest);
-    defineReflectiveTests(IsEnabledTest_PreviewDart2);
+    defineReflectiveTests(IsEnabledTest_UseCFE);
   });
 }
 
@@ -27,7 +27,7 @@
 }
 
 @reflectiveTest
-class IsEnabledTest_PreviewDart2 extends IsEnabledTest {
+class IsEnabledTest_UseCFE extends IsEnabledTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 1098697..250790e 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendEventTest);
-    defineReflectiveTests(SendEventTest_PreviewDart2);
+    defineReflectiveTests(SendEventTest_UseCFE);
   });
 }
 
@@ -32,7 +32,7 @@
 }
 
 @reflectiveTest
-class SendEventTest_PreviewDart2 extends SendEventTest {
+class SendEventTest_UseCFE extends SendEventTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 03ff2c4..ee8d812 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendTimingTest);
-    defineReflectiveTests(SendTimingTest_PreviewDart2);
+    defineReflectiveTests(SendTimingTest_UseCFE);
   });
 }
 
@@ -32,7 +32,7 @@
 }
 
 @reflectiveTest
-class SendTimingTest_PreviewDart2 extends SendTimingTest {
+class SendTimingTest_UseCFE extends SendTimingTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 b3f4e19..74aee23 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionsTest);
-    defineReflectiveTests(GetSuggestionsTest_PreviewDart2);
+    defineReflectiveTests(GetSuggestionsTest_UseCFE);
   });
 }
 
@@ -119,7 +119,7 @@
 }
 
 @reflectiveTest
-class GetSuggestionsTest_PreviewDart2 extends GetSuggestionsTest {
+class GetSuggestionsTest_UseCFE extends GetSuggestionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 282b5f7..897113f 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetDiagnosticsTest);
-    defineReflectiveTests(GetDiagnosticsTest_PreviewDart2);
+    defineReflectiveTests(GetDiagnosticsTest_UseCFE);
   });
 }
 
@@ -31,7 +31,7 @@
 }
 
 @reflectiveTest
-class GetDiagnosticsTest_PreviewDart2 extends GetDiagnosticsTest {
+class GetDiagnosticsTest_UseCFE extends GetDiagnosticsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 d4009e6..bcce8b6 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetServerPortTest);
-    defineReflectiveTests(GetServerPortTest_PreviewDart2);
+    defineReflectiveTests(GetServerPortTest_UseCFE);
   });
 }
 
@@ -38,7 +38,7 @@
 }
 
 @reflectiveTest
-class GetServerPortTest_PreviewDart2 extends GetServerPortTest {
+class GetServerPortTest_UseCFE extends GetServerPortTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 4380afd..9b161ba 100644
--- a/pkg/analysis_server/test/integration/edit/format_test.dart
+++ b/pkg/analysis_server/test/integration/edit/format_test.dart
@@ -11,7 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
-    defineReflectiveTests(FormatTest_PreviewDart2);
+    defineReflectiveTests(FormatTest_UseCFE);
   });
 }
 
@@ -81,7 +81,7 @@
 }
 
 @reflectiveTest
-class FormatTest_PreviewDart2 extends FormatTest {
+class FormatTest_UseCFE extends FormatTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 0918d7b..b54ddd0 100644
--- a/pkg/analysis_server/test/integration/edit/get_assists_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
@@ -14,7 +14,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAssistsTest);
-    defineReflectiveTests(GetAssistsTest_PreviewDart2);
+    defineReflectiveTests(GetAssistsTest_UseCFE);
   });
 }
 
@@ -53,9 +53,9 @@
 }
 
 @reflectiveTest
-class GetAssistsTest_PreviewDart2 extends GetAssistsTest {
+class GetAssistsTest_UseCFE extends GetAssistsTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 0ae9808..0d359f6 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAvailableRefactoringsTest);
-    defineReflectiveTests(GetAvailableRefactoringsTest_PreviewDart2);
+    defineReflectiveTests(GetAvailableRefactoringsTest_UseCFE);
   });
 }
 
@@ -38,8 +38,7 @@
 }
 
 @reflectiveTest
-class GetAvailableRefactoringsTest_PreviewDart2
-    extends GetAvailableRefactoringsTest {
+class GetAvailableRefactoringsTest_UseCFE extends GetAvailableRefactoringsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 fc111ae..c0e52b7 100644
--- a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
@@ -14,7 +14,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetFixesTest);
-    defineReflectiveTests(GetFixesTest_PreviewDart2);
+    defineReflectiveTests(GetFixesTest_UseCFE);
   });
 }
 
@@ -63,9 +63,9 @@
 }
 
 @reflectiveTest
-class GetFixesTest_PreviewDart2 extends GetFixesTest {
+class GetFixesTest_UseCFE extends GetFixesTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 4a3e3e9..8e34a3b 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetPostfixCompletionTest);
-    defineReflectiveTests(GetPostfixCompletionTest_PreviewDart2);
+    defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
   });
 }
 
@@ -53,7 +53,7 @@
 }
 
 @reflectiveTest
-class GetPostfixCompletionTest_PreviewDart2 extends GetPostfixCompletionTest {
+class GetPostfixCompletionTest_UseCFE extends GetPostfixCompletionTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 59ac3a5..f6469aa 100644
--- a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
@@ -14,7 +14,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetRefactoringTest);
-    defineReflectiveTests(GetRefactoringTest_PreviewDart2);
+    defineReflectiveTests(GetRefactoringTest_UseCFE);
   });
 }
 
@@ -69,9 +69,9 @@
 }
 
 @reflectiveTest
-class GetRefactoringTest_PreviewDart2 extends GetRefactoringTest {
+class GetRefactoringTest_UseCFE extends GetRefactoringTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 345c5cf..d462006 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
@@ -14,7 +14,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetStatementCompletionTest);
-    defineReflectiveTests(GetStatementCompletionTest_PreviewDart2);
+    defineReflectiveTests(GetStatementCompletionTest_UseCFE);
   });
 }
 
@@ -55,10 +55,9 @@
 }
 
 @reflectiveTest
-class GetStatementCompletionTest_PreviewDart2
-    extends GetStatementCompletionTest {
+class GetStatementCompletionTest_UseCFE extends GetStatementCompletionTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 4f3d343..da142fc 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -16,8 +16,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportElementsIntegrationTest);
-    defineReflectiveTests(
-        AnalysisGetImportElementsIntegrationTest_PreviewDart2);
+    defineReflectiveTests(AnalysisGetImportElementsIntegrationTest_UseCFE);
   });
 }
 
@@ -141,8 +140,8 @@
 }
 
 @reflectiveTest
-class AnalysisGetImportElementsIntegrationTest_PreviewDart2
+class AnalysisGetImportElementsIntegrationTest_UseCFE
     extends AnalysisGetImportElementsIntegrationTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 afda363..32f59cb 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsPostfixCompletionApplicableTest);
-    defineReflectiveTests(IsPostfixCompletionApplicableTest_PreviewDart2);
+    defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
   });
 }
 
@@ -42,8 +42,8 @@
 }
 
 @reflectiveTest
-class IsPostfixCompletionApplicableTest_PreviewDart2
+class IsPostfixCompletionApplicableTest_UseCFE
     extends IsPostfixCompletionApplicableTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 b5f52b7..3caf5f80 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListPostfixCompletionTemplatesTest);
-    defineReflectiveTests(ListPostfixCompletionTemplatesTest_PreviewDart2);
+    defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
   });
 }
 
@@ -42,8 +42,8 @@
 }
 
 @reflectiveTest
-class ListPostfixCompletionTemplatesTest_PreviewDart2
+class ListPostfixCompletionTemplatesTest_UseCFE
     extends ListPostfixCompletionTemplatesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 cc94235..4d519e9 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    defineReflectiveTests(OrganizeDirectivesTest_PreviewDart2);
+    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
@@ -77,7 +77,7 @@
 }
 
 @reflectiveTest
-class OrganizeDirectivesTest_PreviewDart2 extends OrganizeDirectivesTest {
+class OrganizeDirectivesTest_UseCFE extends OrganizeDirectivesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 277c168..da09496 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
-    defineReflectiveTests(SortMembersTest_PreviewDart2);
+    defineReflectiveTests(SortMembersTest_UseCFE);
   });
 }
 
@@ -65,7 +65,7 @@
 }
 
 @reflectiveTest
-class SortMembersTest_PreviewDart2 extends SortMembersTest {
+class SortMembersTest_UseCFE extends SortMembersTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 841a427..2604eab 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateContextTest);
-    defineReflectiveTests(CreateContextTest_PreviewDart2);
+    defineReflectiveTests(CreateContextTest_UseCFE);
   });
 }
 
@@ -25,7 +25,7 @@
 }
 
 @reflectiveTest
-class CreateContextTest_PreviewDart2 extends CreateContextTest {
+class CreateContextTest_UseCFE extends CreateContextTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 5277069..3cf0e19 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeleteContextTest);
-    defineReflectiveTests(DeleteContextTest_PreviewDart2);
+    defineReflectiveTests(DeleteContextTest_UseCFE);
   });
 }
 
@@ -44,7 +44,7 @@
 }
 
 @reflectiveTest
-class DeleteContextTest_PreviewDart2 extends DeleteContextTest {
+class DeleteContextTest_UseCFE extends DeleteContextTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 8b186cb..9990a23 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MapUriTest);
-    defineReflectiveTests(MapUriTest_PreviewDart2);
+    defineReflectiveTests(MapUriTest_UseCFE);
   });
 }
 
@@ -41,7 +41,7 @@
 }
 
 @reflectiveTest
-class MapUriTest_PreviewDart2 extends MapUriTest {
+class MapUriTest_UseCFE extends MapUriTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 09835d7..a715edd 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_PreviewDart2);
+    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -24,7 +24,7 @@
 }
 
 @reflectiveTest
-class SetSubscriptionsTest_PreviewDart2 extends SetSubscriptionsTest {
+class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 13ae694..823ac4d 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetKytheEntriesTest);
-    defineReflectiveTests(GetKytheEntriesTest_PreviewDart2);
+    defineReflectiveTests(GetKytheEntriesTest_UseCFE);
   });
 }
 
@@ -40,7 +40,7 @@
 }
 
 @reflectiveTest
-class GetKytheEntriesTest_PreviewDart2 extends GetKytheEntriesTest {
+class GetKytheEntriesTest_UseCFE extends GetKytheEntriesTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 823e17f..bc24fb8 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -13,7 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementReferencesTest);
-    defineReflectiveTests(FindElementReferencesTest_PreviewDart2);
+    defineReflectiveTests(FindElementReferencesTest_UseCFE);
   });
 }
 
@@ -73,9 +73,9 @@
 }
 
 @reflectiveTest
-class FindElementReferencesTest_PreviewDart2 extends FindElementReferencesTest {
+class FindElementReferencesTest_UseCFE extends FindElementReferencesTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 babe602..38f0c67 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberDeclarationsTest);
-    defineReflectiveTests(FindMemberDeclarationsTest_PreviewDart2);
+    defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
   });
 }
 
@@ -52,8 +52,7 @@
 }
 
 @reflectiveTest
-class FindMemberDeclarationsTest_PreviewDart2
-    extends FindMemberDeclarationsTest {
+class FindMemberDeclarationsTest_UseCFE extends FindMemberDeclarationsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 9c9cac3..3541b6f 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
@@ -13,7 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberReferencesTest);
-    defineReflectiveTests(FindMemberReferencesTest_PreviewDart2);
+    defineReflectiveTests(FindMemberReferencesTest_UseCFE);
   });
 }
 
@@ -55,9 +55,9 @@
 }
 
 @reflectiveTest
-class FindMemberReferencesTest_PreviewDart2 extends FindMemberReferencesTest {
+class FindMemberReferencesTest_UseCFE extends FindMemberReferencesTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 a422c7a..4a2a41d 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindTopLevelDeclarationsTest);
-    defineReflectiveTests(FindTopLevelDeclarationsTest_PreviewDart2);
+    defineReflectiveTests(FindTopLevelDeclarationsTest_UseCFE);
   });
 }
 
@@ -57,8 +57,7 @@
 }
 
 @reflectiveTest
-class FindTopLevelDeclarationsTest_PreviewDart2
-    extends FindTopLevelDeclarationsTest {
+class FindTopLevelDeclarationsTest_UseCFE extends FindTopLevelDeclarationsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 2d9a0a2..7970c1d 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetTypeHierarchyTest);
-    defineReflectiveTests(GetTypeHierarchyTest_PreviewDart2);
+    defineReflectiveTests(GetTypeHierarchyTest_UseCFE);
   });
 }
 
@@ -270,15 +270,14 @@
       return items[nameToIndex[name]];
     } else {
       fail('Class $name not found in hierarchy results');
-      return null;
     }
   }
 }
 
 @reflectiveTest
-class GetTypeHierarchyTest_PreviewDart2 extends GetTypeHierarchyTest {
+class GetTypeHierarchyTest_UseCFE extends GetTypeHierarchyTest {
   @override
-  bool get usePreviewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
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 485b771..2a85544 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetVersionTest);
-    defineReflectiveTests(GetVersionTest_PreviewDart2);
+    defineReflectiveTests(GetVersionTest_UseCFE);
   });
 }
 
@@ -21,7 +21,7 @@
 }
 
 @reflectiveTest
-class GetVersionTest_PreviewDart2 extends GetVersionTest {
+class GetVersionTest_UseCFE extends GetVersionTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 d86e9a0..1dbb9db 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,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsInvalidTest);
-    defineReflectiveTests(SetSubscriptionsInvalidTest_PreviewDart2);
+    defineReflectiveTests(SetSubscriptionsInvalidTest_UseCFE);
   });
 }
 
@@ -31,8 +31,7 @@
 }
 
 @reflectiveTest
-class SetSubscriptionsInvalidTest_PreviewDart2
-    extends SetSubscriptionsInvalidTest {
+class SetSubscriptionsInvalidTest_UseCFE extends SetSubscriptionsInvalidTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 c180f9a..afae71b 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
@@ -13,10 +13,19 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_PreviewDart2);
+    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
+/// 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 SetSubscriptionsTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
@@ -24,7 +33,7 @@
     // This test times out on the bots and has been disabled to keep them green.
     // We need to discover the cause and re-enable it.
 
-    fail(
+    _fail(
         'This test times out on the bots and has been disabled to keep them green.'
         'We need to discover the cause and re-enable it.');
 
@@ -65,7 +74,7 @@
 }
 
 @reflectiveTest
-class SetSubscriptionsTest_PreviewDart2 extends SetSubscriptionsTest {
+class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 8f24bdb..a68bf82 100644
--- a/pkg/analysis_server/test/integration/server/shutdown_test.dart
+++ b/pkg/analysis_server/test/integration/server/shutdown_test.dart
@@ -12,7 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ShutdownTest);
-    defineReflectiveTests(ShutdownTest_PreviewDart2);
+    defineReflectiveTests(ShutdownTest_UseCFE);
   });
 }
 
@@ -32,7 +32,7 @@
 }
 
 @reflectiveTest
-class ShutdownTest_PreviewDart2 extends ShutdownTest {
+class ShutdownTest_UseCFE extends ShutdownTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 1ffa86a..dab8eaa 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -13,7 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatusTest);
-    defineReflectiveTests(StatusTest_PreviewDart2);
+    defineReflectiveTests(StatusTest_UseCFE);
   });
 }
 
@@ -51,7 +51,7 @@
 }
 
 @reflectiveTest
-class StatusTest_PreviewDart2 extends StatusTest {
+class StatusTest_UseCFE extends StatusTest {
   @override
-  bool get usePreviewDart2 => true;
+  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 f8dc21a..466cde6 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -94,7 +94,7 @@
    * Amount of time to give the server to respond to a shutdown request before
    * forcibly terminating it.
    */
-  static const Duration SHUTDOWN_TIMEOUT = const Duration(seconds: 5);
+  static const Duration SHUTDOWN_TIMEOUT = const Duration(seconds: 60);
 
   /**
    * Connection to the analysis server.
@@ -253,10 +253,10 @@
   }
 
   /**
-   * Whether to run integration tests with the --preview-dart-2 flag.
+   * Whether to run integration tests with the --use-cfe flag.
    */
-  // TODO(devoncarew): Remove this when --preview-dart-2 goes away.
-  bool get usePreviewDart2 => false;
+  // TODO(devoncarew): Remove this when --use-cfe goes away.
+  bool get useCFE => false;
 
   /**
    * Start [server].
@@ -265,13 +265,13 @@
     bool checked: true,
     int diagnosticPort,
     int servicesPort,
-    bool previewDart2: false,
+    bool cfe: false,
   }) {
     return server.start(
         checked: checked,
         diagnosticPort: diagnosticPort,
         servicesPort: servicesPort,
-        previewDart2: previewDart2 || usePreviewDart2);
+        useCFE: cfe || useCFE);
   }
 
   /**
@@ -669,7 +669,7 @@
     bool profileServer: false,
     String sdkPath,
     int servicesPort,
-    bool previewDart2: false,
+    bool useCFE: false,
     bool useAnalysisHighlight2: false,
   }) async {
     if (_process != null) {
@@ -724,8 +724,8 @@
     if (useAnalysisHighlight2) {
       arguments.add('--useAnalysisHighlight2');
     }
-    if (previewDart2) {
-      arguments.add('--preview-dart-2');
+    if (useCFE) {
+      arguments.add('--use-cfe');
     }
     // TODO(devoncarew): We could experiment with instead launching the analysis
     // server in a separate isolate. This would make it easier to debug the
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index 20a5fcd..3a8cfb8 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -47,20 +47,6 @@
 Matcher isResponseSuccess(String id) => new _IsResponseSuccess(id);
 
 /**
- * Returns a [Future] that completes after pumping the event queue [times]
- * times. By default, this should pump the event queue enough times to allow
- * any code to run, as long as it's not waiting on some external event.
- */
-Future pumpEventQueue([int times = 5000]) {
-  if (times == 0) return new Future.value();
-  // We use a delayed future to allow microtask events to finish. The
-  // Future.value or Future() constructors use scheduleMicrotask themselves and
-  // would therefore not wait for microtask callbacks that are scheduled after
-  // invoking this method.
-  return new Future.delayed(Duration.ZERO, () => pumpEventQueue(times - 1));
-}
-
-/**
  * A mock [PackageMapProvider].
  */
 class MockPackageMapProvider implements PubPackageMapProvider {
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 17b1d2f..ef82b02 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
@@ -76,7 +76,6 @@
         }
       }
       fail('Failed to find $expectedUri in $uriList');
-      return null;
     }
 
     void assertImportedLib(String expectedUri) {
diff --git a/pkg/analysis_server/test/src/domain_abstract_test.dart b/pkg/analysis_server/test/src/domain_abstract_test.dart
index 6585efb..dde70ce 100644
--- a/pkg/analysis_server/test/src/domain_abstract_test.dart
+++ b/pkg/analysis_server/test/src/domain_abstract_test.dart
@@ -100,6 +100,5 @@
   @override
   Response handleRequest(Request request) {
     fail('Unexpected invocation of handleRequest');
-    return null;
   }
 }
diff --git a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
index 1b5dd99..ae42433 100644
--- a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
@@ -22,6 +22,15 @@
   });
 }
 
+/// 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 NotificationManagerTest extends ProtocolTestUtilities {
   String testDir;
@@ -355,7 +364,7 @@
 
   @failingTest
   void test_recordOutlines_withSubscription() {
-    fail('The outline handling needs to be re-worked slightly');
+    _fail('The outline handling needs to be re-worked slightly');
     // TODO(brianwilkerson) Figure out outlines. What should we do when merge
     // cannot produce a single outline?
     manager.setSubscriptions({
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index f6ef78c6..e1b9320 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -145,7 +145,6 @@
       }
     }
     fail('Not found $name in $unit');
-    return null;
   }
 
   InstanceCreationExpression _getTopVariableCreation(String name,
diff --git a/pkg/analysis_server/test/src/watch_manager_test.dart b/pkg/analysis_server/test/src/watch_manager_test.dart
index 2fe0471..248c5b0 100644
--- a/pkg/analysis_server/test/src/watch_manager_test.dart
+++ b/pkg/analysis_server/test/src/watch_manager_test.dart
@@ -11,8 +11,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:watcher/watcher.dart';
 
-import '../mocks.dart';
-
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(WatchManagerTest);
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 24a231f..883a143 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -70,6 +70,7 @@
   CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME,
   CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME,
   CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME,
+  CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION,
   CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD,
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 6bccdb7..8b78044 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -131,11 +131,16 @@
   FileContentOverlay fileContentOverlay;
 
   /**
-   * Whether to enable the Dart 2.0 Front End.
+   * Whether to enable the Dart 2.0 preview.
    */
   bool previewDart2 = false;
 
   /**
+   * 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].
    */
@@ -175,7 +180,7 @@
 
     // The folder with `vm_platform_strong.dill`, which has required patches.
     Folder kernelPlatformFolder;
-    if (previewDart2) {
+    if (useCFE) {
       DartSdk sdk = sf.dartSdk;
       if (sdk is FolderBasedDartSdk) {
         var binariesPath = computePlatformBinariesPath(sdk.directory.path);
@@ -194,7 +199,7 @@
         contextRoot,
         sf,
         options,
-        enableKernelDriver: previewDart2,
+        enableKernelDriver: useCFE,
         kernelPlatformFolder: kernelPlatformFolder);
     // temporary plugin support:
     if (onCreateAnalysisDriver != null) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 588c842..958b75a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -19,6 +19,7 @@
 import 'package:analyzer/file_system/file_system.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';
@@ -43,7 +44,6 @@
 import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/api_signature.dart';
 import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/incremental/kernel_driver.dart' show KernelDriver;
 import 'package:meta/meta.dart';
 
 /**
@@ -183,10 +183,10 @@
   final Uint32List _salt = new Uint32List(1 + AnalysisOptions.signatureLength);
 
   /**
-   * If [enableKernelDriver], then the instance of [KernelDriver].
+   * If [enableKernelDriver], then the instance of [FrontEndCompiler].
    * Otherwise `null`.
    */
-  KernelDriver _kernelDriver;
+  FrontEndCompiler _frontEndCompiler;
 
   /**
    * The set of priority files, that should be analyzed sooner.
@@ -1103,7 +1103,7 @@
   void removeFile(String path) {
     _throwIfNotAbsolutePath(path);
     _throwIfChangesAreNotAllowed();
-    _kernelDriverInvalidate(path);
+    _frontEndCompilerInvalidate(path);
     _fileTracker.removeFile(path);
     _priorityResults.clear();
   }
@@ -1112,7 +1112,7 @@
    * Implementation for [changeFile].
    */
   void _changeFile(String path) {
-    _kernelDriverInvalidate(path);
+    _frontEndCompilerInvalidate(path);
     _fileTracker.changeFile(path);
     _priorityResults.clear();
   }
@@ -1191,6 +1191,7 @@
           if (enableKernelDriver) {
             kernelContext = await _createKernelContext(library);
             analyzer = new LibraryAnalyzer(
+                _logger,
                 analysisOptions,
                 declaredVariables,
                 sourceFactory,
@@ -1199,11 +1200,12 @@
                 kernelContext.resynthesizer,
                 library,
                 enableKernelDriver: true,
-                previewDart2: _analysisOptions.useFastaParser,
-                kernelDriver: _kernelDriver);
+                useCFE: _analysisOptions.useFastaParser,
+                frontEndCompiler: _frontEndCompiler);
           } else {
             libraryContext = await _createLibraryContext(library);
             analyzer = new LibraryAnalyzer(
+                _logger,
                 analysisOptions,
                 declaredVariables,
                 sourceFactory,
@@ -1343,18 +1345,18 @@
         declaredVariables,
         _sourceFactory,
         fsState,
-        _kernelDriver);
+        _frontEndCompiler);
   }
 
   /**
-   * Creates a new [KernelDriver] in [_kernelDriver].
+   * Creates a new [FrontEndCompiler] in [_frontEndCompiler].
    *
    * This is used both on initial construction and whenever the configuration
    * changes.
    */
   void _createKernelDriver() {
     if (enableKernelDriver) {
-      _kernelDriver = createKernelDriver(
+      _frontEndCompiler = new FrontEndCompiler(
           _logger,
           _byteStore,
           analysisOptions,
@@ -1395,6 +1397,16 @@
   }
 
   /**
+   * 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].
    */
@@ -1467,16 +1479,6 @@
   }
 
   /**
-   * Invalidate the file with the given [path] in the KernelDriver.
-   */
-  void _kernelDriverInvalidate(String path) {
-    if (_kernelDriver != null) {
-      var uri = _resourceProvider.pathContext.toUri(path);
-      _kernelDriver.invalidate(uri);
-    }
-  }
-
-  /**
    * Return the lint code with the given [errorName], or `null` if there is no
    * lint registered with that name.
    */
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 2d1ae3d..d4f4af8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -95,6 +95,11 @@
   final Uri uri;
 
   /**
+   * The absolute file URI of the file.
+   */
+  final Uri fileUri;
+
+  /**
    * The [Source] of the file with the [uri].
    */
   final Source source;
@@ -137,12 +142,13 @@
    */
   bool hasErrorOrWarning = false;
 
-  FileState._(this._fsState, this.path, this.uri, this.source)
+  FileState._(this._fsState, this.path, this.uri, this.fileUri, this.source)
       : isInExternalSummaries = false;
 
   FileState._external(this._fsState, this.uri)
       : isInExternalSummaries = true,
         path = null,
+        fileUri = null,
         source = null {
     _apiSignature = new Uint8List(16);
   }
@@ -729,7 +735,7 @@
    */
   FileState get unresolvedFile {
     if (_unresolvedFile == null) {
-      _unresolvedFile = new FileState._(this, null, null, null);
+      _unresolvedFile = new FileState._(this, null, null, null, null);
       _unresolvedFile.refresh();
     }
     return _unresolvedFile;
@@ -756,8 +762,9 @@
         return file;
       }
       // Create a new file.
+      Uri fileUri = _resourceProvider.pathContext.toUri(path);
       FileSource uriSource = new FileSource(resource, uri);
-      file = new FileState._(this, path, uri, uriSource);
+      file = new FileState._(this, path, uri, fileUri, uriSource);
       _uriToFile[uri] = file;
       _addFileWithPath(path, file);
       _pathToCanonicalFile[path] = file;
@@ -796,8 +803,9 @@
 
       String path = uriSource.fullName;
       File resource = _resourceProvider.getFile(path);
+      Uri fileUri = _resourceProvider.pathContext.toUri(path);
       FileSource source = new FileSource(resource, uri);
-      file = new FileState._(this, path, uri, source);
+      file = new FileState._(this, path, uri, fileUri, source);
       _uriToFile[uri] = file;
       _addFileWithPath(path, file);
       file.refresh();
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index 00dda37..3668894 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -1,9 +1,26 @@
+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:front_end/src/api_prototype/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: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/builder/library_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_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/source_library_builder.dart';
 import 'package:front_end/src/fasta/source/source_loader.dart';
@@ -12,94 +29,29 @@
 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' as kernel;
-
-class AnalyzerDietListener extends DietListener {
-  final Uri _requestedLibraryFileUri;
-  final List<CollectedResolution> _resolutions;
-
-  AnalyzerDietListener(
-      SourceLibraryBuilder library,
-      ClassHierarchy hierarchy,
-      CoreTypes coreTypes,
-      TypeInferenceEngine typeInferenceEngine,
-      this._requestedLibraryFileUri,
-      this._resolutions)
-      : super(library, hierarchy, coreTypes, typeInferenceEngine);
-
-  StackListener createListener(
-      ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope, TypeInferenceListener listener]) {
-    InstrumentedResolutionStorer storer;
-    if (_isInRequestedLibrary(builder)) {
-      var resolution = new CollectedResolution();
-      _resolutions.add(resolution);
-      storer = new InstrumentedResolutionStorer(
-          resolution.kernelDeclarations,
-          resolution.kernelReferences,
-          resolution.kernelTypes,
-          resolution.declarationOffsets,
-          resolution.referenceOffsets,
-          resolution.typeOffsets);
-    }
-    return super.createListener(
-        builder, memberScope, isInstanceMember, formalParameterScope, storer);
-  }
-
-  /// Return `true` if the given [builder] is in the requested library.
-  bool _isInRequestedLibrary(Builder builder) {
-    return builder.computeLibraryUri() == _requestedLibraryFileUri;
-  }
-}
-
-class AnalyzerLoader<L> extends SourceLoader<L> {
-  final Uri _requestedLibraryFileUri;
-  final List<CollectedResolution> _resolutions;
-
-  AnalyzerLoader(FileSystem fileSystem, TargetImplementation target,
-      this._requestedLibraryFileUri, this._resolutions)
-      : super(fileSystem, false, target);
-
-  @override
-  AnalyzerDietListener createDietListener(LibraryBuilder library) {
-    return new AnalyzerDietListener(library, hierarchy, coreTypes,
-        typeInferenceEngine, _requestedLibraryFileUri, _resolutions);
-  }
-}
-
-class AnalyzerTarget extends KernelTarget {
-  final Uri requestedLibraryFileUri;
-  final List<CollectedResolution> resolutions = [];
-
-  AnalyzerTarget(
-      FileSystem fileSystem,
-      DillTarget dillTarget,
-      UriTranslator uriTranslator,
-      bool strongMode,
-      this.requestedLibraryFileUri)
-      : super(fileSystem, false, dillTarget, uriTranslator);
-
-  @override
-  AnalyzerLoader<kernel.Library> createLoader() {
-    return new AnalyzerLoader<kernel.Library>(
-        fileSystem, this, requestedLibraryFileUri, resolutions);
-  }
-}
+import 'package:kernel/kernel.dart';
+import 'package:kernel/src/incremental_class_hierarchy.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/type_environment.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 {
   /// The list of local declarations stored by body builders while
   /// compiling the library.
-  final List<kernel.TreeNode> kernelDeclarations = [];
+  final List<TreeNode> kernelDeclarations = [];
 
   /// The list of references to local or external stored by body builders
   /// while compiling the library.
-  final List<kernel.Node> kernelReferences = [];
+  final List<Node> kernelReferences = [];
 
   /// The list of types stored by body builders while compiling the library.
-  final List<kernel.DartType> kernelTypes = [];
+  final List<DartType> kernelTypes = [];
 
   /// File offsets corresponding to the declarations in [kernelDeclarations].
   ///
@@ -116,3 +68,448 @@
   /// These are used strictly for validation purposes.
   final List<int> typeOffsets = [];
 }
+
+/// The compilation result for a single file.
+class FileCompilationResult {
+  /// The file system URI of the file.
+  final Uri fileUri;
+
+  /// The list of resolution for each code block, e.g function body.
+  final List<CollectedResolution> resolutions;
+
+  /// The list of all FrontEnd errors in the file.
+  final List<CompilationMessage> errors;
+
+  FileCompilationResult(this.fileUri, this.resolutions, 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 ProcessedOptions _options;
+
+  /// 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 = {};
+
+  /// The [Program] with currently valid libraries. When a file is invalidated,
+  /// we remove the file, its library, and everything affected from [_program].
+  Program _program = new Program();
+
+  /// 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 [_program].
+  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 options = new CompilerOptions()
+      ..target = new _AnalyzerTarget(
+          new TargetFlags(strongMode: analysisOptions.strongMode))
+      ..reportMessages = false
+      ..logger = logger
+      ..fileSystem = new _FileSystemAdaptor(fsState, pathContext)
+      ..byteStore = byteStore
+      ..onError = errorListener.onError;
+    var processedOptions = new ProcessedOptions(options);
+
+    return new FrontEndCompiler._(
+        processedOptions, uriTranslator, errorListener);
+  }
+
+  FrontEndCompiler._(this._options, this.uriTranslator, this._errorListener)
+      : _logger = _options.logger,
+        _fileSystem = _options.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', () async {
+      try {
+        var dillTarget =
+            new DillTarget(_options.ticker, uriTranslator, _options.target);
+
+        // Append all libraries what we still have in the current program.
+        await _logger.runAsync('Load dill libraries', () async {
+          dillTarget.loader.appendLibraries(_program);
+          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 program.
+        _program = await _logger.runAsync('Compile', () async {
+          await kernelTarget.buildOutlines(nameRoot: _program.root);
+          return await kernelTarget.buildProgram() ?? _program;
+        });
+
+        // TODO(scheglov) Only for new libraries?
+        _program.computeCanonicalNames();
+
+        _logger.run('Compute dependencies', _computeDependencies);
+
+        // TODO(scheglov) Can we keep the same instance?
+        var types = new TypeEnvironment(
+            new CoreTypes(_program), new IncrementalClassHierarchy());
+
+        // Add results for new libraries.
+        for (var library in _program.libraries) {
+          if (!_results.containsKey(library.importUri)) {
+            Map<Uri, List<CollectedResolution>> libraryResolutions =
+                kernelTarget.resolutions[library.fileUri];
+
+            var files = <Uri, FileCompilationResult>{};
+
+            void addFileResult(Uri fileUri) {
+              if (libraryResolutions != null) {
+                files[fileUri] = new FileCompilationResult(
+                    fileUri,
+                    libraryResolutions[fileUri] ?? [],
+                    _errorListener.fileUriToErrors[fileUri] ?? []);
+              }
+            }
+
+            addFileResult(library.fileUri);
+            for (var part in library.parts) {
+              addFileResult(part.fileUri);
+            }
+
+            var libraryResult = new LibraryCompilationResult(
+                _program, types, 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.
+      _program.libraries.remove(library);
+      _program.root.removeChild('${library.importUri}');
+      _program.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 [_program].
+  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[part.fileUri] = 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 program.
+    _program.libraries.forEach(processLibrary);
+  }
+
+  Future<T> _runWithFrontEndContext<T>(String msg, Future<T> f()) async {
+    return await CompilerContext.runWithOptions(_options, (context) {
+      context.disableColors();
+      return _logger.runAsync(msg, f);
+    });
+  }
+}
+
+/// The compilation result for a single library.
+class LibraryCompilationResult {
+  /// The full current [Program]. 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 Program program;
+
+  /// The [TypeEnvironment] for the [program].
+  final TypeEnvironment types;
+
+  /// 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.program, this.types, this.uri, this.kernel, this.files);
+}
+
+/// The [DietListener] that record resolution information.
+class _AnalyzerDietListener extends DietListener {
+  final Map<Uri, List<CollectedResolution>> _resolutions;
+
+  _AnalyzerDietListener(
+      SourceLibraryBuilder library,
+      ClassHierarchy hierarchy,
+      CoreTypes coreTypes,
+      TypeInferenceEngine typeInferenceEngine,
+      this._resolutions)
+      : super(library, hierarchy, coreTypes, typeInferenceEngine);
+
+  StackListener createListener(
+      ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
+      [Scope formalParameterScope, TypeInferenceListener listener]) {
+    InstrumentedResolutionStorer storer;
+    var fileResolutions = _resolutions[builder.fileUri];
+    if (fileResolutions == null) {
+      fileResolutions = <CollectedResolution>[];
+      _resolutions[builder.fileUri] = fileResolutions;
+    }
+    var resolution = new CollectedResolution();
+    fileResolutions.add(resolution);
+    storer = new InstrumentedResolutionStorer(
+        resolution.kernelDeclarations,
+        resolution.kernelReferences,
+        resolution.kernelTypes,
+        resolution.declarationOffsets,
+        resolution.referenceOffsets,
+        resolution.typeOffsets);
+    return super.createListener(
+        builder, memberScope, isInstanceMember, formalParameterScope, storer);
+  }
+}
+
+/// The [KernelTarget] that records resolution information.
+class _AnalyzerKernelTarget extends KernelTarget {
+  final Map<Uri, Map<Uri, List<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);
+  }
+}
+
+/// The [SourceLoader] that record resolution information.
+class _AnalyzerSourceLoader<L> extends SourceLoader<L> {
+  final Map<Uri, Map<Uri, List<CollectedResolution>>> _resolutions;
+
+  _AnalyzerSourceLoader(front_end.FileSystem fileSystem,
+      TargetImplementation target, this._resolutions)
+      : super(fileSystem, true, target);
+
+  @override
+  _AnalyzerDietListener createDietListener(LibraryBuilder library) {
+    var libraryResolutions = <Uri, List<CollectedResolution>>{};
+    _resolutions[library.fileUri] = libraryResolutions;
+    return new _AnalyzerDietListener(
+        library, hierarchy, coreTypes, typeInferenceEngine, libraryResolutions);
+  }
+}
+
+/**
+ * [Target] for static analysis, with all features enabled.
+ */
+class _AnalyzerTarget extends NoneTarget {
+  _AnalyzerTarget(TargetFlags flags) : 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 {
+    // TODO(scheglov) Optimize.
+    return UTF8.encode(file.content);
+  }
+
+  @override
+  Future<String> readAsString() async {
+    return file.content;
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart b/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
index be948b9..e0323b2 100644
--- a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
@@ -3,100 +3,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:convert';
 
 import 'package:analyzer/context/declared_variables.dart';
 import 'package:analyzer/dart/element/element.dart' show CompilationUnitElement;
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/kernel_metadata.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/sdk.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/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/file_system.dart';
-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/uri_translator_impl.dart';
-import 'package:front_end/src/incremental/kernel_driver.dart';
 import 'package:kernel/ast.dart' as kernel;
-import 'package:kernel/target/targets.dart';
 import 'package:kernel/text/ast_to_text.dart' as kernel;
-import 'package:package_config/packages.dart';
-import 'package:package_config/src/packages_impl.dart';
-import 'package:path/path.dart' as pathos;
-
-/**
- * Create a new [KernelDriver] for the given configuration.
- */
-KernelDriver createKernelDriver(
-    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);
-    }
-  }
-
-  // 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 KernelErrorListener();
-  var options = new ProcessedOptions(new CompilerOptions()
-    ..target = new _AnalysisTarget(
-        new TargetFlags(strongMode: analysisOptions.strongMode))
-    ..reportMessages = false
-    ..logger = logger
-    ..fileSystem = new _FileSystemAdaptor(fsState, pathContext)
-    ..byteStore = byteStore
-    ..onError = errorListener.onError);
-  return new KernelDriver(options, uriTranslator, errorListener,
-      metadataFactory: new AnalyzerMetadataFactory(),
-      sdkOutlineBytes: sdkOutlineBytes);
-}
 
 /**
  * Support for resynthesizing element model from Kernel.
@@ -156,25 +77,24 @@
       DeclaredVariables declaredVariables,
       SourceFactory sourceFactory,
       FileSystemState fsState,
-      KernelDriver driver) async {
+      FrontEndCompiler compiler) async {
     return logger.runAsync('Create kernel context', () async {
       Uri targetUri = targetLibrary.uri;
-      KernelResult kernelResult = await driver.getKernel(targetUri);
+      LibraryCompilationResult compilationResult =
+          await compiler.compile(targetUri);
 
-      // Remember Kernel libraries required to resynthesize the target.
+      // 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 libraryMap = <String, kernel.Library>{};
       var libraryExistMap = <String, bool>{};
-
-      void addLibrary(kernel.Library library) {
+      for (var library in compilationResult.program.libraries) {
         String uriStr = library.importUri.toString();
         libraryMap[uriStr] = library;
         FileState file = fsState.getFileForUri(library.importUri);
         libraryExistMap[uriStr] = file?.exists ?? false;
       }
 
-      kernelResult.dependencies.forEach(addLibrary);
-      addLibrary(kernelResult.libraryResult.library);
-
       if (DEBUG) {
         print('----------- ${targetLibrary.uriStr}');
         var libraryKernel = libraryMap[targetLibrary.uriStr];
@@ -192,8 +112,8 @@
       analysisContext.contentCache = new _ContentCacheWrapper(fsState);
 
       // Create the resynthesizer bound to the analysis context.
-      var resynthesizer = new KernelResynthesizer(
-          analysisContext, kernelResult.types, libraryMap, libraryExistMap);
+      var resynthesizer = new KernelResynthesizer(analysisContext,
+          compilationResult.types, libraryMap, libraryExistMap);
 
       return new KernelContext._(analysisContext, resynthesizer);
     });
@@ -208,19 +128,6 @@
 }
 
 /**
- * [Target] for static analysis, with all features enabled.
- */
-class _AnalysisTarget extends NoneTarget {
-  _AnalysisTarget(TargetFlags flags) : super(flags);
-
-  @override
-  List<String> get extraRequiredLibraries => const <String>['dart:_internal'];
-
-  @override
-  bool enableNative(Uri uri) => true;
-}
-
-/**
  * [ContentCache] wrapper around [FileContentOverlay].
  */
 class _ContentCacheWrapper implements ContentCache {
@@ -258,45 +165,3 @@
     return fsState.getFileForPath(path);
   }
 }
-
-class _FileSystemAdaptor implements FileSystem {
-  final FileSystemState fsState;
-  final pathos.Context pathContext;
-
-  _FileSystemAdaptor(this.fsState, this.pathContext);
-
-  @override
-  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 ArgumentError(
-          'Only file:// URIs are supported, but $uri is given.');
-    }
-  }
-}
-
-class _FileSystemEntityAdaptor implements 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 {
-    // TODO(scheglov) Optimize.
-    return UTF8.encode(file.content);
-  }
-
-  @override
-  Future<String> readAsString() async {
-    return file.content;
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 8c3fe08..ac98670 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -37,8 +37,8 @@
 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:front_end/src/incremental/kernel_driver.dart';
 import 'package:kernel/kernel.dart' as kernel;
 import 'package:kernel/type_algebra.dart' as kernel;
 
@@ -46,14 +46,15 @@
  * Analyzer of a single library.
  */
 class LibraryAnalyzer {
+  final PerformanceLog _logger;
   final AnalysisOptions _analysisOptions;
   final DeclaredVariables _declaredVariables;
   final SourceFactory _sourceFactory;
   final FileState _library;
 
   final bool _enableKernelDriver;
-  final bool _previewDart2;
-  final KernelDriver _kernelDriver;
+  final bool _useCFE;
+  final FrontEndCompiler _frontEndCompiler;
 
   final bool Function(Uri) _isLibraryUri;
   final AnalysisContextImpl _context;
@@ -73,6 +74,7 @@
   final List<ConstantEvaluationTarget> _constants = [];
 
   LibraryAnalyzer(
+      this._logger,
       this._analysisOptions,
       this._declaredVariables,
       this._sourceFactory,
@@ -81,19 +83,19 @@
       this._resynthesizer,
       this._library,
       {bool enableKernelDriver: false,
-      bool previewDart2: false,
-      KernelDriver kernelDriver})
+      bool useCFE: false,
+      FrontEndCompiler frontEndCompiler})
       : _typeProvider = _context.typeProvider,
         _enableKernelDriver = enableKernelDriver,
-        _previewDart2 = previewDart2,
-        _kernelDriver = kernelDriver;
+        _useCFE = useCFE,
+        _frontEndCompiler = frontEndCompiler;
 
   /**
    * Compute analysis results for all units of the library.
    */
   Future<Map<FileState, UnitAnalysisResult>> analyze() async {
     return PerformanceStatistics.analysis.makeCurrentWhileAsync(() async {
-      if (_previewDart2) {
+      if (_useCFE) {
         return await _analyze2();
       } else {
         return _analyze();
@@ -177,100 +179,93 @@
   }
 
   Future<Map<FileState, UnitAnalysisResult>> _analyze2() async {
-    Map<FileState, CompilationUnit> units = {};
+    return await _logger.runAsync('Analyze', () async {
+      Map<FileState, CompilationUnit> units = {};
 
-    // Parse all files.
-    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);
-
-      // TODO(scheglov) Improve.
-      AnalyzerTarget analyzerTarget;
-      final kernelResult = await _kernelDriver.compileLibrary(
-          (fileSystem, bool includeComments, dillTarget, uriTranslator,
-                  {metadataCollector}) =>
-              analyzerTarget ??= new AnalyzerTarget(fileSystem, dillTarget,
-                  uriTranslator, _analysisOptions.strongMode, _library.uri),
-          _library.uri);
-
-      var resolutions = new _ResolutionProvider(analyzerTarget.resolutions);
-      units.forEach((file, unit) {
-        _resolveFile2(file, unit, resolutions);
-        _computePendingMissingRequiredParameters(file, unit);
-
-        // Invalid part URIs can result in an element with a null source
-        if (unit.element.source != null) {
-          final reporter = new FastaErrorReporter(_getErrorReporter(file));
-          final libraryKernelResult = kernelResult.results
-              .expand((r) => r.libraryResults)
-              .where((r) => r.library.importUri == unit.element.source.uri)
-              .firstWhere((_) => true, orElse: () => null);
-          libraryKernelResult?.errors?.forEach(
-              (kernelError) => reporter.reportCompilationMessage(kernelError));
+      // Parse all files.
+      _logger.run('Parse units', () {
+        units[_library] = _parse(_library);
+        for (FileState part in _library.partedFiles) {
+          units[part] = _parse(part);
         }
       });
 
-      _computeConstants();
+      // Resolve URIs in directives to corresponding sources.
+      units.forEach((file, unit) {
+        _resolveUriBasedDirectives(file, unit);
+      });
 
-      // TODO(scheglov) Restore.
-//      PerformanceStatistics.errors.makeCurrentWhile(() {
-//        units.forEach((file, unit) {
-//          _computeVerifyErrors(file, unit);
-//        });
-//      });
+      try {
+        _libraryElement = _resynthesizer
+            .getElement(new ElementLocationImpl.con3([_library.uriStr]));
 
-      if (_analysisOptions.hint) {
-        PerformanceStatistics.hints.makeCurrentWhile(() {
+        _resolveDirectives(units);
+
+        var libraryResult = await _logger.runAsync('Compile library', () {
+          return _frontEndCompiler.compile(_library.uri);
+        });
+
+        _logger.run('Apply resolution', () {
           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);
+            var resolutions = libraryResult.files[file.fileUri].resolutions;
+            var resolutionProvider = new _ResolutionProvider(resolutions);
+
+            _resolveFile2(file, unit, resolutionProvider);
+            _computePendingMissingRequiredParameters(file, unit);
+
+            // Invalid part URIs can result in an element with a null source
+            if (unit.element.source != null) {
+              var reporter = new FastaErrorReporter(_getErrorReporter(file));
+              var fileResult = libraryResult.files[file.fileUri];
+              fileResult?.errors?.forEach(reporter.reportCompilationMessage);
             }
           });
-          units.forEach((file, unit) {
-            _computeHints(file, unit);
-          });
         });
+
+        _computeConstants();
+
+        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();
       }
 
-      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 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;
     });
-    return results;
   }
 
   /**
@@ -513,9 +508,8 @@
    * Return a new parsed unresolved [CompilationUnit].
    */
   CompilationUnit _parse(FileState file) {
-    AnalysisErrorListener errorListener = _previewDart2
-        ? AnalysisErrorListener.NULL_LISTENER
-        : _getErrorListener(file);
+    AnalysisErrorListener errorListener =
+        _useCFE ? AnalysisErrorListener.NULL_LISTENER : _getErrorListener(file);
     String content = file.content;
     CompilationUnit unit = file.parse(errorListener);
 
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index e55219b..56e0f25 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -326,6 +326,23 @@
           "Try choosing a different name for the type parameter.");
 
   /**
+   * 16.33 Identifier Reference: It is a compile-time error if a built-in
+   * identifier is used as the declared name of a prefix, class, type parameter
+   * or type alias.
+   *
+   * Parameters:
+   * 0: the built-in identifier that is being used
+   *
+   * TODO(scheglov) It would be nice to get more specific errors.
+   * https://github.com/dart-lang/sdk/issues/31811
+   */
+  static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_IN_DECLARATION =
+      const CompileTimeErrorCode(
+          'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+          "The built-in identifier '{0}' can't be used as a name.",
+          "Try choosing a different name.");
+
+  /**
    * 13.9 Switch: It is a compile-time error if the class <i>C</i> implements
    * the operator <i>==</i>.
    *
@@ -949,7 +966,10 @@
    * Parameters:
    * 0: the name of the type that cannot be extended
    *
-   * See [IMPLEMENTS_DISALLOWED_CLASS].
+   * See [IMPLEMENTS_DISALLOWED_CLASS] and [MIXIN_OF_DISALLOWED_CLASS].
+   *
+   * TODO(scheglov) We might want to restore specific code with FrontEnd.
+   * https://github.com/dart-lang/sdk/issues/31821
    */
   static const CompileTimeErrorCode EXTENDS_DISALLOWED_CLASS =
       const CompileTimeErrorCode(
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 41ef5e3..ee7fdb3 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -2708,16 +2708,6 @@
     errorReporter.reportMessage(message, offset, length);
   }
 
-  @override
-  void addWarning(Message message, int charOffset, int length) {
-    library.addWarning(message, charOffset, uri);
-  }
-
-  @override
-  void addNit(Message message, int charOffset) {
-    library.addNit(message, charOffset, uri);
-  }
-
   /// Return `true` if [token] is either `null` or is the symbol or keyword
   /// [value].
   bool optionalOrNull(String value, Token token) {
diff --git a/pkg/analyzer/lib/src/fasta/mock_element.dart b/pkg/analyzer/lib/src/fasta/mock_element.dart
index 6adb4bf..38c4cbe 100644
--- a/pkg/analyzer/lib/src/fasta/mock_element.dart
+++ b/pkg/analyzer/lib/src/fasta/mock_element.dart
@@ -103,7 +103,8 @@
   computeNode() => unsupported("computeNode", charOffset, fileUri);
 
   @override
-  getAncestor<E>(predicate) => unsupported("getAncestor", charOffset, fileUri);
+  getAncestor<E extends Element>(predicate) =>
+      unsupported("getAncestor", charOffset, fileUri);
 
   @override
   String getExtendedDisplayName(String shortName) {
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index dd0090f..3780770 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -30,6 +30,9 @@
   final List<kernel.DartType> _types;
   int _typeIndex = 0;
 
+  /// The current label scope. Each [Block] adds a new one.
+  _LabelScope _labelScope = new _LabelScope(null);
+
   /// Indicates whether we are applying resolution to an annotation.
   ///
   /// When this field is `true`, [PropertyInducingElement]s should be replaced
@@ -69,6 +72,52 @@
   }
 
   @override
+  void visitAnnotation(Annotation node) {
+    SimpleIdentifier constructorName = node.constructorName;
+
+    // Peek forward and check if the next element is a PrefixElement.
+    SimpleIdentifier topEntity;
+    if (_referencedElements[_referencedElementIndex] is PrefixElement) {
+      PrefixedIdentifier prefixedIdentifier = node.name;
+
+      SimpleIdentifier prefix = prefixedIdentifier.prefix;
+      PrefixElement prefixElement = _getReferenceFor(prefix);
+      _getTypeFor(prefix); // prefix type
+      prefix.staticElement = prefixElement;
+
+      topEntity = prefixedIdentifier.identifier;
+    } else {
+      topEntity = node.name;
+    }
+
+    Element element = _getReferenceFor(topEntity);
+    DartType type = _getTypeFor(topEntity);
+    node.element = element;
+
+    if (element is ConstructorElement) {
+      topEntity.staticElement = element.enclosingElement;
+
+      if (constructorName != null) {
+        constructorName.staticElement = element;
+        constructorName.staticType = element.type;
+      }
+
+      ArgumentList argumentList = node.arguments;
+      if (argumentList != null) {
+        _applyResolutionToArguments(argumentList);
+        _resolveNamedArguments(argumentList, element.parameters);
+      }
+    } else {
+      topEntity.staticElement = element;
+      topEntity.staticType = type;
+      if (constructorName != null) {
+        constructorName.accept(this);
+        node.element = constructorName.staticElement;
+      }
+    }
+  }
+
+  @override
   void visitAsExpression(AsExpression node) {
     node.expression.accept(this);
     applyToTypeAnnotation(
@@ -112,6 +161,22 @@
   }
 
   @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;
@@ -164,6 +229,15 @@
   }
 
   @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 = _getTypeFor(node);
@@ -346,52 +420,6 @@
   }
 
   @override
-  void visitAnnotation(Annotation node) {
-    SimpleIdentifier constructorName = node.constructorName;
-
-    // Peek forward and check if the next element is a PrefixElement.
-    SimpleIdentifier topEntity;
-    if (_referencedElements[_referencedElementIndex] is PrefixElement) {
-      PrefixedIdentifier prefixedIdentifier = node.name;
-
-      SimpleIdentifier prefix = prefixedIdentifier.prefix;
-      PrefixElement prefixElement = _getReferenceFor(prefix);
-      _getTypeFor(prefix); // prefix type
-      prefix.staticElement = prefixElement;
-
-      topEntity = prefixedIdentifier.identifier;
-    } else {
-      topEntity = node.name;
-    }
-
-    Element element = _getReferenceFor(topEntity);
-    DartType type = _getTypeFor(topEntity);
-    node.element = element;
-
-    if (element is ConstructorElement) {
-      topEntity.staticElement = element.enclosingElement;
-
-      if (constructorName != null) {
-        constructorName.staticElement = element;
-        constructorName.staticType = element.type;
-      }
-
-      ArgumentList argumentList = node.arguments;
-      if (argumentList != null) {
-        _applyResolutionToArguments(argumentList);
-        _resolveNamedArguments(argumentList, element.parameters);
-      }
-    } else {
-      topEntity.staticElement = element;
-      topEntity.staticType = type;
-      if (constructorName != null) {
-        constructorName.accept(this);
-        node.element = constructorName.staticElement;
-      }
-    }
-  }
-
-  @override
   void visitIsExpression(IsExpression node) {
     node.expression.accept(this);
     applyToTypeAnnotation(
@@ -400,6 +428,15 @@
   }
 
   @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.elements.accept(this);
     DartType type = _getTypeFor(node.constKeyword ?? node.leftBracket);
@@ -440,8 +477,13 @@
 
     node.staticInvokeType = invokeType;
     node.staticType = resultType;
-    node.methodName.staticElement = invokeElement;
-    node.methodName.staticType = invokeType;
+
+    if (node.methodName.name == 'call' && invokeElement == null) {
+      // Don't resolve explicit call() invocation of function types.
+    } else {
+      node.methodName.staticElement = invokeElement;
+      node.methodName.staticType = invokeType;
+    }
 
     if (invokeType is FunctionType) {
       if (node.typeArguments != null &&
@@ -1029,3 +1071,26 @@
     return super._getTypeFor(entity);
   }
 }
+
+/// 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
index 4e7d136e..9215502 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -455,7 +455,8 @@
     _replaceType(invokeType, resultOffset);
 
     if (!isImplicitCall) {
-      throw new UnimplementedError(); // TODO(scheglov): handle this case
+      _replaceReference(const NullNode('explicit-call'));
+      _replaceType(const NullType());
     }
     super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
@@ -495,8 +496,8 @@
 
   @override
   void propertyGetExitCall(Expression expression, DartType inferredType) {
-    throw new UnimplementedError(); // TODO(scheglov): handle this case
-    // super.propertyGetExitCall(expression, inferredType);
+    _recordReference(const NullNode('explicit-call'), expression.fileOffset);
+    _recordType(const NullType(), expression.fileOffset);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 6dee157..a28b6ca 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -590,6 +590,7 @@
         _applyType(element.bound, node.bound);
       }
     }
+    _setGenericFunctionType(node.bound, element.bound);
     super.visitTypeParameter(node);
     _resolveMetadata(node, node.metadata, element);
     return null;
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 2fa521d..abf9bae 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -25,6 +25,7 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/task/strong/checker.dart';
 
 /**
  * An object used by instances of [ResolverVisitor] to resolve references within
@@ -166,7 +167,7 @@
       Expression leftHandSide = node.leftHandSide;
       if (leftHandSide != null) {
         String methodName = operatorType.lexeme;
-        DartType staticType = _getStaticType(leftHandSide);
+        DartType staticType = _getStaticType(leftHandSide, read: true);
         MethodElement staticMethod =
             _lookUpMethod(leftHandSide, staticType, methodName);
         node.staticElement = staticMethod;
@@ -979,7 +980,7 @@
         operatorType == TokenType.MINUS_MINUS) {
       Expression operand = node.operand;
       String methodName = _getPrefixOperator(node);
-      DartType staticType = _getStaticType(operand);
+      DartType staticType = _getStaticType(operand, read: true);
       MethodElement staticMethod =
           _lookUpMethod(operand, staticType, methodName);
       node.staticElement = staticMethod;
@@ -1418,17 +1419,6 @@
   }
 
   /**
-   * Return `true` if the given [element] is or inherits from a class marked
-   * with `@proxy`.
-   * 
-   * See [ClassElement.isOrInheritsProxy].
-   */
-  bool _hasProxy(Element element) =>
-      !_resolver.strongMode &&
-      element is ClassElement &&
-      element.isOrInheritsProxy;
-
-  /**
    * 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.
@@ -1555,8 +1545,8 @@
    * Return the static type of the given [expression] that is to be used for
    * type analysis.
    */
-  DartType _getStaticType(Expression expression) {
-    DartType staticType = _getStaticTypeOrFunctionType(expression);
+  DartType _getStaticType(Expression expression, {bool read: false}) {
+    DartType staticType = _getStaticTypeOrFunctionType(expression, read: read);
     if (staticType is FunctionType) {
       //
       // All function types are subtypes of 'Function', which is itself a
@@ -1567,14 +1557,27 @@
     return staticType;
   }
 
-  DartType _getStaticTypeOrFunctionType(Expression expression) {
+  DartType _getStaticTypeOrFunctionType(Expression expression,
+      {bool read: false}) {
     if (expression is NullLiteral) {
       return _resolver.typeProvider.nullType;
     }
-    return _resolveTypeParameter(expression.staticType);
+    DartType type = read ? getReadType(expression) : expression.staticType;
+    return _resolveTypeParameter(type);
   }
 
   /**
+   * Return `true` if the given [element] is or inherits from a class marked
+   * with `@proxy`.
+   *
+   * See [ClassElement.isOrInheritsProxy].
+   */
+  bool _hasProxy(Element element) =>
+      !_resolver.strongMode &&
+      element is ClassElement &&
+      element.isOrInheritsProxy;
+
+  /**
    * Check for a generic method & apply type arguments if any were passed.
    */
   DartType _instantiateGenericMethod(
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 6bfaf4d..82b8ad0 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -51,6 +51,8 @@
 
   static final _testDir = '${path.separator}test${path.separator}';
 
+  static final _testingDir = '${path.separator}testing${path.separator}';
+
   /**
    * The class containing the AST nodes being visited, or `null` if we are not in the scope of
    * a class.
@@ -879,10 +881,19 @@
     bool inCurrentLibrary(Element element) =>
         element.library == _currentLibrary;
 
+    bool inExportDirective(SimpleIdentifier identifier) =>
+        identifier.parent is Combinator &&
+        identifier.parent.parent is ExportDirective;
+
     bool inTestDirectory(LibraryElement library) =>
-        library.definingCompilationUnit.source.fullName.contains(_testDir);
+        library.definingCompilationUnit.source.fullName.contains(_testDir) ||
+        library.definingCompilationUnit.source.fullName.contains(_testingDir);
 
     Element element = identifier.bestElement;
+    if (!isProtected(element) && !isVisibleForTesting(element)) {
+      return;
+    }
+
     if (isProtected(element)) {
       if (inCurrentLibrary(element) || inCommentReference(identifier)) {
         // The access is valid; even if [element] is also marked
@@ -894,18 +905,29 @@
           identifier.getAncestor((AstNode node) => node is ClassDeclaration);
       if (_hasTypeOrSuperType(accessingClass?.element, definingClass.type)) {
         return;
-      } else {
-        _errorReporter.reportErrorForNode(
-            HintCode.INVALID_USE_OF_PROTECTED_MEMBER,
-            identifier,
-            [identifier.name.toString(), definingClass.name]);
       }
     }
-    if (isVisibleForTesting(element) &&
-        !inCurrentLibrary(element) &&
-        !inTestDirectory(_currentLibrary) &&
-        !inCommentReference(identifier)) {
-      Element definingClass = element.enclosingElement;
+    if (isVisibleForTesting(element)) {
+      if (inCurrentLibrary(element) ||
+          inTestDirectory(_currentLibrary) ||
+          inExportDirective(identifier) ||
+          inCommentReference(identifier)) {
+        // The access is valid; even if [element] is also marked
+        // `protected`, the "visibilities" are unioned.
+        return;
+      }
+    }
+
+    // At this point, [identifier] was not cleared as protected access, nor
+    // cleared as access for testing. Report the appropriate violation(s).
+    Element definingClass = element.enclosingElement;
+    if (isProtected(element)) {
+      _errorReporter.reportErrorForNode(
+          HintCode.INVALID_USE_OF_PROTECTED_MEMBER,
+          identifier,
+          [identifier.name.toString(), definingClass.name]);
+    }
+    if (isVisibleForTesting(element)) {
       _errorReporter.reportErrorForNode(
           HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER,
           identifier,
@@ -4188,7 +4210,7 @@
    * already has a context type. This recorded type will be the least upper
    * bound of all types added with [addReturnOrYieldType].
    */
-  void popReturnContext(BlockFunctionBody node) {
+  void popReturnContext(FunctionBody node) {
     if (_returnStack.isNotEmpty && _inferredReturn.isNotEmpty) {
       DartType context = _returnStack.removeLast() ?? DynamicTypeImpl.instance;
       DartType inferred = _inferredReturn.removeLast();
@@ -4204,7 +4226,7 @@
   /**
    * Push a block function body's return type onto the return stack.
    */
-  void pushReturnContext(BlockFunctionBody node) {
+  void pushReturnContext(FunctionBody node) {
     _returnStack.add(getContext(node));
     _inferredReturn.add(_typeProvider.nullType);
   }
@@ -4769,6 +4791,12 @@
   FunctionBody _currentFunctionBody;
 
   /**
+   * The type of the expression of the immediately enclosing [SwitchStatement],
+   * or `null` if not in a [SwitchStatement].
+   */
+  DartType _enclosingSwitchStatementExpressionType;
+
+  /**
    * Are we running in strong mode or not.
    */
   bool strongMode;
@@ -5217,6 +5245,8 @@
     Expression leftOperand = node.leftOperand;
     Expression rightOperand = node.rightOperand;
     if (operatorType == TokenType.AMPERSAND_AMPERSAND) {
+      InferenceContext.setType(leftOperand, typeProvider.boolType);
+      InferenceContext.setType(rightOperand, typeProvider.boolType);
       leftOperand?.accept(this);
       if (rightOperand != null) {
         _overrideManager.enterScope();
@@ -5240,6 +5270,8 @@
         }
       }
     } else if (operatorType == TokenType.BAR_BAR) {
+      InferenceContext.setType(leftOperand, typeProvider.boolType);
+      InferenceContext.setType(rightOperand, typeProvider.boolType);
       leftOperand?.accept(this);
       if (rightOperand != null) {
         _overrideManager.enterScope();
@@ -5537,6 +5569,7 @@
   Object visitDoStatement(DoStatement node) {
     _overrideManager.enterScope();
     try {
+      InferenceContext.setType(node.condition, typeProvider.boolType);
       super.visitDoStatement(node);
     } finally {
       _overrideManager.exitScope();
@@ -5590,9 +5623,19 @@
     _overrideManager.enterScope();
     try {
       InferenceContext.setTypeFromNode(node.expression, node);
+      inferenceContext.pushReturnContext(node);
       super.visitExpressionFunctionBody(node);
+
+      DartType type = node.expression.staticType;
+      if (_enclosingFunction.isAsynchronous) {
+        type = type.flattenFutures(typeSystem);
+      }
+      if (type != null) {
+        inferenceContext.addReturnOrYieldType(type);
+      }
     } finally {
       _overrideManager.exitScope();
+      inferenceContext.popReturnContext(node);
     }
     return null;
   }
@@ -5624,25 +5667,40 @@
 
   @override
   void visitForEachStatementInScope(ForEachStatement node) {
+    Expression iterable = node.iterable;
+    DeclaredIdentifier loopVariable = node.loopVariable;
+    SimpleIdentifier identifier = node.identifier;
+
+    identifier?.accept(this);
+
+    DartType valueType;
+    if (loopVariable != null) {
+      TypeAnnotation typeAnnotation = loopVariable.type;
+      valueType = typeAnnotation?.type ?? typeProvider.dynamicType;
+    }
+    if (identifier != null) {
+      Element element = identifier.staticElement;
+      if (element is VariableElement) {
+        valueType = element.type;
+      } else if (element is PropertyAccessorElement) {
+        if (element.parameters.isNotEmpty) {
+          valueType = element.parameters[0].type;
+        }
+      }
+    }
+    if (valueType != null) {
+      InterfaceType targetType = (node.awaitKeyword == null)
+          ? typeProvider.iterableType
+          : typeProvider.streamType;
+      InferenceContext.setType(iterable, targetType.instantiate([valueType]));
+    }
+
     //
     // We visit the iterator before the loop variable because the loop variable
     // cannot be in scope while visiting the iterator.
     //
-    Expression iterable = node.iterable;
-    DeclaredIdentifier loopVariable = node.loopVariable;
-    SimpleIdentifier identifier = node.identifier;
-    if (loopVariable?.type?.type != null) {
-      InterfaceType targetType = (node.awaitKeyword == null)
-          ? typeProvider.iterableType
-          : typeProvider.streamType;
-      InferenceContext.setType(
-          iterable,
-          targetType
-              .instantiate([resolutionMap.typeForTypeName(loopVariable.type)]));
-    }
     iterable?.accept(this);
     loopVariable?.accept(this);
-    identifier?.accept(this);
     Statement body = node.body;
     if (body != null) {
       _overrideManager.enterScope();
@@ -5694,6 +5752,7 @@
   void visitForStatementInScope(ForStatement node) {
     node.variables?.accept(this);
     node.initialization?.accept(this);
+    InferenceContext.setType(node.condition, typeProvider.boolType);
     node.condition?.accept(this);
     _overrideManager.enterScope();
     try {
@@ -5810,6 +5869,7 @@
   @override
   Object visitIfStatement(IfStatement node) {
     Expression condition = node.condition;
+    InferenceContext.setType(condition, typeProvider.boolType);
     condition?.accept(this);
     Map<VariableElement, DartType> thenOverrides =
         const <VariableElement, DartType>{};
@@ -6074,6 +6134,8 @@
   Object visitSwitchCase(SwitchCase node) {
     _overrideManager.enterScope();
     try {
+      InferenceContext.setType(
+          node.expression, _enclosingSwitchStatementExpressionType);
       super.visitSwitchCase(node);
     } finally {
       _overrideManager.exitScope();
@@ -6093,6 +6155,19 @@
   }
 
   @override
+  Object visitSwitchStatementInScope(SwitchStatement node) {
+    var previousExpressionType = _enclosingSwitchStatementExpressionType;
+    try {
+      node.expression?.accept(this);
+      _enclosingSwitchStatementExpressionType = node.expression.staticType;
+      node.members.accept(this);
+    } finally {
+      _enclosingSwitchStatementExpressionType = previousExpressionType;
+    }
+    return null;
+  }
+
+  @override
   Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
     _overrideManager.enterScope();
     try {
@@ -6147,6 +6222,7 @@
     try {
       _implicitLabelScope = _implicitLabelScope.nest(node);
       Expression condition = node.condition;
+      InferenceContext.setType(condition, typeProvider.boolType);
       condition?.accept(this);
       Statement body = node.body;
       if (body != null) {
@@ -7543,7 +7619,7 @@
               new LabelScope(labelScope, labelName.name, member, labelElement);
         }
       }
-      super.visitSwitchStatement(node);
+      visitSwitchStatementInScope(node);
     } finally {
       labelScope = outerScope;
       _implicitLabelScope = outerImplicitScope;
@@ -7551,6 +7627,10 @@
     return null;
   }
 
+  void visitSwitchStatementInScope(SwitchStatement node) {
+    super.visitSwitchStatement(node);
+  }
+
   @override
   Object visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 8216594..11ed85d 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -18,7 +18,8 @@
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:analyzer/src/task/strong/checker.dart' show getDefiniteType;
+import 'package:analyzer/src/task/strong/checker.dart'
+    show getDefiniteType, getReadType;
 
 /**
  * Instances of the class `StaticTypeAnalyzer` perform two type-related tasks. First, they
@@ -128,6 +129,9 @@
         // inferred a type in some fashion.
         if (p.hasImplicitType && (p.type == null || p.type.isDynamic)) {
           inferredType = ts.upperBoundForType(inferredType);
+          if (inferredType.isDartCoreNull) {
+            inferredType = _typeProvider.objectType;
+          }
           if (!inferredType.isDynamic) {
             p.type = inferredType;
             inferred = true;
@@ -314,7 +318,8 @@
     } else if (operator == TokenType.QUESTION_QUESTION_EQ) {
       // The static type of a compound assignment using ??= is the least upper
       // bound of the static types of the LHS and RHS.
-      _analyzeLeastUpperBound(node, node.leftHandSide, node.rightHandSide);
+      _analyzeLeastUpperBound(node, node.leftHandSide, node.rightHandSide,
+          read: true);
       return null;
     } else if (operator == TokenType.AMPERSAND_AMPERSAND_EQ ||
         operator == TokenType.BAR_BAR_EQ) {
@@ -323,7 +328,7 @@
       ExecutableElement staticMethodElement = node.staticElement;
       DartType staticType = _computeStaticReturnType(staticMethodElement);
       staticType = _typeSystem.refineBinaryExpressionType(
-          node.leftHandSide.staticType,
+          _getStaticType(node.leftHandSide, read: true),
           operator,
           node.rightHandSide.staticType,
           staticType);
@@ -1062,11 +1067,11 @@
   @override
   Object visitPostfixExpression(PostfixExpression node) {
     Expression operand = node.operand;
-    DartType staticType = _getStaticType(operand);
+    DartType staticType = _getStaticType(operand, read: true);
     TokenType operator = node.operator.type;
     if (operator == TokenType.MINUS_MINUS || operator == TokenType.PLUS_PLUS) {
       DartType intType = _typeProvider.intType;
-      if (identical(_getStaticType(node.operand), intType)) {
+      if (identical(staticType, intType)) {
         staticType = intType;
       }
     }
@@ -1171,7 +1176,7 @@
       if (operator == TokenType.MINUS_MINUS ||
           operator == TokenType.PLUS_PLUS) {
         DartType intType = _typeProvider.intType;
-        if (identical(_getStaticType(node.operand), intType)) {
+        if (identical(_getStaticType(node.operand, read: true), intType)) {
           staticType = intType;
         }
       }
@@ -1444,9 +1449,10 @@
    * of the static (propagated) types of subexpressions [expr1] and [expr2].
    */
   void _analyzeLeastUpperBound(
-      Expression node, Expression expr1, Expression expr2) {
-    DartType staticType1 = _getDefiniteType(expr1);
-    DartType staticType2 = _getDefiniteType(expr2);
+      Expression node, Expression expr1, Expression expr2,
+      {bool read: false}) {
+    DartType staticType1 = _getDefiniteType(expr1, read: read);
+    DartType staticType2 = _getDefiniteType(expr2, read: read);
     if (staticType1 == null) {
       // TODO(brianwilkerson) Determine whether this can still happen.
       staticType1 = _dynamicType;
@@ -1658,8 +1664,8 @@
    * See [getDefiniteType] for more information. Without strong mode, this is
    * equivalent to [_getStaticType].
    */
-  DartType _getDefiniteType(Expression expr) =>
-      getDefiniteType(expr, _typeSystem, _typeProvider);
+  DartType _getDefiniteType(Expression expr, {bool read: false}) =>
+      getDefiniteType(expr, _typeSystem, _typeProvider, read: read);
 
   /**
    * If the given element name can be mapped to the name of a class defined within the given
@@ -1793,8 +1799,13 @@
   /**
    * Return the static type of the given [expression].
    */
-  DartType _getStaticType(Expression expression) {
-    DartType type = expression.staticType;
+  DartType _getStaticType(Expression expression, {bool read: false}) {
+    DartType type;
+    if (read) {
+      type = getReadType(expression);
+    } else {
+      type = expression.staticType;
+    }
     if (type == null) {
       // TODO(brianwilkerson) Determine the conditions for which the static type
       // is null.
@@ -2012,36 +2023,27 @@
    * (in strong mode) a local function declaration.
    */
   void _inferLocalFunctionReturnType(FunctionExpression node) {
-    bool recordInference = false;
     ExecutableElementImpl functionElement =
         node.element as ExecutableElementImpl;
 
     FunctionBody body = node.body;
-    DartType computedType;
-    if (body is ExpressionFunctionBody) {
-      computedType = _getStaticType(body.expression);
-    } else {
-      computedType = _dynamicType;
-    }
 
-    // If we had a better type from the function body, use it.
-    //
-    // This helps in a few cases:
-    // * ExpressionFunctionBody, when the surrounding context had a better type.
-    // * BlockFunctionBody, if we inferred a type from yield/return.
-    // * we also normalize bottom to dynamic here.
-    if (_strongMode &&
-        (computedType.isDartCoreNull || computedType.isDynamic)) {
-      DartType contextType = InferenceContext.getContext(body);
-      computedType = contextType ?? _dynamicType;
-      recordInference = !computedType.isDynamic;
+    DartType computedType;
+    if (_strongMode) {
+      computedType = InferenceContext.getContext(body) ?? _dynamicType;
+    } else {
+      if (body is ExpressionFunctionBody) {
+        computedType = _getStaticType(body.expression);
+      } else {
+        computedType = _dynamicType;
+      }
     }
 
     computedType = _computeReturnTypeOfFunction(body, computedType);
     functionElement.returnType = computedType;
     _recordPropagatedTypeOfFunction(functionElement, node.body);
     _recordStaticType(node, functionElement.type);
-    if (recordInference) {
+    if (_strongMode) {
       _resolver.inferenceContext.recordInference(node, functionElement.type);
     }
   }
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
index 435f026..5586c26 100644
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart
@@ -925,16 +925,27 @@
     unitElement.librarySource = librarySource;
 
     if (fileUri != null) {
-      // Compute the URI relative to the library directory.
-      // E.g. when the library directory URI is `sdk/lib/core`, and the unit
-      // URI is `sdk/lib/core/bool.dart`, the result is `bool.dart`.
-      var relativeUri = pathos.url.relative(fileUri, from: libraryDirectoryUri);
-      // Compute the absolute URI.
-      // When the absolute library URI is `dart:core`, and the relative
-      // URI is `bool.dart`, the result is `dart:core/bool.dart`.
-      Uri absoluteUri =
-          resolveRelativeUri(librarySource.uri, Uri.parse(relativeUri));
-      String absoluteUriStr = absoluteUri.toString();
+      String absoluteUriStr;
+      if (fileUri.startsWith('file://')) {
+        // Compute the URI relative to the library directory.
+        // E.g. when the library directory URI is `sdk/lib/core`, and the unit
+        // URI is `sdk/lib/core/bool.dart`, the result is `bool.dart`.
+        var relativeUri =
+            pathos.url.relative(fileUri, from: libraryDirectoryUri);
+        // Compute the absolute URI.
+        // When the absolute library URI is `dart:core`, and the relative
+        // URI is `bool.dart`, the result is `dart:core/bool.dart`.
+        Uri absoluteUri =
+            resolveRelativeUri(librarySource.uri, Uri.parse(relativeUri));
+        absoluteUriStr = absoluteUri.toString();
+      } else {
+        // File URIs must have the "file" scheme.
+        // But for invalid URIs, which cannot be even parsed, FrontEnd returns
+        // URIs with the "org-dartlang-malformed-uri" scheme, and does not
+        // resolve them to file URIs.
+        // We don't have anything better than to use these URIs as is.
+        absoluteUriStr = fileUri;
+      }
       unitElement.source = resynthesizer._getSource(absoluteUriStr);
     } else {
       unitElement.source = librarySource;
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 5839720..7cd78e7 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -229,7 +229,10 @@
       // TODO(paulberry): do I need to store type arguments?
       return result;
     }
-    if (element is GenericFunctionTypeElement) {
+    if (element is GenericFunctionTypeElementForLink) {
+      // TODO(mfairhurst) update the typeParameterContext to be the current
+      // element. See test_constExpr_makeTypedList_functionType. This causes
+      // serious breakages elsewhere.
       result.entityKind = EntityRefKind.genericFunctionType;
       result.syntheticReturnType = _createLinkedType(
           type.returnType, compilationUnit, typeParameterContext);
@@ -237,6 +240,8 @@
           .map((ParameterElement param) => _serializeSyntheticParam(
               param, compilationUnit, typeParameterContext))
           .toList();
+      _storeTypeArguments(
+          type.typeArguments, result, compilationUnit, typeParameterContext);
       return result;
     }
     // TODO(paulberry): implement other cases.
@@ -1982,10 +1987,13 @@
    * better return type).
    */
   DartType _computeDefaultReturnType() {
-    if (_unlinkedExecutable.kind == UnlinkedExecutableKind.setter &&
+    var kind = _unlinkedExecutable.kind;
+    var isMethod = kind == UnlinkedExecutableKind.functionOrMethod;
+    var isSetter = kind == UnlinkedExecutableKind.setter;
+    if ((isSetter || isMethod && _unlinkedExecutable.name == '[]=') &&
         (library as LibraryElementForLink)._linker.strongMode) {
-      // In strong mode, setters without an explicit return type are
-      // considered to return `void`.
+      // In strong mode, setters and `[]=` operators without an explicit
+      // return type are considered to return `void`.
       return VoidTypeImpl.instance;
     } else {
       return DynamicTypeImpl.instance;
@@ -2528,7 +2536,7 @@
     DartType itemType = numItems == 0
         ? DynamicTypeImpl.instance
         : _popList(numItems).reduce(_leastUpperBound);
-    itemType = _dynamicIfNull(itemType);
+    itemType ??= DynamicTypeImpl.instance;
     stack.add(typeProvider.listType.instantiate(<DartType>[itemType]));
   }
 
@@ -2546,8 +2554,8 @@
             valueType == null ? type : _leastUpperBound(valueType, type);
       }
     }
-    keyType = _dynamicIfNull(keyType);
-    valueType = _dynamicIfNull(valueType);
+    keyType ??= DynamicTypeImpl.instance;
+    valueType ??= DynamicTypeImpl.instance;
     stack.add(typeProvider.mapType.instantiate(<DartType>[keyType, valueType]));
   }
 
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index dc091cb..f487341 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -74,7 +74,8 @@
   @override
   EntityRefBuilder serializeConstructorRef(DartType type, Identifier typeName,
       TypeArgumentList typeArguments, SimpleIdentifier name) {
-    EntityRefBuilder typeBuilder = serializeType(type, typeName, typeArguments);
+    EntityRefBuilder typeBuilder =
+        serializeTypeName(type, typeName, typeArguments);
     if (name == null) {
       return typeBuilder;
     } else {
@@ -143,10 +144,14 @@
   }
 
   @override
-  EntityRefBuilder serializeType(
+  EntityRefBuilder serializeTypeName(
       DartType type, Identifier name, TypeArgumentList arguments) {
-    return visitor.serializeType(name, arguments);
+    return visitor.serializeTypeName(name, arguments);
   }
+
+  @override
+  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType node) =>
+      visitor.serializeGenericFunctionType(node);
 }
 
 /**
@@ -449,16 +454,15 @@
     b.typeParameters =
         serializeTypeParameters(typeParameters, typeParameterScope);
     if (superclass != null) {
-      b.supertype = serializeTypeName(superclass);
+      b.supertype = serializeType(superclass);
     } else {
       b.hasNoSupertype = isCoreLibrary && name == 'Object';
     }
     if (withClause != null) {
-      b.mixins = withClause.mixinTypes.map(serializeTypeName).toList();
+      b.mixins = withClause.mixinTypes.map(serializeType).toList();
     }
     if (implementsClause != null) {
-      b.interfaces =
-          implementsClause.interfaces.map(serializeTypeName).toList();
+      b.interfaces = implementsClause.interfaces.map(serializeType).toList();
     }
     if (members != null) {
       scopes.add(buildClassMemberScope(name, members));
@@ -624,7 +628,7 @@
     if (!isTopLevel) {
       b.isStatic = isDeclaredStatic;
     }
-    b.returnType = serializeTypeName(returnType);
+    b.returnType = serializeType(returnType);
     bool isSemanticallyStatic = isTopLevel || isDeclaredStatic;
     if (formalParameters != null) {
       bool oldMayInheritCovariance = _parametersMayInheritCovariance;
@@ -735,7 +739,7 @@
    */
   void serializeFunctionTypedParameterDetails(UnlinkedParamBuilder b,
       TypeAnnotation returnType, FormalParameterList parameters) {
-    EntityRefBuilder serializedReturnType = serializeTypeName(returnType);
+    EntityRefBuilder serializedReturnType = serializeType(returnType);
     if (serializedReturnType != null) {
       b.type = serializedReturnType;
     }
@@ -759,7 +763,7 @@
         serializeTypeParameters(node.typeParameters, typeParameterScope);
     b.syntheticReturnType = node.returnType == null
         ? serializeDynamic()
-        : serializeTypeName(node.returnType);
+        : serializeType(node.returnType);
     b.syntheticParams = node.parameters.parameters
         .map((FormalParameter p) => p.accept(this) as UnlinkedParamBuilder)
         .toList();
@@ -866,7 +870,7 @@
    * a [EntityRef].  Note that this method does the right thing if the
    * name doesn't refer to an entity other than a type (e.g. a class member).
    */
-  EntityRefBuilder serializeType(
+  EntityRefBuilder serializeTypeName(
       Identifier identifier, TypeArgumentList typeArguments) {
     if (identifier == null) {
       return null;
@@ -911,8 +915,7 @@
             'Unexpected identifier type: ${identifier.runtimeType}');
       }
       if (typeArguments != null) {
-        b.typeArguments =
-            typeArguments.arguments.map(serializeTypeName).toList();
+        b.typeArguments = typeArguments.arguments.map(serializeType).toList();
       }
       return b;
     }
@@ -924,9 +927,9 @@
    * a [EntityRef].  Note that this method does the right thing if the
    * name doesn't refer to an entity other than a type (e.g. a class member).
    */
-  EntityRefBuilder serializeTypeName(TypeAnnotation node) {
+  EntityRefBuilder serializeType(TypeAnnotation node) {
     if (node is TypeName) {
-      return serializeType(node?.name, node?.typeArguments);
+      return serializeTypeName(node?.name, node?.typeArguments);
     } else if (node is GenericFunctionType) {
       return serializeGenericFunctionType(node);
     } else if (node != null) {
@@ -974,7 +977,7 @@
       b.isStatic = isDeclaredStatic;
       b.name = variable.name.name;
       b.nameOffset = variable.name.offset;
-      b.type = serializeTypeName(variables.type);
+      b.type = serializeType(variables.type);
       b.documentationComment = serializeDocumentation(documentationComment);
       b.annotations = serializeAnnotations(annotations);
       b.codeRange = serializeCodeRange(variables.parent);
@@ -1158,7 +1161,7 @@
       if (node.parameters != null) {
         serializeFunctionTypedParameterDetails(b, node.type, node.parameters);
       } else {
-        b.type = serializeTypeName(node.type);
+        b.type = serializeType(node.type);
       }
     }
     return b;
@@ -1222,7 +1225,7 @@
     b.nameOffset = node.name.offset;
     b.typeParameters =
         serializeTypeParameters(node.typeParameters, typeParameterScope);
-    EntityRefBuilder serializedReturnType = serializeTypeName(node.returnType);
+    EntityRefBuilder serializedReturnType = serializeType(node.returnType);
     if (serializedReturnType != null) {
       b.returnType = serializedReturnType;
     }
@@ -1345,7 +1348,7 @@
   @override
   UnlinkedParamBuilder visitSimpleFormalParameter(SimpleFormalParameter node) {
     UnlinkedParamBuilder b = serializeParameter(node);
-    b.type = serializeTypeName(node.type);
+    b.type = serializeType(node.type);
     return b;
   }
 
@@ -1361,7 +1364,7 @@
     b.name = node.name.name;
     b.nameOffset = node.name.offset;
     if (node.bound != null) {
-      b.bound = serializeTypeName(node.bound);
+      b.bound = serializeType(node.bound);
     }
     b.annotations = serializeAnnotations(node.metadata);
     b.codeRange = serializeCodeRange(node);
diff --git a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
index d64b3ec..ad72193 100644
--- a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
@@ -198,15 +198,25 @@
    * given [name] and [arguments].  The parameter [type] might be `null` if the
    * type is not resolved.
    */
-  EntityRefBuilder serializeType(
+  EntityRefBuilder serializeTypeName(
       DartType type, Identifier name, TypeArgumentList arguments);
 
   /**
+   * Return [EntityRefBuilder] that corresponds to the [type], which is defined
+   * using generic function type syntax. These may appear as the type arguments
+   * of a const list, etc.
+   */
+  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType type);
+
+  /**
    * Return [EntityRefBuilder] that corresponds to the given [type].
    */
-  EntityRefBuilder serializeTypeName(TypeAnnotation type) {
+  EntityRefBuilder serializeType(TypeAnnotation type) {
     if (type is TypeName) {
-      return serializeType(type?.type, type?.name, type?.typeArguments);
+      return serializeTypeName(type?.type, type?.name, type?.typeArguments);
+    }
+    if (type is GenericFunctionType) {
+      return serializeGenericFunctionType(type);
     }
     throw new ArgumentError(
         'Cannot serialize an instance of ${type.runtimeType}');
@@ -313,7 +323,13 @@
    */
   void _serialize(Expression expr) {
     if (expr is IntegerLiteral) {
-      _pushInt(expr.value);
+      int value = expr.value ?? 0;
+      if (value >= 0) {
+        _pushInt(value);
+      } else {
+        _pushInt(-value);
+        operations.add(UnlinkedExprOperation.negate);
+      }
     } else if (expr is DoubleLiteral) {
       operations.add(UnlinkedExprOperation.pushDouble);
       doubles.add(expr.value);
@@ -401,12 +417,12 @@
     } else if (expr is AsExpression) {
       isValidConst = false;
       _serialize(expr.expression);
-      references.add(serializeTypeName(expr.type));
+      references.add(serializeType(expr.type));
       operations.add(UnlinkedExprOperation.typeCast);
     } else if (expr is IsExpression) {
       isValidConst = false;
       _serialize(expr.expression);
-      references.add(serializeTypeName(expr.type));
+      references.add(serializeType(expr.type));
       operations.add(UnlinkedExprOperation.typeCheck);
     } else if (expr is SuperExpression) {
       operations.add(UnlinkedExprOperation.pushSuper);
@@ -548,7 +564,7 @@
     }
     if (expr.typeArguments != null &&
         expr.typeArguments.arguments.length == 1) {
-      references.add(serializeTypeName(expr.typeArguments.arguments[0]));
+      references.add(serializeType(expr.typeArguments.arguments[0]));
       operations.add(UnlinkedExprOperation.makeTypedList);
     } else {
       operations.add(UnlinkedExprOperation.makeUntypedList);
@@ -567,8 +583,8 @@
     }
     if (expr.typeArguments != null &&
         expr.typeArguments.arguments.length == 2) {
-      references.add(serializeTypeName(expr.typeArguments.arguments[0]));
-      references.add(serializeTypeName(expr.typeArguments.arguments[1]));
+      references.add(serializeType(expr.typeArguments.arguments[0]));
+      references.add(serializeType(expr.typeArguments.arguments[1]));
       operations.add(UnlinkedExprOperation.makeTypedMap);
     } else {
       operations.add(UnlinkedExprOperation.makeUntypedMap);
@@ -692,7 +708,7 @@
     } else {
       ints.add(typeArguments.arguments.length);
       for (TypeAnnotation type in typeArguments.arguments) {
-        references.add(serializeTypeName(type));
+        references.add(serializeType(type));
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index 8af0cf7..395dd83 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -7,6 +7,7 @@
 library analyzer.src.task.strong.checker;
 
 import 'dart:collection';
+
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
@@ -37,8 +38,15 @@
 /// because we know it evaluates to a specific, concrete function, and we can
 /// treat "dynamic" as top for that case, which is more permissive.
 DartType getDefiniteType(
-    Expression expression, TypeSystem typeSystem, TypeProvider typeProvider) {
-  DartType type = expression.staticType ?? DynamicTypeImpl.instance;
+    Expression expression, TypeSystem typeSystem, TypeProvider typeProvider,
+    {bool read: false}) {
+  DartType type;
+  if (read) {
+    type = getReadType(expression);
+  } else {
+    type = expression.staticType;
+  }
+  type ??= DynamicTypeImpl.instance;
   if (typeSystem is StrongTypeSystemImpl &&
       type is FunctionType &&
       hasStrictArrow(expression)) {
@@ -48,6 +56,35 @@
   return type;
 }
 
+DartType getReadType(Expression expression) {
+  if (expression is IndexExpression) {
+    return expression.auxiliaryElements?.staticElement?.returnType;
+  }
+  {
+    Element setter;
+    if (expression is PrefixedIdentifier) {
+      setter = expression.staticElement;
+    } else if (expression is PropertyAccess) {
+      setter = expression.propertyName.staticElement;
+    } else if (expression is SimpleIdentifier) {
+      setter = expression.staticElement;
+    }
+    if (setter is PropertyAccessorElement && setter.isSetter) {
+      var getter = setter.variable.getter;
+      if (getter != null) {
+        return getter.returnType;
+      }
+    }
+  }
+  if (expression is SimpleIdentifier) {
+    var aux = expression.auxiliaryElements;
+    if (aux != null) {
+      return aux.staticElement?.returnType;
+    }
+  }
+  return expression.staticType;
+}
+
 bool hasStrictArrow(Expression expression) {
   var element = _getKnownElement(expression);
   return element is FunctionElement || element is MethodElement;
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index eec4814..45150a5 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -363,7 +363,7 @@
     //
     // Infer the return type.
     //
-    if (element.hasImplicitReturnType) {
+    if (element.hasImplicitReturnType && element.displayName != '[]=') {
       (element as ExecutableElementImpl).returnType =
           _computeReturnType(overriddenTypes.map((t) => t.returnType));
       if (element is PropertyAccessorElement) {
diff --git a/pkg/analyzer/test/cancelable_future_test.dart b/pkg/analyzer/test/cancelable_future_test.dart
index a578c8b..2f63cac 100644
--- a/pkg/analyzer/test/cancelable_future_test.dart
+++ b/pkg/analyzer/test/cancelable_future_test.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/src/cancelable_future.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
-import 'package:watcher/src/utils.dart';
 
 void main() {
   defineReflectiveSuite(() {
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
index 4f7a9c2..1a4f23f 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
@@ -19,7 +19,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @failingTest
   @override
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index 0d6afa0..9db22ac 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -22,7 +22,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -33,13 +33,6 @@
 
   @override
   @failingTest
-  test_ambiguousExport() async {
-    // Expected 1 errors of type CompileTimeErrorCode.AMBIGUOUS_EXPORT, found 0
-    await super.test_ambiguousExport();
-  }
-
-  @override
-  @failingTest
   test_annotationWithNotClass() async {
     // Bad state: No reference information for property at 117
     await super.test_annotationWithNotClass();
@@ -75,44 +68,16 @@
 
   @override
   @failingTest
-  test_async_used_as_identifier_in_statement_label() async {
-    // Bad state: Expected element reference for analyzer offset 14; got one for kernel offset 21
-    await super.test_async_used_as_identifier_in_statement_label();
-  }
-
-  @override
-  @failingTest
-  test_async_used_as_identifier_in_switch_label() async {
-    // Bad state: No reference information for async at 31
-    await super.test_async_used_as_identifier_in_switch_label();
-  }
-
-  @override
-  @failingTest
-  // This test fails because the kernel driver element model produces a
-  // different element model result than the regular parser produces. Once these
-  // tests enable the faster parser (and not just the kernel driver), this
-  // should be looked at again.
   test_bug_23176() async {
+    // This test fails because the kernel driver element model produces a
+    // different element model result than the regular parser produces. Once these
+    // tests enable the faster parser (and not just the kernel driver), this
+    // should be looked at again.
     return super.test_bug_23176();
   }
 
   @override
   @failingTest
-  test_builtInIdentifierAsMixinName_classTypeAlias() async {
-    // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, found 0
-    await super.test_builtInIdentifierAsMixinName_classTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_builtInIdentifierAsPrefixName() async {
-    // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME, found 0
-    await super.test_builtInIdentifierAsPrefixName();
-  }
-
-  @override
-  @failingTest
   test_builtInIdentifierAsType_formalParameter_field() async {
     // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, found 0;
     //          0 errors of type ParserErrorCode.EXTRANEOUS_MODIFIER, found 1 (23)
@@ -136,27 +101,6 @@
 
   @override
   @failingTest
-  test_builtInIdentifierAsTypedefName_functionTypeAlias() async {
-    // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, found 0
-    await super.test_builtInIdentifierAsTypedefName_functionTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_builtInIdentifierAsTypeName() async {
-    // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, found 0
-    await super.test_builtInIdentifierAsTypeName();
-  }
-
-  @override
-  @failingTest
-  test_builtInIdentifierAsTypeParameterName() async {
-    // Expected 1 errors of type CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME, found 0
-    await super.test_builtInIdentifierAsTypeParameterName();
-  }
-
-  @override
-  @failingTest
   test_caseExpressionTypeImplementsEquals() async {
     // Expected 1 errors of type CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, found 0
     await super.test_caseExpressionTypeImplementsEquals();
@@ -892,29 +836,7 @@
 
   @override
   @failingTest
-  test_extendsDisallowedClass_class_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0;
-    //          1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
-    await super.test_extendsDisallowedClass_class_bool();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_class_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_class_double();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_class_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0;
-    //          1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
-    await super.test_extendsDisallowedClass_class_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_extendsDisallowedClass_class_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0;
     //          1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
@@ -923,42 +845,7 @@
 
   @override
   @failingTest
-  test_extendsDisallowedClass_class_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_class_num();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_class_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0;
-    //          1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
-    await super.test_extendsDisallowedClass_class_String();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_classTypeAlias_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_classTypeAlias_bool();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_classTypeAlias_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_classTypeAlias_double();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_classTypeAlias_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_classTypeAlias_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_extendsDisallowedClass_classTypeAlias_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
     await super.test_extendsDisallowedClass_classTypeAlias_Null();
@@ -966,20 +853,6 @@
 
   @override
   @failingTest
-  test_extendsDisallowedClass_classTypeAlias_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_classTypeAlias_num();
-  }
-
-  @override
-  @failingTest
-  test_extendsDisallowedClass_classTypeAlias_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0
-    await super.test_extendsDisallowedClass_classTypeAlias_String();
-  }
-
-  @override
-  @failingTest
   test_extendsEnum() async {
     // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_ENUM, found 0
     await super.test_extendsEnum();
@@ -1206,27 +1079,7 @@
 
   @override
   @failingTest
-  test_implementsDisallowedClass_class_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_bool();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_class_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_double();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_class_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_implementsDisallowedClass_class_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
     await super.test_implementsDisallowedClass_class_Null();
@@ -1234,48 +1087,7 @@
 
   @override
   @failingTest
-  test_implementsDisallowedClass_class_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_num();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_class_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_String();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_class_String_num() async {
-    // Expected 2 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_class_String_num();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_classTypeAlias_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_bool();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_classTypeAlias_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_double();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_classTypeAlias_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_implementsDisallowedClass_classTypeAlias_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
     await super.test_implementsDisallowedClass_classTypeAlias_Null();
@@ -1283,27 +1095,6 @@
 
   @override
   @failingTest
-  test_implementsDisallowedClass_classTypeAlias_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_num();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_classTypeAlias_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_String();
-  }
-
-  @override
-  @failingTest
-  test_implementsDisallowedClass_classTypeAlias_String_num() async {
-    // Expected 2 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
-    await super.test_implementsDisallowedClass_classTypeAlias_String_num();
-  }
-
-  @override
-  @failingTest
   test_implementsDynamic() async {
     // AnalysisException: Element mismatch in /test.dart at /test.dart
     await super.test_implementsDynamic();
@@ -1760,6 +1551,27 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_invalidUri_export() async {
+    return super.test_invalidUri_export();
+  }
+
+  @override
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_invalidUri_import() async {
+    return super.test_invalidUri_import();
+  }
+
+  @override
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_invalidUri_part() async {
+    return super.test_invalidUri_part();
+  }
+
+  @override
+  @failingTest
   test_isInConstInstanceCreation_restored() async {
     // Expected 1 errors of type CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, found 0
     await super.test_isInConstInstanceCreation_restored();
@@ -1923,27 +1735,7 @@
 
   @override
   @failingTest
-  test_mixinOfDisallowedClass_class_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_class_bool();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_class_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_class_double();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_class_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_class_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_mixinOfDisallowedClass_class_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
     await super.test_mixinOfDisallowedClass_class_Null();
@@ -1951,41 +1743,7 @@
 
   @override
   @failingTest
-  test_mixinOfDisallowedClass_class_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_class_num();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_class_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_class_String();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_classTypeAlias_bool() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_classTypeAlias_bool();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_classTypeAlias_double() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_classTypeAlias_double();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_classTypeAlias_int() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_classTypeAlias_int();
-  }
-
-  @override
-  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_mixinOfDisallowedClass_classTypeAlias_Null() async {
     // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
     await super.test_mixinOfDisallowedClass_classTypeAlias_Null();
@@ -1993,20 +1751,6 @@
 
   @override
   @failingTest
-  test_mixinOfDisallowedClass_classTypeAlias_num() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_classTypeAlias_num();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfDisallowedClass_classTypeAlias_String() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
-    await super.test_mixinOfDisallowedClass_classTypeAlias_String();
-  }
-
-  @override
-  @failingTest
   test_mixinOfEnum() async {
     // AnalysisException: Element mismatch in /test.dart at /test.dart
     await super.test_mixinOfEnum();
@@ -2187,20 +1931,6 @@
 
   @override
   @failingTest
-  test_noDefaultSuperConstructorImplicit_superHasParameters() async {
-    // Expected 1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
-    await super.test_noDefaultSuperConstructorImplicit_superHasParameters();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorImplicit_superOnlyNamed() async {
-    // Expected 1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
-    await super.test_noDefaultSuperConstructorImplicit_superOnlyNamed();
-  }
-
-  @override
-  @failingTest
   test_nonConstantAnnotationConstructor_named() async {
     // Bad state: No reference information for A at 30
     await super.test_nonConstantAnnotationConstructor_named();
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 7dc9b41..de88150 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -85,8 +85,12 @@
 class C = A with String, num;''');
     await computeAnalysisResult(source);
     assertErrors(source, [
-      CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
-      CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
     ]);
     verify([source]);
   }
@@ -547,8 +551,11 @@
 class B {}
 class as = A with B;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
+          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
+    ]);
     verify([source]);
   }
 
@@ -556,7 +563,9 @@
     Source source = addSource("import 'dart:async' as abstract;");
     await computeAnalysisResult(source);
     assertErrors(source, [
-      CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME,
+      useCFE
+          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
+          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME,
       HintCode.UNUSED_IMPORT
     ]);
     verify([source]);
@@ -595,24 +604,33 @@
   test_builtInIdentifierAsTypedefName_functionTypeAlias() async {
     Source source = addSource("typedef bool as();");
     await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
+          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
+    ]);
     verify([source]);
   }
 
   test_builtInIdentifierAsTypeName() async {
     Source source = addSource("class as {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
+          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME
+    ]);
     verify([source]);
   }
 
   test_builtInIdentifierAsTypeParameterName() async {
     Source source = addSource("class A<as> {}");
     await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
+          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME
+    ]);
     verify([source]);
   }
 
@@ -2072,7 +2090,14 @@
 class M {}
 class C = bool with M;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2090,7 +2115,14 @@
 class M {}
 class C = int with M;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2117,7 +2149,14 @@
 class M {}
 class C = String with M;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2528,42 +2567,66 @@
   test_implementsDisallowedClass_class_bool() async {
     Source source = addSource("class A implements bool {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_double() async {
     Source source = addSource("class A implements double {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_int() async {
     Source source = addSource("class A implements int {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_Null() async {
     Source source = addSource("class A implements Null {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_num() async {
     Source source = addSource("class A implements num {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_String() async {
     Source source = addSource("class A implements String {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2571,8 +2634,12 @@
     Source source = addSource("class A implements String, num {}");
     await computeAnalysisResult(source);
     assertErrors(source, [
-      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
-      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
     ]);
     verify([source]);
   }
@@ -2583,7 +2650,11 @@
 class M {}
 class C = A with M implements bool;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2593,7 +2664,11 @@
 class M {}
 class C = A with M implements double;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2603,7 +2678,11 @@
 class M {}
 class C = A with M implements int;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2613,7 +2692,11 @@
 class M {}
 class C = A with M implements Null;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2623,7 +2706,11 @@
 class M {}
 class C = A with M implements num;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2633,7 +2720,11 @@
 class M {}
 class C = A with M implements String;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -2644,8 +2735,12 @@
 class C = A with M implements String, num;''');
     await computeAnalysisResult(source);
     assertErrors(source, [
-      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
-      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
     ]);
     verify([source]);
   }
@@ -3873,42 +3968,66 @@
   test_mixinOfDisallowedClass_class_bool() async {
     Source source = addSource("class A extends Object with bool {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : 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, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : 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, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : 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, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : 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, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : 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, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3917,7 +4036,11 @@
 class A {}
 class C = A with bool;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3926,7 +4049,11 @@
 class A {}
 class C = A with double;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3935,7 +4062,11 @@
 class A {}
 class C = A with int;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3944,7 +4075,11 @@
 class A {}
 class C = A with Null;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3953,7 +4088,11 @@
 class A {}
 class C = A with num;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3962,7 +4101,11 @@
 class A {}
 class C = A with String;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [
+      useCFE
+          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
+          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -5833,6 +5976,17 @@
     verify([source]);
   }
 
+  test_referencedBeforeDeclaration_hideInBlock_comment() async {
+    Source source = addSource(r'''
+main() {
+  /// [v] is a variable.
+  var v = 2;
+}
+print(x) {}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
   test_referencedBeforeDeclaration_hideInBlock_function() async {
     Source source = addSource(r'''
 var v = 1;
@@ -5911,17 +6065,6 @@
     assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
   }
 
-  test_referencedBeforeDeclaration_hideInBlock_comment() async {
-    Source source = addSource(r'''
-main() {
-  /// [v] is a variable.
-  var v = 2;
-}
-print(x) {}''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-  }
-
   test_rethrowOutsideCatch() async {
     Source source = addSource(r'''
 f() {
diff --git a/pkg/analyzer/test/generated/declaration_resolver_test.dart b/pkg/analyzer/test/generated/declaration_resolver_test.dart
index 0b74b24..b2f5e2d 100644
--- a/pkg/analyzer/test/generated/declaration_resolver_test.dart
+++ b/pkg/analyzer/test/generated/declaration_resolver_test.dart
@@ -353,7 +353,6 @@
       node = node.parent;
     }
     fail('Node not found');
-    return null;
   }
 }
 
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index 37e48cc..b9454b3 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -36,6 +36,15 @@
   });
 }
 
+/// 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 ElementResolverCodeTest extends ResolverTestCase {
   test_annotation_class_namedConstructor() async {
@@ -317,7 +326,7 @@
   ElementResolver _resolver;
 
   void fail_visitExportDirective_combinators() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     // Need to set up the exported library so that the identifier can be
     // resolved.
     ExportDirective directive = AstTestFactory.exportDirective2(null, [
@@ -328,12 +337,12 @@
   }
 
   void fail_visitFunctionExpressionInvocation() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
   void fail_visitImportDirective_combinators_noPrefix() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     // Need to set up the imported library so that the identifier can be
     // resolved.
     ImportDirective directive = AstTestFactory.importDirective3(null, null, [
@@ -344,7 +353,7 @@
   }
 
   void fail_visitImportDirective_combinators_prefix() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     // Need to set up the imported library so that the identifiers can be
     // resolved.
     String prefixName = "p";
@@ -361,7 +370,7 @@
   }
 
   void fail_visitRedirectingConstructorInvocation() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index d3944f7..3ec9e0b 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -250,13 +250,11 @@
   @override
   AnalysisCache get analysisCache {
     fail("Unexpected invocation of analysisCache");
-    return null;
   }
 
   @override
   AnalysisOptions get analysisOptions {
     fail("Unexpected invocation of getAnalysisOptions");
-    return null;
   }
 
   @override
@@ -272,7 +270,6 @@
   @override
   CacheConsistencyValidator get cacheConsistencyValidator {
     fail("Unexpected invocation of cacheConsistencyValidator");
-    return null;
   }
 
   @override
@@ -283,26 +280,22 @@
   @override
   DeclaredVariables get declaredVariables {
     fail("Unexpected invocation of getDeclaredVariables");
-    return null;
   }
 
   @deprecated
   @override
   EmbedderYamlLocator get embedderYamlLocator {
     fail("Unexpected invocation of get embedderYamlLocator");
-    return null;
   }
 
   @override
   List<AnalysisTarget> get explicitTargets {
     fail("Unexpected invocation of visitCacheItems");
-    return null;
   }
 
   @override
   ResolverProvider get fileResolverProvider {
     fail("Unexpected invocation of fileResolverProvider");
-    return null;
   }
 
   @override
@@ -313,18 +306,15 @@
   @override
   List<Source> get htmlSources {
     fail("Unexpected invocation of getHtmlSources");
-    return null;
   }
 
   @override
   Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents {
     fail("Unexpected invocation of analyzedSources");
-    return null;
   }
 
   bool get isActive {
     fail("Unexpected invocation of isActive");
-    return false;
   }
 
   void set isActive(bool isActive) {
@@ -334,31 +324,26 @@
   @override
   bool get isDisposed {
     fail("Unexpected invocation of isDisposed");
-    return false;
   }
 
   @override
   List<Source> get launchableClientLibrarySources {
     fail("Unexpected invocation of getLaunchableClientLibrarySources");
-    return null;
   }
 
   @override
   List<Source> get launchableServerLibrarySources {
     fail("Unexpected invocation of getLaunchableServerLibrarySources");
-    return null;
   }
 
   @override
   List<Source> get librarySources {
     fail("Unexpected invocation of getLibrarySources");
-    return null;
   }
 
   @override
   String get name {
     fail("Unexpected invocation of name");
-    return null;
   }
 
   @override
@@ -369,31 +354,26 @@
   @override
   Stream<SourcesChangedEvent> get onSourcesChanged {
     fail("Unexpected invocation of onSourcesChanged");
-    return null;
   }
 
   @override
   List<Source> get prioritySources {
     fail("Unexpected invocation of getPrioritySources");
-    return null;
   }
 
   @override
   List<AnalysisTarget> get priorityTargets {
     fail("Unexpected invocation of visitCacheItems");
-    return null;
   }
 
   @override
   CachePartition get privateAnalysisCachePartition {
     fail("Unexpected invocation of privateAnalysisCachePartition");
-    return null;
   }
 
   @override
   SourceFactory get sourceFactory {
     fail("Unexpected invocation of getSourceFactory");
-    return null;
   }
 
   @override
@@ -404,13 +384,11 @@
   @override
   List<Source> get sources {
     fail("Unexpected invocation of sources");
-    return null;
   }
 
   @override
   TypeProvider get typeProvider {
     fail("Unexpected invocation of getTypeProvider");
-    return null;
   }
 
   @override
@@ -421,19 +399,16 @@
   @override
   TypeSystem get typeSystem {
     fail("Unexpected invocation of getTypeSystem");
-    return null;
   }
 
   @override
   List<WorkManager> get workManagers {
     fail("Unexpected invocation of workManagers");
-    return null;
   }
 
   @override
   bool aboutToComputeResult(CacheEntry entry, ResultDescriptor result) {
     fail("Unexpected invocation of aboutToComputeResult");
-    return false;
   }
 
   @override
@@ -449,62 +424,52 @@
   @override
   void applyChanges(ChangeSet changeSet) {
     fail("Unexpected invocation of applyChanges");
-    return null;
   }
 
   @override
   String computeDocumentationComment(Element element) {
     fail("Unexpected invocation of computeDocumentationComment");
-    return null;
   }
 
   @override
   List<AnalysisError> computeErrors(Source source) {
     fail("Unexpected invocation of computeErrors");
-    return null;
   }
 
   @override
   List<Source> computeExportedLibraries(Source source) {
     fail("Unexpected invocation of computeExportedLibraries");
-    return null;
   }
 
   @override
   List<Source> computeImportedLibraries(Source source) {
     fail("Unexpected invocation of computeImportedLibraries");
-    return null;
   }
 
   @override
   SourceKind computeKindOf(Source source) {
     fail("Unexpected invocation of computeKindOf");
-    return null;
   }
 
   @override
   LibraryElement computeLibraryElement(Source source) {
     fail("Unexpected invocation of computeLibraryElement");
-    return null;
   }
 
   @override
   LineInfo computeLineInfo(Source source) {
     fail("Unexpected invocation of computeLineInfo");
-    return null;
   }
 
   @override
   CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
       Source source, Source librarySource) {
     fail("Unexpected invocation of getResolvedCompilationUnitFuture");
-    return null;
   }
 
   @override
   V computeResult<V>(AnalysisTarget target, ResultDescriptor<V> result) {
     fail("Unexpected invocation of computeResult");
-    return null;
   }
 
   @override
@@ -515,150 +480,126 @@
   @override
   List<CompilationUnit> ensureResolvedDartUnits(Source source) {
     fail("Unexpected invocation of ensureResolvedDartUnits");
-    return null;
   }
 
   @override
   bool exists(Source source) {
     fail("Unexpected invocation of exists");
-    return false;
   }
 
   @override
   CacheEntry getCacheEntry(AnalysisTarget target) {
     fail("Unexpected invocation of visitCacheItems");
-    return null;
   }
 
   @override
   CompilationUnitElement getCompilationUnitElement(
       Source unitSource, Source librarySource) {
     fail("Unexpected invocation of getCompilationUnitElement");
-    return null;
   }
 
   @deprecated
   @override
   V getConfigurationData<V>(ResultDescriptor<V> key) {
     fail("Unexpected invocation of getConfigurationData");
-    return null;
   }
 
   @override
   TimestampedData<String> getContents(Source source) {
     fail("Unexpected invocation of getContents");
-    return null;
   }
 
   @override
   InternalAnalysisContext getContextFor(Source source) {
     fail("Unexpected invocation of getContextFor");
-    return null;
   }
 
   @override
   Element getElement(ElementLocation location) {
     fail("Unexpected invocation of getElement");
-    return null;
   }
 
   @override
   AnalysisErrorInfo getErrors(Source source) {
     fail("Unexpected invocation of getErrors");
-    return null;
   }
 
   @override
   List<Source> getHtmlFilesReferencing(Source source) {
     fail("Unexpected invocation of getHtmlFilesReferencing");
-    return null;
   }
 
   @override
   SourceKind getKindOf(Source source) {
     fail("Unexpected invocation of getKindOf");
-    return null;
   }
 
   @override
   List<Source> getLibrariesContaining(Source source) {
     fail("Unexpected invocation of getLibrariesContaining");
-    return null;
   }
 
   @override
   List<Source> getLibrariesDependingOn(Source librarySource) {
     fail("Unexpected invocation of getLibrariesDependingOn");
-    return null;
   }
 
   @override
   List<Source> getLibrariesReferencedFromHtml(Source htmlSource) {
     fail("Unexpected invocation of getLibrariesReferencedFromHtml");
-    return null;
   }
 
   @override
   LibraryElement getLibraryElement(Source source) {
     fail("Unexpected invocation of getLibraryElement");
-    return null;
   }
 
   @override
   LineInfo getLineInfo(Source source) {
     fail("Unexpected invocation of getLineInfo");
-    return null;
   }
 
   @override
   int getModificationStamp(Source source) {
     fail("Unexpected invocation of getModificationStamp");
-    return 0;
   }
 
   @override
   ChangeNoticeImpl getNotice(Source source) {
     fail("Unexpected invocation of getNotice");
-    return null;
   }
 
   @override
   Namespace getPublicNamespace(LibraryElement library) {
     fail("Unexpected invocation of getPublicNamespace");
-    return null;
   }
 
   @override
   CompilationUnit getResolvedCompilationUnit(
       Source unitSource, LibraryElement library) {
     fail("Unexpected invocation of getResolvedCompilationUnit");
-    return null;
   }
 
   @override
   CompilationUnit getResolvedCompilationUnit2(
       Source unitSource, Source librarySource) {
     fail("Unexpected invocation of getResolvedCompilationUnit");
-    return null;
   }
 
   @override
   V getResult<V>(AnalysisTarget target, ResultDescriptor<V> result) {
     fail("Unexpected invocation of getResult");
-    return null;
   }
 
   @override
   List<Source> getSourcesWithFullName(String path) {
     fail("Unexpected invocation of getSourcesWithFullName");
-    return null;
   }
 
   @override
   bool handleContentsChanged(
       Source source, String originalContents, String newContents, bool notify) {
     fail("Unexpected invocation of handleContentsChanged");
-    return false;
   }
 
   @override
@@ -669,44 +610,37 @@
   @override
   bool isClientLibrary(Source librarySource) {
     fail("Unexpected invocation of isClientLibrary");
-    return false;
   }
 
   @override
   bool isServerLibrary(Source librarySource) {
     fail("Unexpected invocation of isServerLibrary");
-    return false;
   }
 
   @override
   Stream<ResultChangedEvent> onResultChanged(ResultDescriptor descriptor) {
     fail("Unexpected invocation of onResultChanged");
-    return null;
   }
 
   @deprecated
   @override
   Stream<ComputedResult> onResultComputed(ResultDescriptor descriptor) {
     fail("Unexpected invocation of onResultComputed");
-    return null;
   }
 
   @override
   CompilationUnit parseCompilationUnit(Source source) {
     fail("Unexpected invocation of parseCompilationUnit");
-    return null;
   }
 
   @override
   Document parseHtmlDocument(Source source) {
     fail("Unexpected invocation of parseHtmlDocument");
-    return null;
   }
 
   @override
   AnalysisResult performAnalysisTask() {
     fail("Unexpected invocation of performAnalysisTask");
-    return null;
   }
 
   @override
@@ -723,14 +657,12 @@
   CompilationUnit resolveCompilationUnit(
       Source unitSource, LibraryElement library) {
     fail("Unexpected invocation of resolveCompilationUnit");
-    return null;
   }
 
   @override
   CompilationUnit resolveCompilationUnit2(
       Source unitSource, Source librarySource) {
     fail("Unexpected invocation of resolveCompilationUnit");
-    return null;
   }
 
   @override
@@ -753,7 +685,6 @@
   @override
   bool shouldErrorsBeAnalyzed(Source source) {
     fail("Unexpected invocation of shouldErrorsBeAnalyzed");
-    return false;
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
index 3e7843c..410dd7e 100644
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
@@ -18,7 +18,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index 7854a5c..ccab1d2 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -18,7 +18,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @failingTest
   @override
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index a767ae0..4b5f6f7 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -1998,10 +1998,19 @@
   void b() => new A().a();
 }
 ''');
+    Source source3 = addNamedSource('/testing/lib1.dart', r'''
+import '../lib1.dart';
+
+class C {
+  void b() => new A().a();
+}
+''');
     await computeAnalysisResult(source);
     await computeAnalysisResult(source2);
+    await computeAnalysisResult(source3);
     assertNoErrors(source2);
-    verify([source, source2]);
+    assertNoErrors(source3);
+    verify([source, source2, source3]);
   }
 
   test_invalidUseOfVisibleForTestingMember_propertyAccess() async {
@@ -2052,7 +2061,23 @@
     verify([source, source2]);
   }
 
-  test_invalidUseProtectedAndForTesting_method_OK() async {
+  test_invalidUseOfVisibleForTestingMember_OK_export() async {
+    Source source = addNamedSource('/lib1.dart', r'''
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+int fn0() => 1;
+''');
+    Source source2 = addNamedSource('/lib2.dart', r'''
+export 'lib1.dart' show fn0;
+''');
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
+  test_invalidUseProtectedAndForTesting_asProtected_OK() async {
     Source source = addNamedSource('/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
@@ -2074,6 +2099,28 @@
     verify([source, source2]);
   }
 
+  test_invalidUseProtectedAndForTesting_asTesting_OK() async {
+    Source source = addNamedSource('/lib1.dart', r'''
+import 'package:meta/meta.dart';
+class A {
+  @protected
+  @visibleForTesting
+  void a(){ }
+}
+''');
+    Source source2 = addNamedSource('/test/test1.dart', r'''
+import '../lib1.dart';
+
+void main() {
+  new A().a();
+}
+''');
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
   test_isDouble() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.dart2jsHint = true;
diff --git a/pkg/analyzer/test/generated/invalid_code_kernel_test.dart b/pkg/analyzer/test/generated/invalid_code_kernel_test.dart
index cacac44..bf1cd61 100644
--- a/pkg/analyzer/test/generated/invalid_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_kernel_test.dart
@@ -21,7 +21,7 @@
   bool get enableNewAnalysisDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @failingTest
   @override
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index 54da903..596d2c3 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -32,7 +32,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -163,6 +163,13 @@
 
   @override
   @failingTest
+  @potentialAnalyzerProblem
+  test_forEach_genericFunctionType() async {
+    return super.test_forEach_genericFunctionType();
+  }
+
+  @override
+  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/28434')
   test_functionDeclaration_scope_signature() async {
     return super.test_functionDeclaration_scope_signature();
@@ -247,6 +254,20 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_nativeConstConstructor() async {
+    return super.test_nativeConstConstructor();
+  }
+
+  @override
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_nativeFunctionBodyInNonSDKCode_function() async {
+    return super.test_nativeFunctionBodyInNonSDKCode_function();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_nonBoolExpression_functionType() async {
     return super.test_nonBoolExpression_functionType();
@@ -297,6 +318,13 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
+  test_typeArgument_boundToFunctionType() async {
+    return super.test_typeArgument_boundToFunctionType();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
   test_undefinedIdentifier_synthetic_whenExpression() async {
     return super.test_undefinedIdentifier_synthetic_whenExpression();
   }
@@ -310,15 +338,22 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_undefinedMethod_functionExpression_callMethod() async {
-    return super.test_undefinedMethod_functionExpression_callMethod();
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_uriDoesNotExist_dll() async {
+    return super.test_uriDoesNotExist_dll();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_forEach_genericFunctionType() async {
-    return super.test_forEach_genericFunctionType();
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_uriDoesNotExist_dylib() async {
+    return super.test_uriDoesNotExist_dylib();
+  }
+
+  @override
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
+  test_uriDoesNotExist_so() async {
+    return super.test_uriDoesNotExist_so();
   }
 }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index cec534b..220cc65 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -6396,6 +6396,13 @@
     verify([source]);
   }
 
+  test_typeArgument_boundToFunctionType() async {
+    Source source = addSource("class A<T extends void Function<T>(T)>{}");
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   Future<Null> _check_wrongNumberOfParametersForOperator(
       String name, String parameters) async {
     Source source = addSource("""
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index c61a040..e8a95d5 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -35,7 +35,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @failingTest
   @override
diff --git a/pkg/analyzer/test/generated/package_test.dart b/pkg/analyzer/test/generated/package_test.dart
index 4dd7bf4..e80e868 100644
--- a/pkg/analyzer/test/generated/package_test.dart
+++ b/pkg/analyzer/test/generated/package_test.dart
@@ -254,6 +254,5 @@
   @override
   Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) {
     fail('Unexpected invocation of resolve');
-    return null;
   }
 }
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 9b18b50..5814a6f 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -8668,18 +8668,42 @@
     expect(list.rightParenthesis, isNotNull);
   }
 
+  void test_parseFormalParameterList_prefixedType_missingName() {
+    FormalParameterList list = parseFormalParameterList('(io.File)',
+        errors: [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1)]);
+    expect(list, isNotNull);
+    expect(list.leftParenthesis, isNotNull);
+    expect(list.leftDelimiter, isNull);
+    expect(list.parameters, hasLength(1));
+    // TODO(danrubel): Investigate and improve recovery of parameter type/name.
+    SimpleFormalParameter parameter = list.parameters[0];
+    expect(parameter.toSource(), 'io.File ');
+    expect(parameter.identifier.token.isSynthetic, isTrue);
+    TypeName type = parameter.type;
+    PrefixedIdentifier typeName = type.name;
+    expect(typeName.prefix.token.isSynthetic, isFalse);
+    expect(typeName.identifier.token.isSynthetic, isFalse);
+    expect(list.rightDelimiter, isNull);
+    expect(list.rightParenthesis, isNotNull);
+  }
+
   void test_parseFormalParameterList_prefixedType_partial() {
-    int errorOffset = usingFastaParser ? 4 : 3;
     FormalParameterList list = parseFormalParameterList('(io.)', errors: [
-      expectedError(ParserErrorCode.MISSING_IDENTIFIER, errorOffset, 1),
-      expectedError(ParserErrorCode.MISSING_IDENTIFIER, errorOffset, 1)
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1),
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1)
     ]);
     expect(list, isNotNull);
     expect(list.leftParenthesis, isNotNull);
     expect(list.leftDelimiter, isNull);
     expect(list.parameters, hasLength(1));
     // TODO(danrubel): Investigate and improve recovery of parameter type/name.
-    expect(list.parameters[0].toSource(), 'io. ');
+    SimpleFormalParameter parameter = list.parameters[0];
+    expect(parameter.toSource(), 'io. ');
+    expect(parameter.identifier.token.isSynthetic, isTrue);
+    TypeName type = parameter.type;
+    PrefixedIdentifier typeName = type.name;
+    expect(typeName.prefix.token.isSynthetic, isFalse);
+    expect(typeName.identifier.token.isSynthetic, isTrue);
     expect(list.rightDelimiter, isNull);
     expect(list.rightParenthesis, isNotNull);
   }
@@ -10428,10 +10452,17 @@
   }
 
   void test_incomplete_topLevelVariable_const() {
-    CompilationUnit unit = parseCompilationUnit("const ", codes: [
-      ParserErrorCode.MISSING_IDENTIFIER,
-      ParserErrorCode.EXPECTED_TOKEN
-    ]);
+    CompilationUnit unit = parseCompilationUnit("const ",
+        codes: usingFastaParser
+            ? [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN,
+                CompileTimeErrorCode.CONST_NOT_INITIALIZED
+              ]
+            : [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember member = declarations[0];
@@ -10445,10 +10476,17 @@
   }
 
   void test_incomplete_topLevelVariable_final() {
-    CompilationUnit unit = parseCompilationUnit("final ", codes: [
-      ParserErrorCode.MISSING_IDENTIFIER,
-      ParserErrorCode.EXPECTED_TOKEN
-    ]);
+    CompilationUnit unit = parseCompilationUnit("final ",
+        codes: usingFastaParser
+            ? [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN,
+                StaticWarningCode.FINAL_NOT_INITIALIZED
+              ]
+            : [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember member = declarations[0];
@@ -10482,10 +10520,17 @@
     CompilationUnit unit = parseCompilationUnit(r'''
 class C {
   const
-}''', codes: [
-      ParserErrorCode.MISSING_IDENTIFIER,
-      ParserErrorCode.EXPECTED_TOKEN
-    ]);
+}''',
+        codes: usingFastaParser
+            ? [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN,
+                CompileTimeErrorCode.CONST_NOT_INITIALIZED
+              ]
+            : [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
index ef8abbb..bc11b8b 100644
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/resolver_kernel_test.dart
@@ -18,7 +18,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 2b05e91..91c212c 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -57,6 +57,15 @@
   });
 }
 
+/// 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 AnalysisDeltaTest extends EngineTestCase {
   TestSource source1 = new TestSource('/1.dart');
@@ -2534,17 +2543,17 @@
   TypeResolverVisitor _visitor;
 
   fail_visitConstructorDeclaration() async {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
   fail_visitFunctionTypeAlias() async {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
   fail_visitVariableDeclaration() async {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     ClassElement type = ElementFactory.classElement2("A");
     VariableDeclaration node = AstTestFactory.variableDeclaration("a");
     AstTestFactory
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index 49548e5..b2690a0 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -350,7 +350,7 @@
 
   bool get enableNewAnalysisDriver => false;
 
-  bool get previewDart2 => false;
+  bool get useCFE => false;
 
   /**
    * Return a type provider that can be used to test the results of resolution.
@@ -666,7 +666,7 @@
     }
     options ??= defaultAnalysisOptions;
     if (enableNewAnalysisDriver) {
-      if (previewDart2) {
+      if (useCFE) {
         (options as AnalysisOptionsImpl)
           ..strongMode = true
           ..useFastaParser = true;
diff --git a/pkg/analyzer/test/generated/sdk_test.dart b/pkg/analyzer/test/generated/sdk_test.dart
index 69c774e..73b17f5 100644
--- a/pkg/analyzer/test/generated/sdk_test.dart
+++ b/pkg/analyzer/test/generated/sdk_test.dart
@@ -60,7 +60,6 @@
 
   DartSdk _failIfAbsent() {
     fail('Use of ifAbsent function');
-    return null;
   }
 }
 
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
index 34e8ad9..3081d1d 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -18,7 +18,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index f977b4e..6842666 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -36,6 +36,15 @@
   });
 }
 
+/// 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);
+}
+
 /**
  * Like [StaticTypeAnalyzerTest], but as end-to-end tests.
  */
@@ -199,17 +208,17 @@
   TypeSystem get _typeSystem => _visitor.typeSystem;
 
   void fail_visitFunctionExpressionInvocation() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
   void fail_visitMethodInvocation() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
   void fail_visitSimpleIdentifier() {
-    fail("Not yet tested");
+    _fail("Not yet tested");
     _listener.assertNoErrors();
   }
 
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 3f1eb5a..d48655d 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -25,7 +25,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -1049,7 +1049,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index a6292e4..2066b768e 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -25,7 +25,7 @@
   bool get enableKernelDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index b03f69f..2c48053 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -33,7 +33,7 @@
   bool get enableNewAnalysisDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -100,64 +100,6 @@
 
   @override
   @failingTest
-  test_functionLiteral_assignment_typedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_assignment_typedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_assignment_unTypedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_assignment_unTypedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_functionExpressionInvocation_typedArguments() async {
-    // Bad state: Expected a type for null at 154; got one for kernel offset 142
-    await super
-        .test_functionLiteral_functionExpressionInvocation_typedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_functionExpressionInvocation_unTypedArguments() async {
-    // Bad state: Expected a type for null at 150; got one for kernel offset 142
-    await super
-        .test_functionLiteral_functionExpressionInvocation_unTypedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_functionInvocation_typedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_functionInvocation_typedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_functionInvocation_unTypedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_functionInvocation_unTypedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_methodInvocation_typedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_methodInvocation_typedArguments();
-  }
-
-  @override
-  @failingTest
-  test_functionLiteral_methodInvocation_unTypedArguments() async {
-    // Expected: InterfaceTypeImpl:<String>
-    await super.test_functionLiteral_methodInvocation_unTypedArguments();
-  }
-
-  @override
-  @failingTest
   test_futureOr_downwards8() async {
     // type 'BottomTypeImpl' is not a subtype of type 'InterfaceType' in type cast where
     await super.test_futureOr_downwards8();
@@ -336,7 +278,7 @@
   bool get enableNewAnalysisDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   test_futureOr_promotion3() async {
@@ -530,5 +472,5 @@
   bool get enableNewAnalysisDriver => true;
 
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 }
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index d508efa..b766357 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -809,10 +809,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isString, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -838,10 +838,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isInt, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -903,10 +903,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isString, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -934,10 +934,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isInt, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -963,10 +963,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isString, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -992,10 +992,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isInt, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -1023,10 +1023,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isString, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
@@ -1054,10 +1054,10 @@
       return resolutionMap.elementDeclaredByFunctionExpression(exp).type;
     }
 
-    _isFunction2Of(_isInt, _isString)(literal(0));
+    _isFunction2Of(_isInt, _isNull)(literal(0));
     _isFunction2Of(_isInt, _isString)(literal(1));
     _isFunction2Of(_isInt, _isString)(literal(2));
-    _isFunction2Of(_isInt, _isInt)(literal(3));
+    _isFunction2Of(_isInt, _isString)(literal(3));
     _isFunction2Of(_isInt, _isString)(literal(4));
   }
 
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index 027ec86..3604aed 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -73,7 +73,6 @@
       }
     }
     fail("Could not find getter named $getterName in ${type.displayName}");
-    return null;
   }
 
   /**
@@ -90,7 +89,6 @@
       }
     }
     fail("Could not find method named $methodName in ${type.displayName}");
-    return null;
   }
 
   void setUp() {
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 640a9f3..e7de210 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -50,7 +50,6 @@
   bool isEqualNodes(AstNode first, AstNode second) {
     if (first != null && identical(first, second)) {
       fail('Failed to copy node: $first (${first.offset})');
-      return false;
     }
     return super.isEqualNodes(first, second);
   }
@@ -59,7 +58,6 @@
   bool isEqualTokens(Token first, Token second) {
     if (expectTokensCopied && first != null && identical(first, second)) {
       fail('Failed to copy token: ${first.lexeme} (${first.offset})');
-      return false;
     }
     if (first?.precedingComments != null) {
       CommentToken comment = first.precedingComments;
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index 8b66f55..8d963c9 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -32,7 +32,6 @@
 import 'package:html/dom.dart' show Document;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
-import 'package:watcher/src/utils.dart';
 
 import '../../generated/engine_test.dart';
 import '../../generated/test_support.dart';
diff --git a/pkg/analyzer/test/src/context/source_test.dart b/pkg/analyzer/test/src/context/source_test.dart
index 2857e86..5347f29 100644
--- a/pkg/analyzer/test/src/context/source_test.dart
+++ b/pkg/analyzer/test/src/context/source_test.dart
@@ -58,6 +58,5 @@
   @override
   Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) {
     fail('Unexpected invocation of resolve');
-    return null;
   }
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 33f83e8..4b98b46 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -68,9 +68,9 @@
   bool get disableChangesAndCacheAllResults => false;
 
   /**
-   * Whether to enable the Dart 2.0 Front End.
+   * Whether to enable the Dart 2.0 Common Front End.
    */
-  bool get previewDart2 => false;
+  bool useCFE = false;
 
   void addTestFile(String content, {bool priority: false}) {
     testCode = content;
@@ -100,13 +100,13 @@
         createAnalysisOptions(),
         disableChangesAndCacheAllResults: disableChangesAndCacheAllResults,
         externalSummaries: externalSummaries,
-        enableKernelDriver: previewDart2);
+        enableKernelDriver: useCFE);
   }
 
   AnalysisOptionsImpl createAnalysisOptions() => new AnalysisOptionsImpl()
     ..strongMode = true
     ..enableUriInPartOf = true
-    ..useFastaParser = previewDart2;
+    ..useFastaParser = useCFE;
 
   int findOffset(String search) {
     int offset = testCode.indexOf(search);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index e1a6eee..deeac1d 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -18,10 +18,19 @@
 /// them, or know that this is an analyzer problem.
 const potentialAnalyzerProblem = const Object();
 
+/// 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 AnalysisDriverResolutionTest_Kernel extends AnalysisDriverResolutionTest {
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -34,7 +43,7 @@
 @reflectiveTest
 class AnalysisDriverTest_Kernel extends AnalysisDriverTest {
   @override
-  bool get previewDart2 => true;
+  bool get useCFE => true;
 
 //  @failingTest
 //  @potentialAnalyzerProblem
@@ -201,7 +210,7 @@
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
   @override
   test_part_getUnitElement_noLibrary() async {
-    fail('This test fails even with @failingTest');
+    _fail('This test fails even with @failingTest');
     await super.test_part_getUnitElement_noLibrary();
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 3bbf4dd..95a3cb0 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1693,7 +1693,7 @@
 
     TypeName typeName = statement.variables.type;
     expect(typeName.type, isUndefinedType);
-    if (previewDart2) {
+    if (useCFE) {
       expect(typeName.typeArguments.arguments[0].type, isUndefinedType);
     } else {
       expect(typeName.typeArguments.arguments[0].type, typeProvider.intType);
@@ -2124,7 +2124,7 @@
 
       PrefixedIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, same(cElement));
-      if (previewDart2) {
+      if (useCFE) {
         expect(typeIdentifier.staticType, cTypeInt);
       } else {
         expect(typeIdentifier.staticType, cTypeDynamic);
@@ -2153,7 +2153,7 @@
 
       PrefixedIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, cElement);
-      if (previewDart2) {
+      if (useCFE) {
         expect(typeIdentifier.staticType, cTypeDouble);
       } else {
         expect(typeIdentifier.staticType, cTypeDynamic);
@@ -2370,6 +2370,36 @@
     }
   }
 
+  test_label_while() async {
+    addTestFile(r'''
+main() {
+  myLabel:
+  while (true) {
+    continue myLabel;
+    break myLabel;
+  }
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    List<Statement> statements = _getMainStatements(result);
+
+    LabeledStatement statement = statements[0];
+
+    Label label = statement.labels.single;
+    LabelElement labelElement = label.label.staticElement;
+
+    WhileStatement whileStatement = statement.statement;
+    Block whileBlock = whileStatement.body;
+
+    ContinueStatement continueStatement = whileBlock.statements[0];
+    expect(continueStatement.label.staticElement, same(labelElement));
+    expect(continueStatement.label.staticType, isNull);
+
+    BreakStatement breakStatement = whileBlock.statements[1];
+    expect(breakStatement.label.staticElement, same(labelElement));
+    expect(breakStatement.label.staticType, isNull);
+  }
+
   test_local_function() async {
     addTestFile(r'''
 void main() {
@@ -2506,7 +2536,7 @@
     expect(fInvocation.methodName.staticElement, same(fElement));
     expect(fInvocation.staticType, typeProvider.intType);
     // TODO(scheglov) We don't support invoke types well.
-//    if (previewDart2) {
+//    if (useCFE) {
 //      String fInstantiatedType = '(int, String) → int';
 //      expect(fInvocation.methodName.staticType.toString(), fInstantiatedType);
 //      expect(fInvocation.staticInvokeType.toString(), fInstantiatedType);
@@ -3181,6 +3211,73 @@
     _assertArgumentToParameter(arguments[2], methodElement.parameters[2]);
   }
 
+  test_methodInvocation_explicitCall_classTarget() async {
+    addTestFile(r'''
+class C {
+  double call(int p) => 0.0;
+}
+main() {
+  new C().call(0);
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.errors, isEmpty);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    ClassDeclaration cNode = result.unit.declarations[0];
+    ClassElement cElement = cNode.element;
+    MethodElement callElement = cElement.methods[0];
+
+    List<Statement> statements = _getMainStatements(result);
+
+    ExpressionStatement statement = statements[0];
+    MethodInvocation invocation = statement.expression;
+
+    expect(invocation.staticType, typeProvider.doubleType);
+    expect(invocation.staticInvokeType.toString(), '(int) → double');
+
+    SimpleIdentifier methodName = invocation.methodName;
+    expect(methodName.staticElement, same(callElement));
+    expect(methodName.staticType.toString(), '(int) → double');
+  }
+
+  test_methodInvocation_explicitCall_functionTarget() async {
+    addTestFile(r'''
+main(double computation(int p)) {
+  computation.call(1);
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.errors, isEmpty);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    FunctionDeclaration main = result.unit.declarations[0];
+    FunctionElement mainElement = main.element;
+    ParameterElement parameter = mainElement.parameters[0];
+
+    BlockFunctionBody mainBody = main.functionExpression.body;
+    List<Statement> statements = mainBody.block.statements;
+
+    ExpressionStatement statement = statements[0];
+    MethodInvocation invocation = statement.expression;
+
+    expect(invocation.staticType, typeProvider.doubleType);
+    expect(invocation.staticInvokeType.toString(), '(int) → double');
+
+    SimpleIdentifier target = invocation.target;
+    expect(target.staticElement, same(parameter));
+    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);
+    }
+  }
+
   test_methodInvocation_instanceMethod_forwardingStub() async {
     addTestFile(r'''
 class A {
@@ -3234,7 +3331,7 @@
       var invokeTypeStr = '(int) → void';
       expect(invocation.staticType.toString(), 'void');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (previewDart2) {
+      if (useCFE) {
         expect(invocation.methodName.staticElement, same(mElement));
         expect(invocation.methodName.staticType.toString(), invokeTypeStr);
       } else {
@@ -3270,12 +3367,12 @@
       var invokeTypeStr = '(int, double) → Map<int, double>';
       expect(invocation.staticType.toString(), 'Map<int, double>');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (previewDart2) {
+      if (useCFE) {
         expect(invocation.methodName.staticElement, same(mElement));
         expect(invocation.methodName.staticType.toString(), invokeTypeStr);
       }
 
-      if (previewDart2) {
+      if (useCFE) {
         expect(arguments[0].staticParameterElement, isNull);
         expect(arguments[1].staticParameterElement, isNull);
       } else {
@@ -3338,7 +3435,7 @@
     ExpressionStatement statement = fooStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement.getter));
-    if (previewDart2) {
+    if (useCFE) {
       _assertDynamicFunctionType(invocation.staticInvokeType);
     } else {
       expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
@@ -3372,7 +3469,7 @@
     ExpressionStatement statement = fooStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement));
-    if (previewDart2) {
+    if (useCFE) {
       _assertDynamicFunctionType(invocation.staticInvokeType);
     } else {
       expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
@@ -3534,7 +3631,7 @@
       var invokeTypeStr = '(int) → void';
       expect(invocation.staticType.toString(), 'void');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (!previewDart2) {
+      if (!useCFE) {
         expect(invocation.staticInvokeType.element, same(mElement));
       }
       expect(invocation.methodName.staticElement, same(mElement));
@@ -3558,7 +3655,7 @@
       var invokeTypeStr = '(int) → void';
       expect(invocation.staticType.toString(), 'void');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (!previewDart2) {
+      if (!useCFE) {
         expect(invocation.staticInvokeType.element, same(mElement));
       }
       expect(invocation.methodName.staticElement, same(mElement));
@@ -3664,7 +3761,7 @@
       List<Expression> arguments = invocation.argumentList.arguments;
 
       expect(invocation.methodName.staticElement, same(fElement));
-      if (previewDart2) {
+      if (useCFE) {
         expect(invocation.methodName.staticType.toString(), fTypeString);
       }
       expect(invocation.staticType, VoidTypeImpl.instance);
@@ -3684,7 +3781,7 @@
       List<Expression> arguments = invocation.argumentList.arguments;
 
       expect(invocation.methodName.staticElement, same(fElement));
-      if (previewDart2) {
+      if (useCFE) {
         expect(invocation.methodName.staticType.toString(), fTypeString);
       }
       expect(invocation.staticType, VoidTypeImpl.instance);
@@ -3839,6 +3936,38 @@
     expect(identifier.staticType, typeProvider.intType);
   }
 
+  test_prefixedIdentifier_explicitCall() async {
+    addTestFile(r'''
+main(double computation(int p)) {
+  computation.call;
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.errors, isEmpty);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    FunctionDeclaration main = result.unit.declarations[0];
+    FunctionElement mainElement = main.element;
+    ParameterElement parameter = mainElement.parameters[0];
+
+    BlockFunctionBody mainBody = main.functionExpression.body;
+    List<Statement> statements = mainBody.block.statements;
+
+    ExpressionStatement statement = statements[0];
+    PrefixedIdentifier prefixed = statement.expression;
+
+    expect(prefixed.prefix.staticElement, same(parameter));
+    expect(prefixed.prefix.staticType.toString(), '(int) → double');
+
+    SimpleIdentifier methodName = prefixed.identifier;
+    expect(methodName.staticElement, isNull);
+    if (useCFE) {
+      expect(methodName.staticType, isNull);
+    } else {
+      expect(methodName.staticType, typeProvider.dynamicType);
+    }
+  }
+
   test_prefixedIdentifier_importPrefix_className() async {
     var libPath = _p('/test/lib/lib.dart');
     provider.newFile(libPath, '''
@@ -4210,6 +4339,17 @@
     }
   }
 
+  test_stringInterpolation_multiLine_emptyBeforeAfter() async {
+    addTestFile(r"""
+void main() {
+  var v = 42;
+  '''$v''';
+}
+""");
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.errors, isEmpty);
+  }
+
   test_super() async {
     String content = r'''
 class A {
@@ -4614,7 +4754,7 @@
 
     SimpleIdentifier dName = enumNode.name;
     expect(dName.staticElement, same(enumElement));
-    if (previewDart2) {
+    if (useCFE) {
       expect(dName.staticType, typeProvider.typeType);
     }
 
@@ -5452,13 +5592,13 @@
   }
 
   /// Assert that the [argument] is associated with the [expectedParameter],
-  /// if [previewDart2] is `null`. If the [argument] is a [NamedExpression],
+  /// if [useCFE] is `null`. If the [argument] is a [NamedExpression],
   /// the name must be resolved to the parameter in both cases.
   void _assertArgumentToParameter(
       Expression argument, ParameterElement expectedParameter,
       {DartType parameterMemberType}) {
     ParameterElement actualParameter = argument.staticParameterElement;
-    if (previewDart2) {
+    if (useCFE) {
       expect(actualParameter, isNull);
       if (argument is NamedExpression) {
         SimpleIdentifier name = argument.name.label;
@@ -5499,7 +5639,7 @@
 
   /// Assert that the [type] is a function type `() -> dynamic`.
   void _assertDynamicFunctionType(DartType type) {
-    if (previewDart2) {
+    if (useCFE) {
       expect(type.toString(), '() → dynamic');
     } else {
       expect(type, DynamicTypeImpl.instance);
@@ -5553,7 +5693,6 @@
       }
     }
     fail('Not found main() in ${result.unit}');
-    return null;
   }
 
   /**
@@ -8385,7 +8524,6 @@
       }
     }
     fail('Cannot find the class $name in\n$unit');
-    return null;
   }
 
   VariableDeclaration _getClassField(
@@ -8401,7 +8539,6 @@
       }
     }
     fail('Cannot find the field $fieldName in the class $className in\n$unit');
-    return null;
   }
 
   String _getClassFieldType(
@@ -8424,7 +8561,6 @@
     }
     fail('Cannot find the method $methodName in the class $className in\n'
         '$unit');
-    return null;
   }
 
   String _getClassMethodReturnType(
@@ -8457,7 +8593,6 @@
       }
     }
     fail('Cannot find the top-level variable $name in\n$unit');
-    return null;
   }
 
   String _getTopLevelVarType(CompilationUnit unit, String name) {
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index ef27ed8..fff33da 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -197,7 +197,6 @@
   @override
   dynamic noSuchMethod(Invocation invocation) {
     fail('Unexpected invocation of ${invocation.memberName}');
-    return null;
   }
 
   @override
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index c74db16..3faa53d 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -1456,7 +1456,6 @@
       }
     }
     fail('Class member not found');
-    return null;
   }
 
   EvaluationResultImpl _evaluateTopLevelVariable(
diff --git a/pkg/analyzer/test/src/dart/constant/value_test.dart b/pkg/analyzer/test/src/dart/constant/value_test.dart
index 3538988..891bdd3 100644
--- a/pkg/analyzer/test/src/dart/constant/value_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/value_test.dart
@@ -1925,7 +1925,6 @@
       return new DartObjectImpl(_typeProvider.boolType, BoolState.TRUE_STATE);
     }
     fail("Invalid boolean value used in test");
-    return null;
   }
 
   DartObjectImpl _doubleValue(double value) {
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart
index 10377b5..c424d5f 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart
@@ -39,14 +39,11 @@
                 'typedef',
                 'functionVoid',
                 'functionNonVoid',
-                'const',
-                'final',
                 'getter',
                 'setter'
               ]),
           new TestDescriptor('named', 'class A',
-              [ParserErrorCode.MISSING_CLASS_BODY], 'class A {}',
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.MISSING_CLASS_BODY], 'class A {}'),
           new TestDescriptor(
               'extends',
               'class A extends',
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart
index f375872..8ccb281 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart
@@ -37,11 +37,9 @@
               "export '';",
               allFailing: true),
           new TestDescriptor('emptyUri', "export ''",
-              [ParserErrorCode.EXPECTED_TOKEN], "export '';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export '';"),
           new TestDescriptor('uri', "export 'a.dart'",
-              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart';"),
           new TestDescriptor(
               'hide',
               "export 'a.dart' hide",
@@ -52,8 +50,7 @@
               "export 'a.dart' hide _s_;",
               failing: allExceptEof),
           new TestDescriptor('hideName', "export 'a.dart' hide A",
-              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' hide A;",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' hide A;"),
           new TestDescriptor(
               'hideComma',
               "export 'a.dart' hide A,",
@@ -64,8 +61,7 @@
               "export 'a.dart' hide A, _s_;",
               failing: allExceptEof),
           new TestDescriptor('hideCommaName', "export 'a.dart' hide A, B",
-              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' hide A, B;",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' hide A, B;"),
           new TestDescriptor(
               'hideShow',
               "export 'a.dart' hide A show",
@@ -85,8 +81,7 @@
               "export 'a.dart' show _s_;",
               failing: allExceptEof),
           new TestDescriptor('showName', "export 'a.dart' show A",
-              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' show A;",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' show A;"),
           new TestDescriptor(
               'showComma',
               "export 'a.dart' show A,",
@@ -97,8 +92,7 @@
               "export 'a.dart' show A, _s_;",
               failing: allExceptEof),
           new TestDescriptor('showCommaName', "export 'a.dart' show A, B",
-              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' show A, B;",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "export 'a.dart' show A, B;"),
           new TestDescriptor(
               'showHide',
               "export 'a.dart' show A hide",
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
new file mode 100644
index 0000000..861b52d
--- /dev/null
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
@@ -0,0 +1,240 @@
+// 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 MethodTest().buildAll();
+}
+
+class MethodTest extends PartialCodeTest {
+  buildAll() {
+    List<String> allExceptEof = <String>[
+      'field',
+      'fieldConst',
+      'fieldFinal',
+      'methodNonVoid',
+      'methodVoid',
+      'getter',
+      'setter'
+    ];
+    buildTests(
+        'field_declaration',
+        [
+          //
+          // Instance field, const.
+          //
+          new TestDescriptor(
+              'const_noName',
+              'const',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'const _s_;',
+              allFailing: true),
+          new TestDescriptor('const_name', 'const f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'const f;',
+              allFailing: true),
+          new TestDescriptor(
+              'const_equals',
+              'const f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'const f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('const_initializer', 'const f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'const f = 0;'),
+          //
+          // Instance field, final.
+          //
+          new TestDescriptor(
+              'final_noName',
+              'final',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'final _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('final_name', 'final f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'final f;',
+              allFailing: true),
+          new TestDescriptor(
+              'final_equals',
+              'final f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'final f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('final_initializer', 'final f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'final f = 0;'),
+          //
+          // Instance field, var.
+          //
+          new TestDescriptor(
+              'var_noName',
+              'var',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'var _s_;',
+              failing: allExceptEof),
+          new TestDescriptor(
+              'var_name', 'var f', [ParserErrorCode.EXPECTED_TOKEN], 'var f;',
+              allFailing: true),
+          new TestDescriptor(
+              'var_equals',
+              'var f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'var f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('var_initializer', 'var f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'var f = 0;'),
+          //
+          // Instance field, type.
+          //
+          new TestDescriptor(
+              'type_noName',
+              'A',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'A _s_;',
+              failing: allExceptEof),
+          new TestDescriptor(
+              'type_name', 'A f', [ParserErrorCode.EXPECTED_TOKEN], 'A f;',
+              failing: allExceptEof),
+          new TestDescriptor(
+              'type_equals',
+              'A f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'A f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('type_initializer', 'A f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'A f = 0;'),
+          //
+          // Static field, const.
+          //
+          new TestDescriptor(
+              'static_const_noName',
+              'static const',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static const _s_;',
+              allFailing: true),
+          new TestDescriptor('static_const_name', 'static const f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static const f;',
+              allFailing: true),
+          new TestDescriptor(
+              'static_const_equals',
+              'static const f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static const f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_const_initializer', 'static const f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static const f = 0;'),
+          //
+          // Static field, final.
+          //
+          new TestDescriptor(
+              'static_final_noName',
+              'static final',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static final _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_final_name', 'static final f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static final f;',
+              allFailing: true),
+          new TestDescriptor(
+              'static_final_equals',
+              'static final f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static final f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_final_initializer', 'static final f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static final f = 0;'),
+          //
+          // Static field, var.
+          //
+          new TestDescriptor(
+              'static_var_noName',
+              'static var',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static var _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_var_name', 'static var f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static var f;',
+              allFailing: true),
+          new TestDescriptor(
+              'static_var_equals',
+              'static var f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static var f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_var_initializer', 'static var f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static var f = 0;'),
+          //
+          // Static field, type.
+          //
+          new TestDescriptor(
+              'static_type_noName',
+              'static A',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static A _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_type_name', 'static A f',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A f;',
+              failing: allExceptEof),
+          new TestDescriptor(
+              'static_type_equals',
+              'static A f =',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static A f = _s_;',
+              failing: allExceptEof),
+          new TestDescriptor('static_type_initializer', 'static A f = 0',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A f = 0;'),
+        ],
+        PartialCodeTest.classMemberSuffixes,
+        head: 'class C { ',
+        tail: ' }');
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart
index 0fb6f87..86240ee 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart
@@ -23,11 +23,9 @@
               "import '';",
               allFailing: true),
           new TestDescriptor('emptyUri', "import ''",
-              [ParserErrorCode.EXPECTED_TOKEN], "import '';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "import '';"),
           new TestDescriptor('fullUri', "import 'a.dart'",
-              [ParserErrorCode.EXPECTED_TOKEN], "import 'a.dart';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "import 'a.dart';"),
         ],
         PartialCodeTest.prePartSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart
index 5b618fe..b1f0f16 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart
@@ -40,8 +40,7 @@
               'library _s_;',
               failing: allExceptEof),
           new TestDescriptor('name', 'library lib',
-              [ParserErrorCode.EXPECTED_TOKEN], 'library lib;',
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], 'library lib;'),
           new TestDescriptor(
               'nameDot',
               'library lib.',
@@ -52,8 +51,7 @@
               'library lib._s_;',
               failing: allExceptEof),
           new TestDescriptor('nameDotName', 'library lib.a',
-              [ParserErrorCode.EXPECTED_TOKEN], 'library lib.a;',
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], 'library lib.a;'),
         ],
         PartialCodeTest.prePartSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
index d104bcf..432d9d4 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
@@ -15,14 +15,17 @@
     buildTests(
         'method_declaration',
         [
+          //
+          // Instance method, no return type.
+          //
           new TestDescriptor('noType_leftParen', 'm(',
-              [ParserErrorCode.EXPECTED_TOKEN], "m();",
+              [ParserErrorCode.EXPECTED_TOKEN], 'm();',
               allFailing: true),
           new TestDescriptor('noType_paramName', 'm(B',
-              [ParserErrorCode.EXPECTED_TOKEN], "m(B);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'm(B);',
               allFailing: true),
           new TestDescriptor('noType_paramTypeAndName', 'm(B b',
-              [ParserErrorCode.EXPECTED_TOKEN], "m(B b);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'm(B b);',
               allFailing: true),
           new TestDescriptor(
               'noType_paramAndComma',
@@ -31,13 +34,13 @@
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.EXPECTED_TOKEN
               ],
-              "m(B b, _s_);",
+              'm(B b, _s_);',
               allFailing: true),
           new TestDescriptor('noType_noParams', 'm()',
-              [ParserErrorCode.EXPECTED_TOKEN], "m();",
+              [ParserErrorCode.EXPECTED_TOKEN], 'm();',
               allFailing: true),
           new TestDescriptor('noType_params', 'm(b, c)',
-              [ParserErrorCode.EXPECTED_TOKEN], "m(b, c);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'm(b, c);',
               allFailing: true),
           new TestDescriptor(
               'noType_emptyOptional',
@@ -46,8 +49,7 @@
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.MISSING_FUNCTION_BODY
               ],
-              "m(B b, [_s_]){}",
-              failing: ['fieldConst']),
+              'm(B b, [_s_]){}'),
           new TestDescriptor(
               'noType_emptyNamed',
               'm(B b, {})',
@@ -55,31 +57,33 @@
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.MISSING_FUNCTION_BODY
               ],
-              "m(B b, {_s_}){}",
-              failing: ['fieldConst']),
+              'm(B b, {_s_}){}'),
+          //
+          // Instance method, with simple return type.
+          //
           new TestDescriptor('type_leftParen', 'A m(',
-              [ParserErrorCode.EXPECTED_TOKEN], "A m();",
+              [ParserErrorCode.EXPECTED_TOKEN], 'A m();',
               allFailing: true),
           new TestDescriptor('type_paramName', 'A m(B',
-              [ParserErrorCode.EXPECTED_TOKEN], "A m(B);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'A m(B);',
               allFailing: true),
           new TestDescriptor('type_paramTypeAndName', 'A m(B b',
-              [ParserErrorCode.EXPECTED_TOKEN], "A m(B b);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'A m(B b);',
               allFailing: true),
           new TestDescriptor(
-              'noType_paramAndComma',
+              'type_paramAndComma',
               'A m(B b,',
               [
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.EXPECTED_TOKEN
               ],
-              "A m(B b, _s_);",
+              'A m(B b, _s_);',
               allFailing: true),
           new TestDescriptor('type_noParams', 'A m()',
-              [ParserErrorCode.EXPECTED_TOKEN], "A m();",
+              [ParserErrorCode.EXPECTED_TOKEN], 'A m();',
               allFailing: true),
           new TestDescriptor('type_params', 'A m(b, c)',
-              [ParserErrorCode.EXPECTED_TOKEN], "A m(b, c);",
+              [ParserErrorCode.EXPECTED_TOKEN], 'A m(b, c);',
               allFailing: true),
           new TestDescriptor(
               'type_emptyOptional',
@@ -88,8 +92,7 @@
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.MISSING_FUNCTION_BODY
               ],
-              "A m(B b, [_s_]){}",
-              failing: ['fieldConst']),
+              'A m(B b, [_s_]){}'),
           new TestDescriptor(
               'type_emptyNamed',
               'A m(B b, {})',
@@ -97,8 +100,93 @@
                 ParserErrorCode.MISSING_IDENTIFIER,
                 ParserErrorCode.MISSING_FUNCTION_BODY
               ],
-              "A m(B b, {_s_}){}",
-              failing: ['fieldConst']),
+              'A m(B b, {_s_}){}'),
+          //
+          // Static method, no return type.
+          //
+          new TestDescriptor('static_noType_leftParen', 'static m(',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static m();',
+              allFailing: true),
+          new TestDescriptor('static_noType_paramName', 'static m(B',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static m(B);',
+              allFailing: true),
+          new TestDescriptor('static_noType_paramTypeAndName', 'static m(B b',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static m(B b);',
+              allFailing: true),
+          new TestDescriptor(
+              'static_noType_paramAndComma',
+              'static m(B b,',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static m(B b, _s_);',
+              allFailing: true),
+          new TestDescriptor('static_noType_noParams', 'static m()',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static m();',
+              allFailing: true),
+          new TestDescriptor('static_noType_params', 'static m(b, c)',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static m(b, c);',
+              allFailing: true),
+          new TestDescriptor(
+              'static_noType_emptyOptional',
+              'static m(B b, [])',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_FUNCTION_BODY
+              ],
+              'static m(B b, [_s_]){}'),
+          new TestDescriptor(
+              'static_noType_emptyNamed',
+              'static m(B b, {})',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_FUNCTION_BODY
+              ],
+              'static m(B b, {_s_}){}'),
+          //
+          // Static method, with simple return type.
+          //
+          new TestDescriptor('static_type_leftParen', 'static A m(',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A m();',
+              allFailing: true),
+          new TestDescriptor('static_type_paramName', 'static A m(B',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A m(B);',
+              allFailing: true),
+          new TestDescriptor('static_type_paramTypeAndName', 'static A m(B b',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A m(B b);',
+              allFailing: true),
+          new TestDescriptor(
+              'static_type_paramAndComma',
+              'static A m(B b,',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ],
+              'static A m(B b, _s_);',
+              allFailing: true),
+          new TestDescriptor('static_type_noParams', 'static A m()',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A m();',
+              allFailing: true),
+          new TestDescriptor('static_type_params', 'static A m(b, c)',
+              [ParserErrorCode.EXPECTED_TOKEN], 'static A m(b, c);',
+              allFailing: true),
+          new TestDescriptor(
+              'static_type_emptyOptional',
+              'static A m(B b, [])',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_FUNCTION_BODY
+              ],
+              'static A m(B b, [_s_]){}'),
+          new TestDescriptor(
+              'static_type_emptyNamed',
+              'static A m(B b, {})',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_FUNCTION_BODY
+              ],
+              'static A m(B b, {_s_}){}'),
         ],
         PartialCodeTest.classMemberSuffixes,
         head: 'class C { ',
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart
index 75adedf..cde7dbb 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart
@@ -23,11 +23,9 @@
               "part '';",
               allFailing: true),
           new TestDescriptor('emptyUri', "part ''",
-              [ParserErrorCode.EXPECTED_TOKEN], "part '';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "part '';"),
           new TestDescriptor('uri', "part 'a.dart'",
-              [ParserErrorCode.EXPECTED_TOKEN], "part 'a.dart';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "part 'a.dart';"),
         ],
         PartialCodeTest.postPartSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart
index 2808206..0fbbd80 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart
@@ -49,14 +49,11 @@
               'part of lib._s_;',
               failing: allExceptEof),
           new TestDescriptor('nameDotName', 'part of lib.a',
-              [ParserErrorCode.EXPECTED_TOKEN], 'part of lib.a;',
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], 'part of lib.a;'),
           new TestDescriptor('emptyUri', "part of ''",
-              [ParserErrorCode.EXPECTED_TOKEN], "part of '';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "part of '';"),
           new TestDescriptor('uri', "part of 'a.dart'",
-              [ParserErrorCode.EXPECTED_TOKEN], "part of 'a.dart';",
-              failing: onlyConstAndFinal),
+              [ParserErrorCode.EXPECTED_TOKEN], "part of 'a.dart';"),
         ],
         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 6b5a921..35c91eb 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
@@ -26,8 +26,8 @@
    */
   static final List<TestSuffix> classMemberSuffixes = <TestSuffix>[
     new TestSuffix('field', 'var f;'),
-    new TestSuffix('fieldConst', 'const f;'),
-    new TestSuffix('fieldFinal', 'final f;'),
+    new TestSuffix('fieldConst', 'const f = 0;'),
+    new TestSuffix('fieldFinal', 'final f = 0;'),
     new TestSuffix('methodNonVoid', 'int a(b) => 0;'),
     new TestSuffix('methodVoid', 'void a(b) {}'),
     new TestSuffix('getter', 'int get a => 0;'),
@@ -44,8 +44,8 @@
     new TestSuffix('functionVoid', 'void f() {}'),
     new TestSuffix('functionNonVoid', 'int f() {}'),
     new TestSuffix('var', 'var a;'),
-    new TestSuffix('const', 'const a;'),
-    new TestSuffix('final', 'final a;'),
+    new TestSuffix('const', 'const a = 0;'),
+    new TestSuffix('final', 'final a = 0;'),
     new TestSuffix('getter', 'int get a => 0;'),
     new TestSuffix('setter', 'set a(b) {}')
   ];
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 e714b32..735402b 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
@@ -11,6 +11,7 @@
 import 'continue_statement_test.dart' as continue_statement;
 import 'do_statement_test.dart' as do_statement;
 import 'export_directive_test.dart' as export_directive;
+import 'field_declaration_test.dart' as field_declaration;
 import 'forEach_statement_test.dart' as forEach_statement;
 import 'for_statement_test.dart' as for_statement;
 import 'if_statement_test.dart' as if_statement;
@@ -37,6 +38,7 @@
     continue_statement.main();
     do_statement.main();
     export_directive.main();
+    field_declaration.main();
     for_statement.main();
     forEach_statement.main();
     if_statement.main();
diff --git a/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart b/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
index cf2c3b8..f86a63b 100644
--- a/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
@@ -51,7 +51,6 @@
       _safelyWriteNodePath(buffer, first.owner);
     }
     fail(buffer.toString());
-    return false;
   }
 
   @override
@@ -78,7 +77,6 @@
       _safelyWriteNodePath(buffer, first);
     }
     fail(buffer.toString());
-    return false;
   }
 
   @override
@@ -92,7 +90,6 @@
       _safelyWriteNodePath(buffer, first);
     }
     fail(buffer.toString());
-    return false;
   }
 
   /**
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index c6cd476..742fcbe 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -8,6 +8,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -480,6 +481,10 @@
         expect(r.value, o.value, reason: desc);
       } else if (o is IntegerLiteral && r is IntegerLiteral) {
         expect(r.value ?? 0, o.value ?? 0, reason: desc);
+      } else if (o is IntegerLiteral && r is PrefixExpression) {
+        expect(r.operator.type, TokenType.MINUS);
+        IntegerLiteral ri = r.operand;
+        expect(-ri.value, o.value, reason: desc);
       } else if (o is DoubleLiteral && r is DoubleLiteral) {
         if (r.value != null &&
             r.value.isNaN &&
@@ -1195,7 +1200,6 @@
     } else {
       fail('Unexpected type for resynthesized ($desc):'
           ' ${element.runtimeType}');
-      return null;
     }
   }
 
@@ -4076,14 +4080,14 @@
     }
   }
 
-  @failingTest // https://github.com/dart-lang/sdk/issues/31768
   test_const_topLevel_literal() async {
     var library = await checkLibrary(r'''
 const vNull = null;
 const vBoolFalse = false;
 const vBoolTrue = true;
 const vInt = 1;
-const vIntLong = 0x9876543210987654321;
+const vIntLong1 = 0x7FFFFFFFFFFFFFFF;
+const vIntLong2 = 0xFFFFFFFFFFFFFFFF;
 const vDouble = 2.3;
 const vString = 'abc';
 const vStringConcat = 'aaa' 'bbb';
@@ -4096,7 +4100,8 @@
 const bool vBoolFalse = false;
 const bool vBoolTrue = true;
 const int vInt = 1;
-const int vIntLong = 44998905507923676709665;
+const int vIntLong1 = 9223372036854775807;
+const int vIntLong2 = -1;
 const double vDouble = 2.3;
 const String vString = 'abc';
 const String vStringConcat = 'aaabbb';
@@ -4109,7 +4114,8 @@
 const dynamic vBoolFalse = false;
 const dynamic vBoolTrue = true;
 const dynamic vInt = 1;
-const dynamic vIntLong = 44998905507923676709665;
+const dynamic vIntLong1 = 9223372036854775807;
+const dynamic vIntLong2 = -1;
 const dynamic vDouble = 2.3;
 const dynamic vString = 'abc';
 const dynamic vStringConcat = 'aaabbb';
@@ -5493,8 +5499,11 @@
   }
 
   test_export_class_type_alias() async {
-    addLibrarySource(
-        '/a.dart', 'class C {} exends _D with _E; class _D {} class _E {}');
+    addLibrarySource('/a.dart', r'''
+class C = _D with _E;
+class _D {}
+class _E {}
+''');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
 export 'a.dart';
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index 651b216..668c30f 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -5,29 +5,22 @@
 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/kernel_metadata.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/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/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/file_system.dart';
-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/uri_translator_impl.dart';
-import 'package:front_end/src/incremental/kernel_driver.dart';
 import 'package:kernel/kernel.dart' as kernel;
-import 'package:kernel/target/targets.dart';
 import 'package:kernel/text/ast_to_text.dart' as kernel;
 import 'package:kernel/type_environment.dart' as kernel;
-import 'package:package_config/packages.dart';
-import 'package:path/path.dart' as pathos;
 import 'package:test/src/frontend/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -59,7 +52,7 @@
 class ResynthesizeKernelStrongTest extends ResynthesizeTest {
   static const DEBUG = false;
 
-  final resourceProvider = new MemoryResourceProvider(context: pathos.posix);
+  final resourceProvider = new MemoryResourceProvider();
 
   @override
   bool get isSharedFrontEnd => true;
@@ -86,7 +79,8 @@
       {bool allowErrors: false, bool dumpSummaries: false}) async {
     new MockSdk(resourceProvider: resourceProvider);
 
-    File testFile = resourceProvider.newFile('/test.dart', text);
+    String testPath = resourceProvider.convertPath('/test.dart');
+    File testFile = resourceProvider.newFile(testPath, text);
     Uri testUri = testFile.toUri();
     String testUriStr = testUri.toString();
 
@@ -154,12 +148,6 @@
   }
 
   @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30266')
-  test_const_invalid_intLiteral() async {
-    await super.test_const_invalid_intLiteral();
-  }
-
-  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30258')
   test_constructor_redirected_factory_named_generic() async {
     await super.test_constructor_redirected_factory_named_generic();
@@ -197,12 +185,6 @@
 
   @failingTest
   @notForDart2
-  test_export_configurations_useDefault() async {
-    await super.test_export_configurations_useDefault();
-  }
-
-  @failingTest
-  @notForDart2
   test_export_configurations_useFirst() async {
     await super.test_export_configurations_useFirst();
   }
@@ -215,12 +197,6 @@
 
   @failingTest
   @notForDart2
-  test_exportImport_configurations_useDefault() async {
-    await super.test_exportImport_configurations_useDefault();
-  }
-
-  @failingTest
-  @notForDart2
   test_exportImport_configurations_useFirst() async {
     await super.test_exportImport_configurations_useFirst();
   }
@@ -244,12 +220,6 @@
 
   @failingTest
   @notForDart2
-  test_import_configurations_useDefault() async {
-    await super.test_import_configurations_useDefault();
-  }
-
-  @failingTest
-  @notForDart2
   test_import_configurations_useFirst() async {
     await super.test_import_configurations_useFirst();
   }
@@ -365,12 +335,6 @@
   }
 
   @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30725')
-  test_parts_invalidUri_nullStringValue() async {
-    await super.test_parts_invalidUri_nullStringValue();
-  }
-
-  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/31711')
   test_typedef_generic_asFieldType() async {
     await super.test_typedef_generic_asFieldType();
@@ -418,40 +382,40 @@
   }
 
   Future<KernelResynthesizer> _createResynthesizer(Uri testUri) async {
-    Map<String, LibraryInfo> dartLibraries = {};
-    MockSdk.FULL_URI_MAP.forEach((dartUri, path) {
-      var name = Uri.parse(dartUri).path;
-      dartLibraries[name] =
-          new LibraryInfo(name, Uri.parse('file://$path'), const []);
-    });
+    var logger = new PerformanceLog(null);
+    var byteStore = new MemoryByteStore();
+    var analysisOptions = new AnalysisOptionsImpl()..strongMode = true;
 
-    var uriTranslator = new UriTranslatorImpl(
-        new TargetLibrariesSpecification('none', dartLibraries),
-        Packages.noPackages);
-    var options = new ProcessedOptions(new CompilerOptions()
-      ..target = new NoneTarget(new TargetFlags(strongMode: isStrongMode))
-      ..reportMessages = false
-      ..logger = new PerformanceLog(null)
-      ..fileSystem = new _FileSystemAdaptor(resourceProvider)
-      ..byteStore = new MemoryByteStore());
-    var driver = new KernelDriver(
-        options, uriTranslator, new KernelErrorListener(),
-        metadataFactory: new AnalyzerMetadataFactory());
+    var fsState = new FileSystemState(
+        logger,
+        byteStore,
+        new FileContentOverlay(),
+        resourceProvider,
+        sourceFactory,
+        analysisOptions,
+        new Uint32List(0));
 
-    KernelResult kernelResult = await driver.getKernel(testUri);
+    var compiler = new FrontEndCompiler(
+        logger,
+        new MemoryByteStore(),
+        analysisOptions,
+        null,
+        sourceFactory,
+        fsState,
+        resourceProvider.pathContext);
 
+    LibraryCompilationResult libraryResult = await compiler.compile(testUri);
+
+    // Remember Kernel libraries produced by the compiler.
     var libraryMap = <String, kernel.Library>{};
     var libraryExistMap = <String, bool>{};
-
-    void addLibrary(kernel.Library library) {
+    for (var library in libraryResult.program.libraries) {
       String uriStr = library.importUri.toString();
       libraryMap[uriStr] = library;
-      libraryExistMap[uriStr] = true;
+      FileState file = fsState.getFileForUri(library.importUri);
+      libraryExistMap[uriStr] = file?.exists ?? false;
     }
 
-    kernelResult.dependencies.forEach(addLibrary);
-    addLibrary(kernelResult.libraryResult.library);
-
     if (DEBUG) {
       String testUriStr = testUri.toString();
       var library = libraryMap[testUriStr];
@@ -459,7 +423,7 @@
     }
 
     var resynthesizer = new KernelResynthesizer(
-        context, kernelResult.types, libraryMap, libraryExistMap);
+        context, libraryResult.types, libraryMap, libraryExistMap);
     return resynthesizer;
   }
 
@@ -470,42 +434,3 @@
     return buffer.toString();
   }
 }
-
-class _FileSystemAdaptor implements FileSystem {
-  final ResourceProvider provider;
-
-  _FileSystemAdaptor(this.provider);
-
-  @override
-  FileSystemEntity entityForUri(Uri uri) {
-    if (uri.isScheme('file')) {
-      var file = provider.getFile(uri.path);
-      return new _FileSystemEntityAdaptor(uri, file);
-    } else {
-      throw new ArgumentError(
-          'Only file:// URIs are supported, but $uri is given.');
-    }
-  }
-}
-
-class _FileSystemEntityAdaptor implements FileSystemEntity {
-  final Uri uri;
-  final File file;
-
-  _FileSystemEntityAdaptor(this.uri, this.file);
-
-  @override
-  Future<bool> exists() async {
-    return file.exists;
-  }
-
-  @override
-  Future<List<int>> readAsBytes() async {
-    return file.readAsBytesSync();
-  }
-
-  @override
-  Future<String> readAsString() async {
-    return file.readAsStringSync();
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index 7ec895f..7581f8e 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -16,9 +16,9 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/public_namespace_computer.dart'
     as public_namespace;
+import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:path/path.dart' show posix;
 import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context/mock_sdk.dart';
 
@@ -326,7 +326,6 @@
       found.add(dep.uri);
     }
     fail('Did not find dependency $relativeUri.  Found: $found');
-    return null;
   }
 
   /**
@@ -2638,6 +2637,71 @@
     ]);
   }
 
+  test_constExpr_makeTypedList_functionType() {
+    UnlinkedVariable variable =
+        serializeVariableText('final v = <void Function(int)>[];');
+    assertUnlinkedConst(variable.initializer.bodyExpr, operators: [
+      UnlinkedExprOperation.makeTypedList
+    ], ints: [
+      0 // Size of the list
+    ], referenceValidators: [
+      (EntityRef reference) {
+        expect(reference, new isInstanceOf<EntityRef>());
+        expect(reference.entityKind, EntityRefKind.genericFunctionType);
+        expect(reference.syntheticParams, hasLength(1));
+        {
+          final param = reference.syntheticParams[0];
+          expect(param.name, ''); // no name for generic type parameters
+          checkTypeRef(param.type, 'dart:core', 'int',
+              expectedKind: ReferenceKind.classOrEnum);
+        }
+        expect(reference.paramReference, 0);
+        expect(reference.typeParameters, hasLength(0));
+        // TODO(mfairhurst) check this references void
+        expect(reference.syntheticReturnType, isNotNull);
+      }
+    ]);
+  }
+
+  @failingTest
+  test_constExpr_makeTypedList_functionType_withTypeParameters() {
+    UnlinkedVariable variable = serializeVariableText(
+        'final v = <void Function<T>(Function<Q>(T, Q))>[];');
+    assertUnlinkedConst(variable.initializer.bodyExpr, operators: [
+      UnlinkedExprOperation.makeTypedList
+    ], ints: [
+      0 // Size of the list
+    ], referenceValidators: [
+      (EntityRef reference) {
+        expect(reference, new isInstanceOf<EntityRef>());
+        expect(reference.entityKind, EntityRefKind.genericFunctionType);
+        expect(reference.syntheticParams, hasLength(1));
+        {
+          final param = reference.syntheticParams[0];
+          expect(param.type, new isInstanceOf<EntityRef>());
+          expect(param.type.entityKind, EntityRefKind.genericFunctionType);
+          expect(param.type.syntheticParams, hasLength(2));
+          {
+            final subparam = reference.syntheticParams[0];
+            expect(subparam.name, ''); // no name for generic type parameters
+            expect(subparam.type, new isInstanceOf<EntityRef>());
+            expect(subparam.type.paramReference, 2);
+          }
+          {
+            final subparam = reference.syntheticParams[1];
+            expect(subparam.name, ''); // no name for generic type parameters
+            expect(subparam.type, new isInstanceOf<EntityRef>());
+            expect(subparam.type.paramReference, 1);
+          }
+        }
+        expect(reference.paramReference, 0);
+        expect(reference.typeParameters, hasLength(1));
+        // TODO(mfairhurst) check this references void
+        expect(reference.syntheticReturnType, isNotNull);
+      }
+    ]);
+  }
+
   test_constExpr_makeTypedMap() {
     UnlinkedVariable variable = serializeVariableText(
         'const v = const <int, String>{11: "aaa", 22: "bbb", 33: "ccc"};');
@@ -2809,13 +2873,23 @@
     ]);
   }
 
-  @failingTest // https://github.com/dart-lang/sdk/issues/31768
-  test_constExpr_pushLongInt() {
+  test_constExpr_pushLongInt_maxNegative() {
     UnlinkedVariable variable =
-        serializeVariableText('const v = 0xA123456789ABCDEF012345678;');
+        serializeVariableText('const v = 0xFFFFFFFFFFFFFFFF;');
+    assertUnlinkedConst(variable.initializer.bodyExpr, operators: [
+      UnlinkedExprOperation.pushInt,
+      UnlinkedExprOperation.negate
+    ], ints: [
+      1
+    ]);
+  }
+
+  test_constExpr_pushLongInt_maxPositive() {
+    UnlinkedVariable variable =
+        serializeVariableText('const v = 0x7FFFFFFFFFFFFFFF;');
     assertUnlinkedConst(variable.initializer.bodyExpr,
         operators: [UnlinkedExprOperation.pushLongInt],
-        ints: [4, 0xA, 0x12345678, 0x9ABCDEF0, 0x12345678]);
+        ints: [2, 0x7FFFFFFF, 0xFFFFFFFF]);
   }
 
   test_constExpr_pushLongInt_min2() {
@@ -2829,18 +2903,11 @@
     ]);
   }
 
-  @failingTest // https://github.com/dart-lang/sdk/issues/31768
-  test_constExpr_pushLongInt_min3() {
+  test_constExpr_pushLongInt_tooLong() {
     UnlinkedVariable variable =
         serializeVariableText('const v = 0x10000000000000000;');
-    assertUnlinkedConst(variable.initializer.bodyExpr, operators: [
-      UnlinkedExprOperation.pushLongInt
-    ], ints: [
-      3,
-      1,
-      0,
-      0,
-    ]);
+    assertUnlinkedConst(variable.initializer.bodyExpr,
+        operators: [UnlinkedExprOperation.pushInt], ints: [0]);
   }
 
   test_constExpr_pushNull() {
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index c247c00..4d895f0 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -146,14 +146,14 @@
   test_initializer_functionLiteral_expressionBody() async {
     var content = r'''
 var a = 0;
-var t = (int p) => (a = 1);
+var t = /*info:INFERRED_TYPE_CLOSURE*/(int p) => (a = 1);
 ''';
     await checkFile(content);
   }
 
   test_initializer_functionLiteral_parameters_withoutType() async {
     var content = r'''
-var t = (int a, b,int c, d) => 0;
+var t = /*info:INFERRED_TYPE_CLOSURE*/(int a, b,int c, d) => 0;
 ''';
     await checkFile(content);
   }
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index c4b786b..1faae13 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -1114,7 +1114,6 @@
       }
     }
     fail('Annotation not found');
-    return null;
   }
 
   test_annotation_with_args() {
@@ -1269,7 +1268,6 @@
       }
     }
     fail('Annotation not found');
-    return null;
   }
 
   test_annotation_non_const_constructor() {
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index a022797..2ed061e 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -447,7 +447,7 @@
 
   test_conversionAndDynamicInvoke() async {
     addFile('''
-dynamic toString = (int x) => x + 42;
+dynamic toString = /*info:INFERRED_TYPE_CLOSURE*/(int x) => x + 42;
 dynamic hashCode = "hello";
 ''', name: '/helper.dart');
     await checkFile('''
@@ -511,7 +511,7 @@
   (/*info:DYNAMIC_INVOKE*/a1.toStringClosure("hello"));
   a1.hashCode;
 
-  dynamic toString = () => null;
+  dynamic toString = /*info:INFERRED_TYPE_CLOSURE*/() => null;
   (/*info:DYNAMIC_INVOKE*/toString());
 
   (/*info:DYNAMIC_INVOKE*/helper.toString());
@@ -1156,10 +1156,10 @@
         botTop
                       );
     apply<BotTop>(
-        (dynamic x) => new A(),
-        (dynamic x) => (x as Object),
-        (A x) => x,
-        (A x) => null,
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (x as Object),
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => x,
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => null,
         botA,
         botTop
                       );
@@ -1181,10 +1181,10 @@
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
     apply<ATop>(
-        (dynamic x) => new A(),
-        (dynamic x) => (x as Object),
-        (A x) => x,
-        (A x) => null,
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (x as Object),
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => x,
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => null,
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA,
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
@@ -1206,10 +1206,10 @@
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
     apply<BotA>(
-        (dynamic x) => new A(),
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(dynamic x) => (x as Object),
-        (A x) => x,
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => (/*info:UNNECESSARY_CAST*/x as Object),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (/*info:DOWN_CAST_IMPLICIT*/x as Object),
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => x,
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => (/*info:DOWN_CAST_IMPLICIT, info:UNNECESSARY_CAST*/x as Object),
         botA,
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
@@ -1231,10 +1231,10 @@
         /*info:DOWN_CAST_COMPOSITE*/botTop
                   );
     apply<AA>(
-        (dynamic x) => new A(),
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(dynamic x) => (x as Object),
-        (A x) => x,
-        /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Object), // known function
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (/*info:DOWN_CAST_IMPLICIT*/x as Object),
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => x,
+        /*info:INFERRED_TYPE_CLOSURE*/(A x) => (/*info:DOWN_CAST_IMPLICIT, info:UNNECESSARY_CAST*/x as Object), // known function
         /*info:DOWN_CAST_COMPOSITE*/botA,
         /*info:DOWN_CAST_COMPOSITE*/botTop
                   );
@@ -1256,10 +1256,10 @@
         /*info:DOWN_CAST_COMPOSITE*/botTop
                       );
     apply<TopTop>(
-        (dynamic x) => new A(),
-        (dynamic x) => (x as Object),
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => x,
-        /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Object), // known function
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (x as Object),
+        /*info:INFERRED_TYPE_CLOSURE, error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => x,
+        /*info:INFERRED_TYPE_CLOSURE, error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Object), // known function
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA,
         /*info:DOWN_CAST_COMPOSITE*/botTop
                       );
@@ -1281,10 +1281,10 @@
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
     apply<TopA>(
-        (dynamic x) => new A(),
-        /*error:INVALID_CAST_FUNCTION_EXPR*/(dynamic x) => (x as Object), // known function
-        /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => x, // known function
-        /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Object), // known function
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => new A(),
+        /*info:INFERRED_TYPE_CLOSURE*/(dynamic x) => (/*info:DOWN_CAST_IMPLICIT*/x as Object), // known function
+        /*info:INFERRED_TYPE_CLOSURE, error:INVALID_CAST_FUNCTION_EXPR*/(A x) => x, // known function
+        /*info:INFERRED_TYPE_CLOSURE, error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:DOWN_CAST_IMPLICIT, info:UNNECESSARY_CAST*/x as Object), // known function
         /*info:DOWN_CAST_COMPOSITE*/botA,
         /*info:DOWN_CAST_COMPOSITE*/botTop
                     );
@@ -1350,13 +1350,13 @@
 
 void test1() {
   void takesF(f(int x)) => null;
-  takesF((dynamic y) => 3);
+  takesF(/*info:INFERRED_TYPE_CLOSURE*/(dynamic y) => 3);
 }
 
 void test2() {
   int x;
   int f<T>(T t, callback(T x)) { return 3; }
-  f(x, (y) => 3);
+  f(x, /*info:INFERRED_TYPE_CLOSURE*/(y) => 3);
 }
 ''');
   }
@@ -1967,7 +1967,7 @@
   test_functionTypingAndSubtyping_subtypeOfUniversalType() async {
     await checkFile('''
 void main() {
-  nonGenericFn(x) => null;
+  nonGenericFn/*info:INFERRED_TYPE_CLOSURE*/(x) => null;
   {
     R f<P, R>(P p) => null;
     T g<S, T>(S s) => null;
@@ -1976,7 +1976,7 @@
     local = g; // valid
 
     // Non-generic function cannot subtype a generic one.
-    local = /*error:INVALID_ASSIGNMENT*/(x) => null;
+    local = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(x) => null;
     local = /*error:INVALID_ASSIGNMENT*/nonGenericFn;
   }
   {
@@ -1992,7 +1992,7 @@
     local2 = /*info:DOWN_CAST_COMPOSITE*/local;
 
     // Non-generic function cannot subtype a generic one.
-    local = /*error:INVALID_ASSIGNMENT*/(x) => null;
+    local = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(x) => null;
     local = /*error:INVALID_ASSIGNMENT*/nonGenericFn;
   }
 }
@@ -2290,7 +2290,7 @@
 
   test_implicitCasts_genericMethods() async {
     addFile('''
-var x = <String>[].map<String>((x) => "");
+var x = <String>[].map<String>(/*info:INFERRED_TYPE_CLOSURE*/(x) => "");
 ''');
     await check(implicitCasts: false);
   }
@@ -2398,9 +2398,9 @@
   d = /*error:IMPLICIT_DYNAMIC_FUNCTION*/g();
   i = g();
 
-  /*error:IMPLICIT_DYNAMIC_INVOKE*/(<T>(T t) => t)(d);
-  (<T>(T t) => t)(42);
-  (<T>() => /*info:UNNECESSARY_CAST*/null as T)<int>();
+  /*error:IMPLICIT_DYNAMIC_INVOKE*/(/*info:INFERRED_TYPE_CLOSURE*/<T>(T t) => t)(d);
+  (/*info:INFERRED_TYPE_CLOSURE*/<T>(T t) => t)(42);
+  (/*info:INFERRED_TYPE_CLOSURE*/<T>() => /*info:UNNECESSARY_CAST*/null as T)<int>();
 }
     ''');
     await check(implicitDynamic: false);
@@ -2513,7 +2513,7 @@
 
 // nested function
 void main() {
-  /*error:IMPLICIT_DYNAMIC_RETURN*/g0() {return g0();}
+  /*error:IMPLICIT_DYNAMIC_RETURN*/g0/*info:INFERRED_TYPE_CLOSURE*/() {return g0();}
   dynamic g1() { return 42; }
 }
 
@@ -2537,8 +2537,8 @@
 void ftf1(dynamic f(int x)) {}
 
 // function expressions
-var fe0 = (int x) => x as dynamic;
-var fe1 = (int x) => x;
+var fe0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => x as dynamic;
+var fe1 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => x;
     ''');
     await check(implicitDynamic: false);
   }
@@ -4057,7 +4057,7 @@
   SplayTreeMap([int compare(K key1, K key2),
                 bool isValidKey(potentialKey)])
     : _comparator = /*info:DOWN_CAST_COMPOSITE*/(compare == null) ? Comparable.compare : compare,
-      _validKey = (isValidKey != null) ? isValidKey : ((v) => true) {
+      _validKey = (isValidKey != null) ? isValidKey : (/*info:INFERRED_TYPE_CLOSURE*/(v) => true) {
 
     // NOTE: this is a down cast because isValidKey has fuzzy arrow type.
     _Predicate<Object> v = /*info:DOWN_CAST_COMPOSITE*/(isValidKey != null)
@@ -4178,8 +4178,8 @@
     await checkFile(r'''
 void f<T extends num>(T x, T y) {
   var z = x;
-  var f = () => x;
-  f = () => y;
+  var f = /*info:INFERRED_TYPE_CLOSURE*/() => x;
+  f = /*info:INFERRED_TYPE_CLOSURE*/() => y;
   if (x is int) {
     /*info:DYNAMIC_INVOKE*/z./*error:UNDEFINED_GETTER*/isEven;
     var q = x;
@@ -4187,7 +4187,7 @@
     /*info:DYNAMIC_INVOKE*/f()./*error:UNDEFINED_GETTER*/isEven;
 
     // This captures the type `T extends int`.
-    var g = () => x;
+    var g = /*info:INFERRED_TYPE_CLOSURE*/() => x;
     g = /*info:DOWN_CAST_COMPOSITE*/f;
     g().isEven;
     q = g();
@@ -4377,7 +4377,7 @@
   /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b++;
   /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b--;
 
-  takesC(C c) => null;
+  takesC/*info:INFERRED_TYPE_CLOSURE*/(C c) => null;
   takesC(/*info:DOWN_CAST_IMPLICIT*/++/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b);
   takesC(/*info:DOWN_CAST_IMPLICIT*/--/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b);
   takesC(/*info:DOWN_CAST_IMPLICIT,info:DOWN_CAST_IMPLICIT_ASSIGN*/b++);
diff --git a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
new file mode 100644
index 0000000..4f208e9
--- /dev/null
+++ b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
@@ -0,0 +1,869 @@
+// 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/token.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../generated/resolver_test_case.dart';
+import '../../../generated/test_support.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(Dart2InferenceTest);
+  });
+}
+
+/// Tests for Dart2 inference rules back-ported from FrontEnd.
+///
+/// https://github.com/dart-lang/sdk/issues/31638
+@reflectiveTest
+class Dart2InferenceTest extends ResolverTestCase {
+  @override
+  AnalysisOptions get defaultAnalysisOptions =>
+      new AnalysisOptionsImpl()..strongMode = true;
+
+  @override
+  bool get enableNewAnalysisDriver => true;
+
+  test_bool_assert() async {
+    var code = r'''
+T f<T>() => null;
+
+main() {
+  assert(f()); // 1
+  assert(f(), f()); // 2
+}
+
+class C {
+  C() : assert(f()), // 3
+        assert(f(), f()); // 4
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    String getType(String prefix) {
+      var invocation = _findMethodInvocation(unit, code, prefix);
+      return invocation.staticInvokeType.toString();
+    }
+
+    expect(getType('f()); // 1'), '() → bool');
+
+    expect(getType('f(), '), '() → bool');
+    expect(getType('f()); // 2'), '() → dynamic');
+
+    expect(getType('f()), // 3'), '() → bool');
+
+    expect(getType('f(), '), '() → bool');
+    expect(getType('f()); // 4'), '() → dynamic');
+  }
+
+  test_bool_logical() async {
+    var code = r'''
+T f<T>() => null;
+
+var v1 = f() || f(); // 1
+var v2 = f() && f(); // 2
+
+main() {
+  var v1 = f() || f(); // 3
+  var v2 = f() && f(); // 4
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    void assertType(String prefix) {
+      var invocation = _findMethodInvocation(unit, code, prefix);
+      expect(invocation.staticInvokeType.toString(), '() → bool');
+    }
+
+    assertType('f() || f(); // 1');
+    assertType('f(); // 1');
+    assertType('f() && f(); // 2');
+    assertType('f(); // 2');
+
+    assertType('f() || f(); // 3');
+    assertType('f(); // 3');
+    assertType('f() && f(); // 4');
+    assertType('f(); // 4');
+  }
+
+  test_bool_statement() async {
+    var code = r'''
+T f<T>() => null;
+
+main() {
+  while (f()) {} // 1
+  do {} while (f()); // 2
+  if (f()) {} // 3
+  for (; f(); ) {} // 4
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    void assertType(String prefix) {
+      var invocation = _findMethodInvocation(unit, code, prefix);
+      expect(invocation.staticInvokeType.toString(), '() → bool');
+    }
+
+    assertType('f()) {} // 1');
+    assertType('f());');
+    assertType('f()) {} // 3');
+    assertType('f(); ) {} // 4');
+  }
+
+  test_closure_downwardReturnType_arrow() async {
+    var code = r'''
+void main() {
+  List<int> Function() g;
+  g = () => 42;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    Expression closure = _findExpression(unit, code, '() => 42');
+    expect(closure.staticType.toString(), '() → List<int>');
+  }
+
+  test_closure_downwardReturnType_block() async {
+    var code = r'''
+void main() {
+  List<int> Function() g;
+  g = () { // mark
+    return 42;
+  };
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    Expression closure = _findExpression(unit, code, '() { // mark');
+    expect(closure.staticType.toString(), '() → List<int>');
+  }
+
+  test_compoundAssignment_index() async {
+    var code = r'''
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Test<T, U> {
+  T operator [](String s);
+  void operator []=(String s, U v);
+}
+
+void test1(Test<int, int> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=int*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=int*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=int*/ v10 = ++t['x'];
+  var /*@type=int*/ v11 = t['x']++;
+}
+
+void test2(Test<int, num> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=int*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=num*/ v6 = t['x'] ??= getDouble();
+  var /*@type=int*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=double*/ v9 = t['x'] += getDouble();
+  var /*@type=int*/ v10 = ++t['x'];
+  var /*@type=int*/ v11 = t['x']++;
+}
+
+void test3(Test<int, double> t) {
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=num*/ v6 = t['x'] ??= getDouble();
+  var /*@type=int*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=double*/ v9 = t['x'] += getDouble();
+  var /*@type=int*/ v10 = ++t['x'];
+  var /*@type=int*/ v11 = t['x']++;
+}
+
+void test4(Test<num, int> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=num*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=num*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=num*/ v10 = ++t['x'];
+  var /*@type=num*/ v11 = t['x']++;
+}
+
+void test5(Test<num, num> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=num*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=num*/ v6 = t['x'] ??= getDouble();
+  var /*@type=num*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=num*/ v9 = t['x'] += getDouble();
+  var /*@type=num*/ v10 = ++t['x'];
+  var /*@type=num*/ v11 = t['x']++;
+}
+
+void test6(Test<num, double> t) {
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=num*/ v6 = t['x'] ??= getDouble();
+  var /*@type=num*/ v7 = t['x'] += getInt();
+  var /*@type=num*/ v8 = t['x'] += getNum();
+  var /*@type=num*/ v9 = t['x'] += getDouble();
+  var /*@type=num*/ v10 = ++t['x'];
+  var /*@type=num*/ v11 = t['x']++;
+}
+
+void test7(Test<double, int> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=num*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=double*/ v7 = t['x'] += getInt();
+  var /*@type=double*/ v8 = t['x'] += getNum();
+  var /*@type=double*/ v10 = ++t['x'];
+  var /*@type=double*/ v11 = t['x']++;
+}
+
+void test8(Test<double, num> t) {
+  var /*@type=int*/ v1 = t['x'] = getInt();
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=num*/ v4 = t['x'] ??= getInt();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=double*/ v6 = t['x'] ??= getDouble();
+  var /*@type=double*/ v7 = t['x'] += getInt();
+  var /*@type=double*/ v8 = t['x'] += getNum();
+  var /*@type=double*/ v9 = t['x'] += getDouble();
+  var /*@type=double*/ v10 = ++t['x'];
+  var /*@type=double*/ v11 = t['x']++;
+}
+
+void test9(Test<double, double> t) {
+  var /*@type=num*/ v2 = t['x'] = getNum();
+  var /*@type=double*/ v3 = t['x'] = getDouble();
+  var /*@type=num*/ v5 = t['x'] ??= getNum();
+  var /*@type=double*/ v6 = t['x'] ??= getDouble();
+  var /*@type=double*/ v7 = t['x'] += getInt();
+  var /*@type=double*/ v8 = t['x'] += getNum();
+  var /*@type=double*/ v9 = t['x'] += getDouble();
+  var /*@type=double*/ v10 = ++t['x'];
+  var /*@type=double*/ v11 = t['x']++;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+    _assertTypeAnnotations(code, unit);
+  }
+
+  test_compoundAssignment_prefixedIdentifier() async {
+    var code = r'''
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test<T extends U, U> {
+  T get x => null;
+  void set x(U _) {}
+}
+
+void test1(Test<int, int> t) {
+  var /*@type=int*/ v1 = t.x = getInt();
+  var /*@type=num*/ v2 = t.x = getNum();
+  var /*@type=int*/ v4 = t.x ??= getInt();
+  var /*@type=num*/ v5 = t.x ??= getNum();
+  var /*@type=int*/ v7 = t.x += getInt();
+  var /*@type=num*/ v8 = t.x += getNum();
+  var /*@type=int*/ v10 = ++t.x;
+  var /*@type=int*/ v11 = t.x++;
+}
+
+void test2(Test<int, num> t) {
+  var /*@type=int*/ v1 = t.x = getInt();
+  var /*@type=num*/ v2 = t.x = getNum();
+  var /*@type=double*/ v3 = t.x = getDouble();
+  var /*@type=int*/ v4 = t.x ??= getInt();
+  var /*@type=num*/ v5 = t.x ??= getNum();
+  var /*@type=num*/ v6 = t.x ??= getDouble();
+  var /*@type=int*/ v7 = t.x += getInt();
+  var /*@type=num*/ v8 = t.x += getNum();
+  var /*@type=double*/ v9 = t.x += getDouble();
+  var /*@type=int*/ v10 = ++t.x;
+  var /*@type=int*/ v11 = t.x++;
+}
+
+void test5(Test<num, num> t) {
+  var /*@type=int*/ v1 = t.x = getInt();
+  var /*@type=num*/ v2 = t.x = getNum();
+  var /*@type=double*/ v3 = t.x = getDouble();
+  var /*@type=num*/ v4 = t.x ??= getInt();
+  var /*@type=num*/ v5 = t.x ??= getNum();
+  var /*@type=num*/ v6 = t.x ??= getDouble();
+  var /*@type=num*/ v7 = t.x += getInt();
+  var /*@type=num*/ v8 = t.x += getNum();
+  var /*@type=num*/ v9 = t.x += getDouble();
+  var /*@type=num*/ v10 = ++t.x;
+  var /*@type=num*/ v11 = t.x++;
+}
+
+void test8(Test<double, num> t) {
+  var /*@type=int*/ v1 = t.x = getInt();
+  var /*@type=num*/ v2 = t.x = getNum();
+  var /*@type=double*/ v3 = t.x = getDouble();
+  var /*@type=num*/ v4 = t.x ??= getInt();
+  var /*@type=num*/ v5 = t.x ??= getNum();
+  var /*@type=double*/ v6 = t.x ??= getDouble();
+  var /*@type=double*/ v7 = t.x += getInt();
+  var /*@type=double*/ v8 = t.x += getNum();
+  var /*@type=double*/ v9 = t.x += getDouble();
+  var /*@type=double*/ v10 = ++t.x;
+  var /*@type=double*/ v11 = t.x++;
+}
+
+void test9(Test<double, double> t) {
+  var /*@type=num*/ v2 = t.x = getNum();
+  var /*@type=double*/ v3 = t.x = getDouble();
+  var /*@type=num*/ v5 = t.x ??= getNum();
+  var /*@type=double*/ v6 = t.x ??= getDouble();
+  var /*@type=double*/ v7 = t.x += getInt();
+  var /*@type=double*/ v8 = t.x += getNum();
+  var /*@type=double*/ v9 = t.x += getDouble();
+  var /*@type=double*/ v10 = ++t.x;
+  var /*@type=double*/ v11 = t.x++;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+
+    var unit = analysisResult.unit;
+    _assertTypeAnnotations(code, unit);
+  }
+
+  test_compoundAssignment_propertyAccess() async {
+    var t1 = 'new Test<int, int>()';
+    var t2 = 'new Test<int, num>()';
+    var t5 = 'new Test<num, num>()';
+    var t8 = 'new Test<double, num>()';
+    var t9 = 'new Test<double, double>()';
+    var code = '''
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test<T extends U, U> {
+  T get x => null;
+  void set x(U _) {}
+}
+
+void test1() {
+  var /*@type=int*/ v1 = $t1.x = getInt();
+  var /*@type=num*/ v2 = $t1.x = getNum();
+  var /*@type=int*/ v4 = $t1.x ??= getInt();
+  var /*@type=num*/ v5 = $t1.x ??= getNum();
+  var /*@type=int*/ v7 = $t1.x += getInt();
+  var /*@type=num*/ v8 = $t1.x += getNum();
+  var /*@type=int*/ v10 = ++$t1.x;
+  var /*@type=int*/ v11 = $t1.x++;
+}
+
+void test2() {
+  var /*@type=int*/ v1 = $t2.x = getInt();
+  var /*@type=num*/ v2 = $t2.x = getNum();
+  var /*@type=double*/ v3 = $t2.x = getDouble();
+  var /*@type=int*/ v4 = $t2.x ??= getInt();
+  var /*@type=num*/ v5 = $t2.x ??= getNum();
+  var /*@type=num*/ v6 = $t2.x ??= getDouble();
+  var /*@type=int*/ v7 = $t2.x += getInt();
+  var /*@type=num*/ v8 = $t2.x += getNum();
+  var /*@type=double*/ v9 = $t2.x += getDouble();
+  var /*@type=int*/ v10 = ++$t2.x;
+  var /*@type=int*/ v11 = $t2.x++;
+}
+
+void test5() {
+  var /*@type=int*/ v1 = $t5.x = getInt();
+  var /*@type=num*/ v2 = $t5.x = getNum();
+  var /*@type=double*/ v3 = $t5.x = getDouble();
+  var /*@type=num*/ v4 = $t5.x ??= getInt();
+  var /*@type=num*/ v5 = $t5.x ??= getNum();
+  var /*@type=num*/ v6 = $t5.x ??= getDouble();
+  var /*@type=num*/ v7 = $t5.x += getInt();
+  var /*@type=num*/ v8 = $t5.x += getNum();
+  var /*@type=num*/ v9 = $t5.x += getDouble();
+  var /*@type=num*/ v10 = ++$t5.x;
+  var /*@type=num*/ v11 = $t5.x++;
+}
+
+void test8() {
+  var /*@type=int*/ v1 = $t8.x = getInt();
+  var /*@type=num*/ v2 = $t8.x = getNum();
+  var /*@type=double*/ v3 = $t8.x = getDouble();
+  var /*@type=num*/ v4 = $t8.x ??= getInt();
+  var /*@type=num*/ v5 = $t8.x ??= getNum();
+  var /*@type=double*/ v6 = $t8.x ??= getDouble();
+  var /*@type=double*/ v7 = $t8.x += getInt();
+  var /*@type=double*/ v8 = $t8.x += getNum();
+  var /*@type=double*/ v9 = $t8.x += getDouble();
+  var /*@type=double*/ v10 = ++$t8.x;
+  var /*@type=double*/ v11 = $t8.x++;
+}
+
+void test9() {
+  var /*@type=num*/ v2 = $t9.x = getNum();
+  var /*@type=double*/ v3 = $t9.x = getDouble();
+  var /*@type=num*/ v5 = $t9.x ??= getNum();
+  var /*@type=double*/ v6 = $t9.x ??= getDouble();
+  var /*@type=double*/ v7 = $t9.x += getInt();
+  var /*@type=double*/ v8 = $t9.x += getNum();
+  var /*@type=double*/ v9 = $t9.x += getDouble();
+  var /*@type=double*/ v10 = ++$t9.x;
+  var /*@type=double*/ v11 = $t9.x++;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+
+    var unit = analysisResult.unit;
+    _assertTypeAnnotations(code, unit);
+  }
+
+  test_compoundAssignment_simpleIdentifier() async {
+    var code = r'''
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test<T extends U, U> {
+  T get x => null;
+  void set x(U _) {}
+}
+
+class Test1 extends Test<int, int> {
+  void test1() {
+    var /*@type=int*/ v1 = x = getInt();
+    var /*@type=num*/ v2 = x = getNum();
+    var /*@type=int*/ v4 = x ??= getInt();
+    var /*@type=num*/ v5 = x ??= getNum();
+    var /*@type=int*/ v7 = x += getInt();
+    var /*@type=num*/ v8 = x += getNum();
+    var /*@type=int*/ v10 = ++x;
+    var /*@type=int*/ v11 = x++;
+  }
+}
+
+class Test2 extends Test<int, num> {
+  void test2() {
+    var /*@type=int*/ v1 = x = getInt();
+    var /*@type=num*/ v2 = x = getNum();
+    var /*@type=double*/ v3 = x = getDouble();
+    var /*@type=int*/ v4 = x ??= getInt();
+    var /*@type=num*/ v5 = x ??= getNum();
+    var /*@type=num*/ v6 = x ??= getDouble();
+    var /*@type=int*/ v7 = x += getInt();
+    var /*@type=num*/ v8 = x += getNum();
+    var /*@type=double*/ v9 = x += getDouble();
+    var /*@type=int*/ v10 = ++x;
+    var /*@type=int*/ v11 = x++;
+  }
+}
+
+class Test5 extends Test<num, num> {
+  void test5() {
+    var /*@type=int*/ v1 = x = getInt();
+    var /*@type=num*/ v2 = x = getNum();
+    var /*@type=double*/ v3 = x = getDouble();
+    var /*@type=num*/ v4 = x ??= getInt();
+    var /*@type=num*/ v5 = x ??= getNum();
+    var /*@type=num*/ v6 = x ??= getDouble();
+    var /*@type=num*/ v7 = x += getInt();
+    var /*@type=num*/ v8 = x += getNum();
+    var /*@type=num*/ v9 = x += getDouble();
+    var /*@type=num*/ v10 = ++x;
+    var /*@type=num*/ v11 = x++;
+  }
+}
+
+class Test8 extends Test<double, num> {
+  void test8() {
+    var /*@type=int*/ v1 = x = getInt();
+    var /*@type=num*/ v2 = x = getNum();
+    var /*@type=double*/ v3 = x = getDouble();
+    var /*@type=num*/ v4 = x ??= getInt();
+    var /*@type=num*/ v5 = x ??= getNum();
+    var /*@type=double*/ v6 = x ??= getDouble();
+    var /*@type=double*/ v7 = x += getInt();
+    var /*@type=double*/ v8 = x += getNum();
+    var /*@type=double*/ v9 = x += getDouble();
+    var /*@type=double*/ v10 = ++x;
+    var /*@type=double*/ v11 = x++;
+  }
+}
+
+class Test9 extends Test<double, double> {
+  void test9() {
+    var /*@type=num*/ v2 = x = getNum();
+    var /*@type=double*/ v3 = x = getDouble();
+    var /*@type=num*/ v5 = x ??= getNum();
+    var /*@type=double*/ v6 = x ??= getDouble();
+    var /*@type=double*/ v7 = x += getInt();
+    var /*@type=double*/ v8 = x += getNum();
+    var /*@type=double*/ v9 = x += getDouble();
+    var /*@type=double*/ v10 = ++x;
+    var /*@type=double*/ v11 = x++;
+  }
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+
+    var unit = analysisResult.unit;
+    _assertTypeAnnotations(code, unit);
+  }
+
+  test_compoundAssignment_simpleIdentifier_topLevel() async {
+    var code = r'''
+class A {}
+
+class B extends A {
+  B operator +(int i) => this;
+}
+
+B get topLevel => new B();
+
+void set topLevel(A value) {}
+
+main() {
+  var /*@type=B*/ v = topLevel += 1;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+
+    var unit = analysisResult.unit;
+    _assertTypeAnnotations(code, unit);
+  }
+
+  test_forIn() async {
+    var code = r'''
+T f<T>() => null;
+
+void test(Iterable<num> iter) {
+  for (var w in f()) {} // 1
+  for (var x in iter) {} // 2
+  for (num y in f()) {} // 3
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    {
+      var node = EngineTestCase.findSimpleIdentifier(unit, code, 'w in');
+      VariableElement element = node.staticElement;
+      expect(node.staticType, typeProvider.dynamicType);
+      expect(element.type, typeProvider.dynamicType);
+
+      var invocation = _findMethodInvocation(unit, code, 'f()) {} // 1');
+      expect(invocation.staticType.toString(), 'Iterable<dynamic>');
+    }
+
+    {
+      var node = EngineTestCase.findSimpleIdentifier(unit, code, 'x in');
+      VariableElement element = node.staticElement;
+      expect(node.staticType, typeProvider.numType);
+      expect(element.type, typeProvider.numType);
+    }
+
+    {
+      var node = EngineTestCase.findSimpleIdentifier(unit, code, 'y in');
+      VariableElement element = node.staticElement;
+
+      expect(node.staticType, typeProvider.numType);
+      expect(element.type, typeProvider.numType);
+
+      var invocation = _findMethodInvocation(unit, code, 'f()) {} // 3');
+      expect(invocation.staticType.toString(), 'Iterable<num>');
+    }
+  }
+
+  test_forIn_identifier() async {
+    var code = r'''
+T f<T>() => null;
+
+class A {}
+
+A aTopLevel;
+void set aTopLevelSetter(A value) {}
+
+class C {
+  A aField;
+  void set aSetter(A value) {}
+  void test() {
+    A aLocal;
+    for (aLocal in f()) {} // local
+    for (aField in f()) {} // field
+    for (aSetter in f()) {} // setter
+    for (aTopLevel in f()) {} // top variable
+    for (aTopLevelSetter in f()) {} // top setter
+  }
+}''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    void assertType(String prefix) {
+      var invocation = _findMethodInvocation(unit, code, prefix);
+      expect(invocation.staticType.toString(), 'Iterable<A>');
+    }
+
+    assertType('f()) {} // local');
+    assertType('f()) {} // field');
+    assertType('f()) {} // setter');
+    assertType('f()) {} // top variable');
+    assertType('f()) {} // top setter');
+  }
+
+  test_implicitVoidReturnType_default() async {
+    var code = r'''
+class C {
+  set x(_) {}
+  operator []=(int index, double value) => null;
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    ClassElement c = unit.element.getType('C');
+
+    PropertyAccessorElement x = c.accessors[0];
+    expect(x.returnType, VoidTypeImpl.instance);
+
+    MethodElement operator = c.methods[0];
+    expect(operator.displayName, '[]=');
+    expect(operator.returnType, VoidTypeImpl.instance);
+  }
+
+  test_implicitVoidReturnType_derived() async {
+    var code = r'''
+class Base {
+  dynamic set x(_) {}
+  dynamic operator[]=(int x, int y) => null;
+}
+class Derived extends Base {
+  set x(_) {}
+  operator[]=(int x, int y) {}
+}''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    ClassElement c = unit.element.getType('Derived');
+
+    PropertyAccessorElement x = c.accessors[0];
+    expect(x.returnType, VoidTypeImpl.instance);
+
+    MethodElement operator = c.methods[0];
+    expect(operator.displayName, '[]=');
+    expect(operator.returnType, VoidTypeImpl.instance);
+  }
+
+  test_inferObject_whenDownwardNull() async {
+    var code = r'''
+int f(void Function(Null) f2) {}
+void main() {
+  f((x) {});
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+    var xNode = EngineTestCase.findSimpleIdentifier(unit, code, 'x) {}');
+    VariableElement xElement = xNode.staticElement;
+    expect(xNode.staticType, typeProvider.objectType);
+    expect(xElement.type, typeProvider.objectType);
+  }
+
+  test_listMap_empty() async {
+    var code = r'''
+var x = [];
+var y = {};
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    SimpleIdentifier x = _findExpression(unit, code, 'x = ');
+    expect(x.staticType.toString(), 'List<dynamic>');
+
+    SimpleIdentifier y = _findExpression(unit, code, 'y = ');
+    expect(y.staticType.toString(), 'Map<dynamic, dynamic>');
+  }
+
+  test_listMap_null() async {
+    var code = r'''
+var x = [null];
+var y = {null: null};
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    SimpleIdentifier x = _findExpression(unit, code, 'x = ');
+    expect(x.staticType.toString(), 'List<Null>');
+
+    SimpleIdentifier y = _findExpression(unit, code, 'y = ');
+    expect(y.staticType.toString(), 'Map<Null, Null>');
+  }
+
+  test_switchExpression_asContext_forCases() async {
+    var code = r'''
+class C<T> {
+  const C();
+}
+
+void test(C<int> x) {
+  switch (x) {
+    case const C():
+      break;
+    default:
+      break;
+  }
+}''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    var node = _findInstanceCreation(unit, code, 'const C():');
+    expect(node.staticType.toString(), 'C<int>');
+  }
+
+  test_voidType_method() async {
+    var code = r'''
+class C {
+  void m() {}
+}
+var x = new C().m();
+main() {
+  var y = new C().m();
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    SimpleIdentifier x = _findExpression(unit, code, 'x = ');
+    expect(x.staticType, VoidTypeImpl.instance);
+
+    SimpleIdentifier y = _findExpression(unit, code, 'y = ');
+    expect(y.staticType, VoidTypeImpl.instance);
+  }
+
+  test_voidType_topLevelFunction() async {
+    var code = r'''
+void f() {}
+var x = f();
+main() {
+  var y = f();
+}
+''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    SimpleIdentifier x = _findExpression(unit, code, 'x = ');
+    expect(x.staticType, VoidTypeImpl.instance);
+
+    SimpleIdentifier y = _findExpression(unit, code, 'y = ');
+    expect(y.staticType, VoidTypeImpl.instance);
+  }
+
+  void _assertTypeAnnotations(String code, CompilationUnit unit) {
+    var types = <int, String>{};
+    {
+      int lastIndex = 0;
+      while (true) {
+        const prefix = '/*@type=';
+        int openIndex = code.indexOf(prefix, lastIndex);
+        if (openIndex == -1) {
+          break;
+        }
+        int closeIndex = code.indexOf('*/', openIndex + 1);
+        expect(closeIndex, isPositive);
+        types[openIndex] =
+            code.substring(openIndex + prefix.length, closeIndex);
+        lastIndex = closeIndex;
+      }
+    }
+    unit.accept(new _TypeAnnotationsValidator(types));
+  }
+
+  Expression _findExpression(AstNode root, String code, String prefix) {
+    return EngineTestCase.findNode(root, code, prefix, (n) {
+      return n is Expression;
+    });
+  }
+
+  InstanceCreationExpression _findInstanceCreation(
+      AstNode root, String code, String prefix) {
+    return EngineTestCase.findNode(root, code, prefix, (n) {
+      return n is InstanceCreationExpression;
+    });
+  }
+
+  MethodInvocation _findMethodInvocation(
+      AstNode root, String code, String prefix) {
+    return EngineTestCase.findNode(root, code, prefix, (n) {
+      return n is MethodInvocation;
+    });
+  }
+}
+
+class _TypeAnnotationsValidator extends RecursiveAstVisitor {
+  final Map<int, String> types;
+
+  _TypeAnnotationsValidator(this.types);
+
+  void visitSimpleIdentifier(SimpleIdentifier node) {
+    Token comment = node.token.precedingComments;
+    if (comment != null) {
+      String expectedType = types[comment.offset];
+      if (expectedType != null) {
+        String actualType = node.staticType.toString();
+        expect(actualType, expectedType, reason: '@${comment.offset}');
+      }
+    }
+  }
+}
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index ae402c1..c5187b2 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -57,8 +57,8 @@
     var mainUnit = await checkFileElement('''
 import 'dart:async';
 Future<int> futureInt = null;
-var f = () => futureInt;
-var g = () async => futureInt;
+var f = /*info:INFERRED_TYPE_CLOSURE*/() => futureInt;
+var g = /*info:INFERRED_TYPE_CLOSURE*/() async => futureInt;
 ''');
     var futureInt = mainUnit.topLevelVariables[0];
     expect(futureInt.name, 'futureInt');
@@ -72,7 +72,9 @@
   }
 
   test_asyncClosureReturnType_future() async {
-    var mainUnit = await checkFileElement('var f = () async => 0;');
+    var mainUnit = await checkFileElement('''
+var f = /*info:INFERRED_TYPE_CLOSURE*/() async => 0;
+''');
     var f = mainUnit.topLevelVariables[0];
     expect(f.name, 'f');
     expect(f.type.toString(), '() → Future<int>');
@@ -82,8 +84,8 @@
     var mainUnit = await checkFileElement('''
 import 'dart:async';
 FutureOr<int> futureOrInt = null;
-var f = () => futureOrInt;
-var g = () async => futureOrInt;
+var f = /*info:INFERRED_TYPE_CLOSURE*/() => futureOrInt;
+var g = /*info:INFERRED_TYPE_CLOSURE*/() async => futureOrInt;
 ''');
     var futureOrInt = mainUnit.topLevelVariables[0];
     expect(futureOrInt.name, 'futureOrInt');
@@ -265,7 +267,7 @@
   var f = /*info:INFERRED_TYPE_CLOSURE*/(Object x) { return null; };
   String y = f(42);
 
-  f = /*error:INVALID_CAST_FUNCTION_EXPR, info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
+  f = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*error:INVALID_CAST_LITERAL*/'hello';
 
   foo(/*info:INFERRED_TYPE_CLOSURE,
         info:INFERRED_TYPE_CLOSURE*/(x) { return null; });
@@ -377,18 +379,18 @@
     // When a closure's return type is inferred from the expression `null`, the
     // inferred type is `dynamic`.
     var mainUnit = await checkFileElement('''
-var v = () => null;
+var v = /*info:INFERRED_TYPE_CLOSURE*/() => null;
 ''');
     var v = mainUnit.topLevelVariables[0];
-    expect(v.type.toString(), '() → dynamic');
-    expect(v.initializer.type.toString(), '() → () → dynamic');
+    expect(v.type.toString(), '() → Null');
+    expect(v.initializer.type.toString(), '() → () → Null');
   }
 
   @failingTest
   test_circularReference_viaClosures() async {
     var mainUnit = await checkFileElement('''
-var x = () => /*error:TOP_LEVEL_CYCLE*/y;
-var y = () => /*error:TOP_LEVEL_CYCLE*/x;
+var x = /*info:INFERRED_TYPE_CLOSURE*/() => /*error:TOP_LEVEL_CYCLE*/y;
+var y = /*info:INFERRED_TYPE_CLOSURE*/() => /*error:TOP_LEVEL_CYCLE*/x;
 ''');
     var x = mainUnit.topLevelVariables[0];
     var y = mainUnit.topLevelVariables[1];
@@ -401,8 +403,8 @@
   @failingTest
   test_circularReference_viaClosures_initializerTypes() async {
     var mainUnit = await checkFileElement('''
-var x = () => /*error:TOP_LEVEL_CYCLE*/y;
-var y = () => /*error:TOP_LEVEL_CYCLE*/x;
+var x = /*info:INFERRED_TYPE_CLOSURE*/() => /*error:TOP_LEVEL_CYCLE*/y;
+var y = /*info:INFERRED_TYPE_CLOSURE*/() => /*error:TOP_LEVEL_CYCLE*/x;
 ''');
     var x = mainUnit.topLevelVariables[0];
     var y = mainUnit.topLevelVariables[1];
@@ -917,7 +919,7 @@
 }
 void f([List<int> l = /*info:INFERRED_TYPE_LITERAL*/const [1]]) {}
 // We do this inference in an early task but don't preserve the infos.
-Function2<List<int>, String> g = /*pass should be info:INFERRED_TYPE_CLOSURE*/([llll = /*info:INFERRED_TYPE_LITERAL*/const [1]]) => "hello";
+Function2<List<int>, String> g = /*pass should be info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/([llll = /*info:INFERRED_TYPE_LITERAL*/const [1]]) => "hello";
 ''');
   }
 
@@ -1013,29 +1015,29 @@
 void main () {
   {
     Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
-    Function2<int, String> l1 = (int x) => "hello";
-    Function2<int, String> l2 = /*error:INVALID_ASSIGNMENT*/(String x) => "hello";
-    Function2<int, String> l3 = /*error:INVALID_ASSIGNMENT*/(int x) => 3;
+    Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => "hello";
+    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(String x) => "hello";
+    Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;
     Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;};
   }
   {
-    Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => null;
+    Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => null;
     Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello";
-    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(x) => 3;
+    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;
     Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;};
     Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/x;};
   }
   {
     Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
-    Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-    Function2<int, List<String>> l2 = /*error:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-    Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
+    Function2<int, List<String>> l1 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    Function2<int, List<String>> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    Function2<int, List<String>> l3 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
     Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
   }
   {
     Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x;
     Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1;
-    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/(x) => x;
+    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/x;
     Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/x./*error:UNDEFINED_METHOD*/substring(3);
     Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substring(3);
   }
@@ -1049,12 +1051,12 @@
   {
     T f<T>(T x) => null;
     var v1 = f;
-    v1 = /*info:INFERRED_TYPE_CLOSURE*/<S>(x) => x;
+    v1 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<S>(x) => x;
   }
   {
     List<T> f<T>(T x) => null;
     var v2 = f;
-    v2 = /*info:INFERRED_TYPE_CLOSURE*/<S>(x) => /*info:INFERRED_TYPE_LITERAL*/[x];
+    v2 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<S>(x) => /*info:INFERRED_TYPE_LITERAL*/[x];
     Iterable<int> r = v2(42);
     Iterable<String> s = v2('hello');
     Iterable<List<int>> t = v2(<int>[]);
@@ -1148,17 +1150,17 @@
     String f<S>(int x) => null;
     var v = f;
     v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => null;
-    v = <T>(int x) => "hello";
-    v = /*error:INVALID_ASSIGNMENT*/<T>(String x) => "hello";
-    v = /*error:INVALID_ASSIGNMENT*/<T>(int x) => 3;
+    v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => "hello";
+    v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/<T>(String x) => "hello";
+    v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;
     v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;};
   }
   {
     String f<S>(int x) => null;
     var v = f;
     v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => null;
-    v = /*info:INFERRED_TYPE_CLOSURE*/<T>(x) => "hello";
-    v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/<T>(x) => 3;
+    v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => "hello";
+    v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;
     v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/3;};
     v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) {return /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/x;};
   }
@@ -1166,9 +1168,9 @@
     List<String> f<S>(int x) => null;
     var v = f;
     v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => null;
-    v = <T>(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-    v = /*error:INVALID_ASSIGNMENT*/<T>(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-    v = <T>(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
+    v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/<T>(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
     v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
   }
   {
@@ -1176,13 +1178,13 @@
     String int2String<T>(int x) => null;
     String string2String<T>(String x) => null;
     var x = int2int;
-    x = /*info:INFERRED_TYPE_CLOSURE*/<T>(x) => x;
-    x = /*info:INFERRED_TYPE_CLOSURE*/<T>(x) => x+1;
+    x = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => x;
+    x = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => x+1;
     var y = int2String;
-    y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/<T>(x) => x;
+    y = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/x;
     y = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/x./*error:UNDEFINED_METHOD*/substring(3);
     var z = string2String;
-    z = /*info:INFERRED_TYPE_CLOSURE*/<T>(x) => x.substring(3);
+    z = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/<T>(x) => x.substring(3);
   }
 }
 ''');
@@ -1555,17 +1557,17 @@
 
 void main() {
   $declared f;
-  $downwards<int> t1 = f.then((_) async => await new $upwards<int>.value(3));
+  $downwards<int> t1 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async => await new $upwards<int>.value(1));
   $downwards<int> t2 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async {
-     return await new $upwards<int>.value(3);});
-  $downwards<int> t3 = f.then((_) async => 3);
+     return await new $upwards<int>.value(2);});
+  $downwards<int> t3 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async => 3);
   $downwards<int> t4 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async {
-    return 3;});
-  $downwards<int> t5 = f.then((_) => new $upwards<int>.value(3));
-  $downwards<int> t6 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) {return new $upwards<int>.value(3);});
-  $downwards<int> t7 = f.then((_) async => new $upwards<int>.value(3));
+    return 4;});
+  $downwards<int> t5 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) => new $upwards<int>.value(5));
+  $downwards<int> t6 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) {return new $upwards<int>.value(6);});
+  $downwards<int> t7 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async => new $upwards<int>.value(7));
   $downwards<int> t8 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) async {
-    return new $upwards<int>.value(3);});
+    return new $upwards<int>.value(8);});
 }
 ''';
 
@@ -1595,12 +1597,12 @@
 
 void main() {
   $declared<bool> f;
-  $downwards<int> t1 = f.then(/*info:INFERRED_TYPE_CLOSURE*/
+  $downwards<int> t1 = f.then(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/
       (x) async => x ? 2 : await new $upwards<int>.value(3));
   $downwards<int> t2 = f.then(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) async { // TODO(leafp): Why the duplicate here?
     return /*info:DOWN_CAST_COMPOSITE*/await x ? 2 : new $upwards<int>.value(3);});
-  $downwards<int> t5 = f.then(/*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
-      (x) => x ? 2 : new $upwards<int>.value(3));
+  $downwards<int> t5 = f.then(/*info:INFERRED_TYPE_CLOSURE*/
+      (x) => /*info:DOWN_CAST_COMPOSITE*/x ? 2 : new $upwards<int>.value(3));
   $downwards<int> t6 = f.then(/*info:INFERRED_TYPE_CLOSURE*/
       (x) {return /*info:DOWN_CAST_COMPOSITE*/x ? 2 : new $upwards<int>.value(3);});
 }
@@ -1626,9 +1628,9 @@
 main() {
   Future<int> f;
   Future<List<int>> b = /*info:ASSIGNMENT_CAST should be pass*/f
-      .then(/*info:INFERRED_TYPE_CLOSURE*/(x) => [])
+      .then(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => [])
       .whenComplete(/*info:INFERRED_TYPE_CLOSURE*/() {});
-  b = f.then(/*info:INFERRED_TYPE_CLOSURE*/(x) => /*info:INFERRED_TYPE_LITERAL*/[]);
+  b = f.then(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => /*info:INFERRED_TYPE_LITERAL*/[]);
 }
   ''');
   }
@@ -1638,14 +1640,13 @@
 import "dart:async";
 m1() {
   Future<int> f;
-  var x = f.then<Future<List<int>>>(/*info:INFERRED_TYPE_CLOSURE,
-                                      error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/
-                                    (x) => []);
+  var x = f.then<Future<List<int>>>(/*info:INFERRED_TYPE_CLOSURE*/
+                                    (x) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/[]);
   Future<List<int>> y = x;
 }
 m2() {
   Future<int> f;
-  var x = f.then<List<int>>(/*info:INFERRED_TYPE_CLOSURE*/(x) => /*info:INFERRED_TYPE_LITERAL*/[]);
+  var x = f.then<List<int>>(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => /*info:INFERRED_TYPE_LITERAL*/[]);
   Future<List<int>> y = x;
 }
   ''');
@@ -1663,13 +1664,13 @@
 }
 
 void main() {
-  var f = foo().then((_) => 2.3);
+  var f = foo().then(/*info:INFERRED_TYPE_CLOSURE*/(_) => 2.3);
   $downwards<int> f2 = /*error:INVALID_ASSIGNMENT*/f;
 
   // The unnecessary cast is to illustrate that we inferred <double> for
   // the generic type args, even though we had a return type context.
   $downwards<num> f3 = /*info:UNNECESSARY_CAST*/foo().then(
-      (_) => 2.3) as $upwards<double>;
+      /*info:INFERRED_TYPE_CLOSURE*/(_) => 2.3) as $upwards<double>;
 }
 $declared foo() => new $declared<int>.value(1);
     ''';
@@ -1688,7 +1689,7 @@
 main() {
   Future<int> base;
   var f = base.then(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { return x == 0; });
-  var g = base.then(/*info:INFERRED_TYPE_CLOSURE*/(x) => x == 0);
+  var g = base.then(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) => x == 0);
   Future<bool> b = f;
   b = g;
 }
@@ -1743,11 +1744,11 @@
 
 $declared f;
 // Instantiates Future<int>
-$downwards<int> t1 = f.then((_) =>
+$downwards<int> t1 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) =>
    /*info:INFERRED_TYPE_ALLOCATION*/new $upwards.value($expectedError'hi'));
 
 // Instantiates List<int>
-$downwards<List<int>> t2 = f.then((_) => /*info:INFERRED_TYPE_LITERAL*/[3]);
+$downwards<List<int>> t2 = f.then(/*info:INFERRED_TYPE_CLOSURE*/(_) => /*info:INFERRED_TYPE_LITERAL*/[3]);
 $downwards<List<int>> g2() async { return /*info:INFERRED_TYPE_LITERAL*/[3]; }
 $downwards<List<int>> g3() async {
   return /*info:INFERRED_TYPE_ALLOCATION*/new $upwards.value(
@@ -1940,13 +1941,13 @@
 void main() {
   List<int> o;
   int y = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
-  var z = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
+  var z = o.fold(0, /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
   y = /*info:DYNAMIC_CAST*/z;
 }
 void functionExpressionInvocation() {
   List<int> o;
   int y = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
-  var z = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
+  var z = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
   y = /*info:DYNAMIC_CAST*/z;
 }
 ''');
@@ -1974,7 +1975,7 @@
     await checkFileElement(r'''
 main() {
   List<String> y;
-  Iterable<String> x = y.map(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String z) => 1.0);
+  Iterable<String> x = y.map(/*info:INFERRED_TYPE_CLOSURE*/(String z) => /*error:RETURN_OF_INVALID_TYPE_FROM_CLOSURE*/1.0);
 }
   ''');
   }
@@ -2149,18 +2150,18 @@
     await checkFileElement('''
 import 'dart:async';
 
-Future<int> make(int x) => (/*info:INFERRED_TYPE_ALLOCATION*/new Future(() => x));
+Future<int> make(int x) => (/*info:INFERRED_TYPE_ALLOCATION*/new Future(/*info:INFERRED_TYPE_CLOSURE*/() => x));
 
 main() {
   Iterable<Future<int>> list = <int>[1, 2, 3].map(make);
   Future<List<int>> results = Future.wait(list);
-  Future<String> results2 = results.then((List<int> list)
+  Future<String> results2 = results.then(/*info:INFERRED_TYPE_CLOSURE*/(List<int> list)
     => list.fold('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/x /*error:UNDEFINED_OPERATOR*/+ y.toString()));
 
-  Future<String> results3 = results.then((List<int> list)
-    => list.fold('', /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String x, y) => x + y.toString()));
+  Future<String> results3 = results.then(/*info:INFERRED_TYPE_CLOSURE*/(List<int> list)
+    => list.fold('', /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE, error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String x, y) => x + y.toString()));
 
-  Future<String> results4 = results.then((List<int> list)
+  Future<String> results4 = results.then(/*info:INFERRED_TYPE_CLOSURE*/(List<int> list)
     => list.fold<String>('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y.toString()));
 }
 ''');
@@ -2178,7 +2179,7 @@
 main() {
   List<Trace> traces = /*info:INFERRED_TYPE_LITERAL*/[];
   var longest = traces.map(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(trace) {
-    return trace.frames.map(/*info:INFERRED_TYPE_CLOSURE*/(frame) => frame.location.length)
+    return trace.frames.map(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(frame) => frame.location.length)
         .fold(0, math.max);
   }).fold(0, math.max);
 }
@@ -2193,7 +2194,7 @@
 T generic<T>(a(T _), b(T _)) => null;
 
 main() {
-  var v = generic((F f) => null, (G g) => null);
+  var v = generic(/*info:INFERRED_TYPE_CLOSURE*/(F f) => null, /*info:INFERRED_TYPE_CLOSURE*/(G g) => null);
 }
 ''');
     var v = findLocalVariable(unit, 'v');
@@ -2207,7 +2208,7 @@
 
 T generic<T>(a(T _), b(T _)) => null;
 
-var v = generic((F f) => null, (G g) => null);
+var v = generic(/*info:INFERRED_TYPE_CLOSURE*/(F f) => null, /*info:INFERRED_TYPE_CLOSURE*/(G g) => null);
 ''');
     var v = mainUnit.topLevelVariables[0];
     expect(v.type.toString(), '(num) → List<int>');
@@ -2761,8 +2762,8 @@
     // Regression test for https://github.com/dart-lang/sdk/issues/26414
     var unit = await checkFile(r'''
 main() {
-  f0() => 42;
-  f1() async => 42;
+  f0 /*info:INFERRED_TYPE_CLOSURE*/() => 42;
+  f1 /*info:INFERRED_TYPE_CLOSURE*/() async => 42;
 
   f2 /*info:INFERRED_TYPE_CLOSURE*/() { return 42; }
   f3 /*info:INFERRED_TYPE_CLOSURE*/() async { return 42; }
@@ -2771,9 +2772,9 @@
 
   num f6() => 42;
 
-  f7() => f7();
-  f8() => /*error:REFERENCED_BEFORE_DECLARATION*/f9();
-  f9() => f5();
+  f7 /*info:INFERRED_TYPE_CLOSURE*/() => f7();
+  f8 /*info:INFERRED_TYPE_CLOSURE*/() => /*error:REFERENCED_BEFORE_DECLARATION*/f9();
+  f9 /*info:INFERRED_TYPE_CLOSURE*/() => f5();
 }
 ''');
     expect(findLocalFunction(unit, 'f0').type.toString(), '() → int');
@@ -3068,7 +3069,8 @@
   test_inferredType_viaClosure_multipleLevelsOfNesting() async {
     var mainUnit = await checkFileElement('''
 class C {
-  static final f = (bool b) => (int i) => /*info:INFERRED_TYPE_LITERAL*/{i: b};
+  static final f = /*info:INFERRED_TYPE_CLOSURE*/(bool b) =>
+      /*info:INFERRED_TYPE_CLOSURE*/(int i) => /*info:INFERRED_TYPE_LITERAL*/{i: b};
 }
 ''');
     var f = mainUnit.getType('C').fields[0];
@@ -3078,7 +3080,7 @@
   test_inferredType_viaClosure_typeDependsOnArgs() async {
     var mainUnit = await checkFileElement('''
 class C {
-  static final f = (bool b) => b;
+  static final f = /*info:INFERRED_TYPE_CLOSURE*/(bool b) => b;
 }
 ''');
     var f = mainUnit.getType('C').fields[0];
@@ -3088,7 +3090,7 @@
   test_inferredType_viaClosure_typeIndependentOfArgs_field() async {
     var mainUnit = await checkFileElement('''
 class C {
-  static final f = (bool b) => 1;
+  static final f = /*info:INFERRED_TYPE_CLOSURE*/(bool b) => 1;
 }
 ''');
     var f = mainUnit.getType('C').fields[0];
@@ -3096,7 +3098,9 @@
   }
 
   test_inferredType_viaClosure_typeIndependentOfArgs_topLevel() async {
-    var mainUnit = await checkFileElement('final f = (bool b) => 1;');
+    var mainUnit = await checkFileElement('''
+final f = /*info:INFERRED_TYPE_CLOSURE*/(bool b) => 1;
+''');
     var f = mainUnit.topLevelVariables[0];
     expect(f.type.toString(), '(bool) → int');
   }
@@ -3596,7 +3600,7 @@
 
 void foo() {
   List myList = getListOfString();
-  myList.map((type) => 42);
+  myList.map(/*info:INFERRED_TYPE_CLOSURE*/(type) => 42);
 }
 
 void bar() {
@@ -3606,7 +3610,7 @@
   } catch (_) {
     return;
   }
-  /*info:DYNAMIC_INVOKE*/list.map((value) => '$value');
+  /*info:DYNAMIC_INVOKE*/list.map(/*info:INFERRED_TYPE_CLOSURE*/(value) => '$value');
 }
   ''');
   }
@@ -3823,10 +3827,10 @@
 void foo(int f(Object _)) {}
 
 main() {
-  var f = (Object x) => null;
-  String y = /*info:DYNAMIC_CAST*/f(42);
+  var f = /*info:INFERRED_TYPE_CLOSURE*/(Object x) => null;
+  String y = f(42);
 
-  f = /*info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
+  f = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*error:INVALID_CAST_LITERAL*/'hello';
 
   var g = null;
   g = 'hello';
@@ -3835,8 +3839,8 @@
   h = 'hello';
   (/*info:DYNAMIC_INVOKE*/h.foo());
 
-  foo(/*info:INFERRED_TYPE_CLOSURE*/(x) => null);
-  foo(/*info:INFERRED_TYPE_CLOSURE*/(x) => throw "not implemented");
+  foo(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => null);
+  foo(/*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => throw "not implemented");
 }
 ''');
   }
@@ -3994,7 +3998,7 @@
     // Regression test for https://github.com/dart-lang/sdk/issues/26962
     var unit = await checkFile('''
 main() {
-  var v = ((x) => 1.0)(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
+  var v = (/*info:INFERRED_TYPE_CLOSURE*/(x) => 1.0)(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
 }
 ''');
     var v = findLocalVariable(unit, 'v');
@@ -4345,6 +4349,12 @@
   @override
   bool get hasExtraTaskModelPass => false;
 
+  @failingTest
+  @override
+  test_bottom_inClosure() async {
+    await super.test_bottom_inClosure();
+  }
+
   @override
   test_circularReference_viaClosures() async {
     await super.test_circularReference_viaClosures();
@@ -4363,16 +4373,6 @@
 
   @failingTest
   @override
-  test_listLiteralsCanInferNull_topLevel() =>
-      super.test_listLiteralsCanInferNull_topLevel();
-
-  @failingTest
-  @override
-  test_mapLiteralsCanInferNull_topLevel() =>
-      super.test_mapLiteralsCanInferNull_topLevel();
-
-  @failingTest
-  @override
   test_unsafeBlockClosureInference_functionCall_explicitDynamicParam_viaExpr2() async {
     await super
         .test_unsafeBlockClosureInference_functionCall_explicitDynamicParam_viaExpr2();
diff --git a/pkg/analyzer/test/src/task/strong/test_all.dart b/pkg/analyzer/test/src/task/strong/test_all.dart
index 28393b8..982d879 100644
--- a/pkg/analyzer/test/src/task/strong/test_all.dart
+++ b/pkg/analyzer/test/src/task/strong/test_all.dart
@@ -5,12 +5,14 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'checker_test.dart' as checker_test;
+import 'dart2_inference_test.dart' as dart2_inference_test;
 import 'inferred_type_test.dart' as inferred_type_test;
 import 'non_null_checker_test.dart' as non_null_checker_test;
 
 main() {
   defineReflectiveSuite(() {
     checker_test.main();
+    dart2_inference_test.main();
     inferred_type_test.main();
     non_null_checker_test.main();
   }, name: 'strong');
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index 72c71cd..c65881c 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -74,7 +74,6 @@
     }
     Source source = resolutionMap.elementDeclaredByCompilationUnit(unit).source;
     fail('No class named $className in $source');
-    return null;
   }
 
   /**
@@ -94,7 +93,6 @@
       }
     }
     fail('No constructor named $constructorName in $className');
-    return null;
   }
 
   /**
@@ -116,7 +114,6 @@
       }
     }
     fail('No field named $fieldName in $className');
-    return null;
   }
 
   /**
@@ -144,7 +141,6 @@
       }
     }
     fail('No method named $methodName in $className');
-    return null;
   }
 
   /**
@@ -185,7 +181,6 @@
       }
     }
     fail('No toplevel function named $functionName found');
-    return null;
   }
 
   /**
@@ -207,7 +202,6 @@
       }
     }
     fail('No toplevel variable named $variableName found');
-    return null;
   }
 
   /**
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 5a966ec..9155d58 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -161,16 +161,6 @@
   }
 
   @override
-  void addWarning(Message message, int charOffset, int length) {
-    // Ignore warnings.
-  }
-
-  @override
-  void addNit(Message message, int charOffset) {
-    // Ignore warnings.
-  }
-
-  @override
   void beginMetadata(Token token) {
     inMetadata = true;
   }
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 103d93f..9f298d5 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -643,7 +643,7 @@
       PerformanceLog log = new PerformanceLog(null);
       AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log);
 
-      bool enableKernelDriver = options.previewDart2;
+      bool enableKernelDriver = options.useCFE;
       file_system.Folder kernelPlatformBinariesFolder;
       if (enableKernelDriver && options.dartSdkPlatformBinariesPath != null) {
         kernelPlatformBinariesFolder =
@@ -873,7 +873,7 @@
     contextOptions.hint = !options.disableHints;
     contextOptions.generateImplicitErrors = options.showPackageWarnings;
     contextOptions.generateSdkErrors = options.showSdkWarnings;
-    if (options.previewDart2) {
+    if (options.useCFE) {
       contextOptions.useFastaParser = true;
     }
 
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 1ab9c64..cfa64ec 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -113,7 +113,10 @@
   /// (Or null if not enabled.)
   final String perfReport;
 
-  /// Whether to enable the Dart 2.0 Front End.
+  /// Whether to enable the Dart 2.0 Common Front End.
+  final bool useCFE;
+
+  /// Whether to enable the Dart 2.0 Preview.
   final bool previewDart2;
 
   /// Batch mode (for unit testing)
@@ -187,6 +190,7 @@
         log = args['log'],
         machineFormat = args['format'] == 'machine',
         perfReport = args['x-perf-report'],
+        useCFE = args['use-cfe'],
         previewDart2 = args['preview-dart-2'],
         batchMode = args['batch'],
         showPackageWarnings = args['show-package-warnings'] ||
@@ -514,8 +518,13 @@
           allowMultiple: true,
           splitCommas: false,
           hide: hide)
+      ..addFlag('use-cfe',
+          help: 'Enable the Dart 2.0 Common Front End implementation.',
+          defaultsTo: false,
+          negatable: false,
+          hide: hide)
       ..addFlag('preview-dart-2',
-          help: 'Enable the Dart 2.0 Front End implementation.',
+          help: 'Enable the Dart 2.0 preview.',
           defaultsTo: false,
           negatable: false,
           hide: hide);
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 42230ab..cd90779 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -31,10 +31,13 @@
     defineReflectiveTests(BuildModeTest);
     defineReflectiveTests(ExitCodesTest);
     defineReflectiveTests(ExitCodesTest_PreviewDart2);
+    defineReflectiveTests(ExitCodesTest_UseCFE);
     defineReflectiveTests(LinterTest);
     defineReflectiveTests(LinterTest_PreviewDart2);
+    defineReflectiveTests(LinterTest_UseCFE);
     defineReflectiveTests(OptionsTest);
     defineReflectiveTests(OptionsTest_PreviewDart2);
+    defineReflectiveTests(OptionsTest_UseCFE);
   }, name: 'Driver');
 }
 
@@ -52,6 +55,8 @@
 
   bool get usePreviewDart2 => false;
 
+  bool get useCFE => false;
+
   /// Start a driver for the given [source], optionally providing additional
   /// [args] and an [options] file path. The value of [options] defaults to an
   /// empty options file to avoid unwanted configuration from an otherwise
@@ -70,6 +75,9 @@
     if (usePreviewDart2) {
       cmd.insert(0, '--preview-dart-2');
     }
+    if (useCFE) {
+      cmd.insert(0, '--use-cfe');
+    }
     await driver.start(cmd);
   }
 
@@ -611,6 +619,19 @@
     // TODO(devoncarew): This test times out when used with @failingTest.
     return new Future.error('failing test');
   }
+}
+
+@reflectiveTest
+class ExitCodesTest_UseCFE extends ExitCodesTest {
+  @override
+  bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_fatalErrors() {
+    // TODO(devoncarew): This test times out when used with @failingTest.
+    return new Future.error('failing test');
+  }
 
   @override
   @failingTest
@@ -725,6 +746,12 @@
 }
 
 @reflectiveTest
+class LinterTest_UseCFE extends LinterTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class OptionsTest extends BaseTest {
   String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
 
@@ -788,10 +815,16 @@
     expect(outSink.toString(), contains('Avoid empty else statements'));
   }
 
-  @failingTest
   test_previewDart2() async {
     await drive('data/options_tests_project/test_file.dart',
         args: ['--preview-dart-2']);
+    expect(driver.context.analysisOptions.useFastaParser, isFalse);
+  }
+
+  @failingTest
+  test_useCFE() async {
+    await drive('data/options_tests_project/test_file.dart',
+        args: ['--use-cfe']);
     expect(driver.context.analysisOptions.useFastaParser, isTrue);
   }
 
@@ -835,6 +868,12 @@
 class OptionsTest_PreviewDart2 extends OptionsTest {
   @override
   bool get usePreviewDart2 => true;
+}
+
+@reflectiveTest
+class OptionsTest_UseCFE extends OptionsTest {
+  @override
+  bool get useCFE => true;
 
   @override
   @failingTest
@@ -856,6 +895,10 @@
   @failingTest
   test_withFlags_overrideFatalWarning() =>
       super.test_withFlags_overrideFatalWarning();
+
+  @override
+  @failingTest
+  test_previewDart2() => super.test_previewDart2();
 }
 
 class TestSource implements Source {
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index acfac62..71a1673 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -75,6 +75,7 @@
         expect(options.warningsAreFatal, isFalse);
         expect(options.strongMode, isFalse);
         expect(options.lintsAreFatal, isFalse);
+        expect(options.useCFE, isFalse);
         expect(options.previewDart2, isFalse);
       });
 
@@ -251,7 +252,13 @@
         });
       }
 
-      test('preview FE', () {
+      test('--use-cfe', () {
+        CommandLineOptions options =
+            CommandLineOptions.parse(['--use-cfe', 'foo.dart']);
+        expect(options.useCFE, isTrue);
+      });
+
+      test('--preview-dart-2', () {
         CommandLineOptions options =
             CommandLineOptions.parse(['--preview-dart-2', 'foo.dart']);
         expect(options.previewDart2, isTrue);
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index f8fa098..d585eec 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -1243,7 +1243,7 @@
     // TODO(johnniwinther): Find out why this can be null.
     if (type == null) return;
     if (outermostElement.isClassMember &&
-        rtiNeed.classNeedsRti(outermostElement.enclosingClass)) {
+        rtiNeed.classNeedsTypeArguments(outermostElement.enclosingClass)) {
       if (outermostElement.isConstructor || outermostElement.isField) {
         analyzeTypeVariables(type);
       } else if (outermostElement.isInstanceMember) {
@@ -1435,7 +1435,7 @@
       closures.add(node);
       nodeMappingCache[node] = closureData = globalizeClosure(node, closure);
       needsRti = compiler.options.enableTypeAssertions ||
-          rtiNeed.localFunctionNeedsRti(closure);
+          rtiNeed.localFunctionNeedsSignature(closure);
     } else {
       outermostElement = element;
       ThisLocal thisElement = null;
@@ -1448,7 +1448,7 @@
       memberMappingCache[element.declaration] = closureData;
       if (element is MethodElement) {
         needsRti = compiler.options.enableTypeAssertions ||
-            rtiNeed.methodNeedsRti(element);
+            rtiNeed.methodNeedsSignature(element);
       }
     }
     if (closureData.callMethod != null) {
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 7cbc7e7..95d84b7 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -17,6 +17,7 @@
   static const String disableNativeLiveTypeAnalysis =
       '--disable-native-live-type-analysis';
   static const String disableTypeInference = '--disable-type-inference';
+  static const String disableRtiOptimization = '--disable-rti-optimization';
   static const String dumpInfo = '--dump-info';
   static const String enableAssertMessage = '--assert-message';
   static const String enableCheckedMode = '--enable-checked-mode';
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index 817f22f..521bdd6 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -268,10 +268,6 @@
               ErroneousElement element = elementType.element;
               reporter.reportErrorMessage(
                   node, element.messageKind, element.messageArguments);
-            } else {
-              assert(elementType is MethodTypeVariableType);
-              // Used to `reportErrorMessage` here, but with Dart 2 upcoming
-              // very soon we do not emit this message any more.
             }
           } else {
             // We need to throw an exception at runtime.
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index b016904..a17e4b3 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -390,6 +390,7 @@
     new OptionHandler('--categories=.*', setCategories),
     new OptionHandler(Flags.disableInlining, implyCompilation),
     new OptionHandler(Flags.disableTypeInference, implyCompilation),
+    new OptionHandler(Flags.disableRtiOptimization, implyCompilation),
     new OptionHandler(Flags.terse, passThrough),
     new OptionHandler('--deferred-map=.+', implyCompilation),
     new OptionHandler(Flags.dumpInfo, implyCompilation),
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index c19fefb..7d1be45 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -404,6 +404,8 @@
   TYPE_ARGUMENT_COUNT_MISMATCH,
   TYPE_VARIABLE_IN_CONSTANT,
   TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
+  TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED,
+  TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC,
   TYPEDEF_FORMAL_WITH_DEFAULT,
   UNARY_OPERATOR_BAD_ARITY,
   UNBOUND_LABEL,
@@ -1198,6 +1200,43 @@
 """
           ]),
 
+      MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED: const MessageTemplate(
+          MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED,
+          "Method type variables do not have a runtime value.",
+          howToFix: "Try using the upper bound of the type variable, "
+              "or refactor the code to avoid needing this runtime value.",
+          examples: const [
+            """
+// Method type variables are not reified, so they cannot be returned.
+Type f<T>() => T;
+
+main() => f<int>();
+""",
+            """
+// Method type variables are not reified, so they cannot be tested dynamically.
+bool f<T>(Object o) => o is T;
+
+main() => f<int>(42);
+"""
+          ]),
+
+      MessageKind.TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC:
+          const MessageTemplate(
+              MessageKind.TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC,
+              "Method type variables are treated as `dynamic` in `as` "
+              "expressions.",
+              howToFix:
+                  "Try using the upper bound of the type variable, or check "
+                  "that the blind success of the test does not introduce bugs.",
+              examples: const [
+            """
+// Method type variables are not reified, so they cannot be tested dynamically.
+bool f<T>(Object o) => o as T;
+
+main() => f<int>(42);
+"""
+          ]),
+
       MessageKind.INVALID_TYPE_VARIABLE_BOUND: const MessageTemplate(
           MessageKind.INVALID_TYPE_VARIABLE_BOUND,
           "'#{typeArgument}' is not a subtype of bound '#{bound}' for "
diff --git a/pkg/compiler/lib/src/elements/resolution_types.dart b/pkg/compiler/lib/src/elements/resolution_types.dart
index 8df0252..0ebbe2fb 100644
--- a/pkg/compiler/lib/src/elements/resolution_types.dart
+++ b/pkg/compiler/lib/src/elements/resolution_types.dart
@@ -394,7 +394,7 @@
             typeArguments.length == element.typeVariables.length;
       }
       return true;
-    },
+    }(),
         failedAt(
             element,
             'Invalid type argument count on ${element.thisType}. '
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 35bb230..b69771e 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -2506,7 +2506,7 @@
       js.Node target = targets[node];
       return target is js.Loop ||
           (target is js.LabeledStatement && target.body is js.Loop);
-    });
+    }());
     return false;
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index b2b61c8..48f1182 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -368,7 +368,9 @@
     return result;
   }
 
-  RuntimeTypesImpl _rti;
+  RuntimeTypesChecksBuilder _rtiChecksBuilder;
+
+  RuntimeTypesSubstitutions _rtiSubstitutions;
 
   RuntimeTypesEncoder _rtiEncoder;
 
@@ -532,22 +534,22 @@
 
   RuntimeTypesChecksBuilder get rtiChecksBuilder {
     assert(
-        _rti != null,
+        _rtiChecksBuilder != null,
         failedAt(NO_LOCATION_SPANNABLE,
             "RuntimeTypesChecksBuilder has not been created yet."));
     assert(
-        !_rti.rtiChecksBuilderClosed,
+        !_rtiChecksBuilder.rtiChecksBuilderClosed,
         failedAt(NO_LOCATION_SPANNABLE,
             "RuntimeTypesChecks has already been computed."));
-    return _rti;
+    return _rtiChecksBuilder;
   }
 
   RuntimeTypesSubstitutions get rtiSubstitutions {
     assert(
-        _rti != null,
+        _rtiSubstitutions != null,
         failedAt(NO_LOCATION_SPANNABLE,
             "RuntimeTypesSubstitutions has not been created yet."));
-    return _rti;
+    return _rtiSubstitutions;
   }
 
   RuntimeTypesEncoder get rtiEncoder {
@@ -595,9 +597,11 @@
       ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder) {
     return compiler.options.enableMinification
         ? compiler.options.useFrequencyNamer
-            ? new FrequencyBasedNamer(closedWorld, codegenWorldBuilder)
-            : new MinifyNamer(closedWorld, codegenWorldBuilder)
-        : new Namer(closedWorld, codegenWorldBuilder);
+            ? new FrequencyBasedNamer(
+                closedWorld, codegenWorldBuilder, compiler.options)
+            : new MinifyNamer(
+                closedWorld, codegenWorldBuilder, compiler.options)
+        : new Namer(closedWorld, codegenWorldBuilder, compiler.options);
   }
 
   void validateInterceptorImplementsAllObjectMethods(
@@ -979,8 +983,18 @@
     // TODO(johnniwinther): Share the impact object created in
     // createCodegenEnqueuer.
     BackendImpacts impacts = new BackendImpacts(closedWorld.commonElements);
-    _rti = new RuntimeTypesImpl(
-        closedWorld.elementEnvironment, closedWorld.dartTypes);
+    if (compiler.options.disableRtiOptimization) {
+      _rtiSubstitutions = new TrivialRuntimeTypesSubstitutions(
+          closedWorld.elementEnvironment, closedWorld.dartTypes);
+      _rtiChecksBuilder =
+          new TrivialRuntimeTypesChecksBuilder(closedWorld, _rtiSubstitutions);
+    } else {
+      RuntimeTypesImpl runtimeTypesImpl = new RuntimeTypesImpl(
+          closedWorld.elementEnvironment, closedWorld.dartTypes);
+      _rtiChecksBuilder = runtimeTypesImpl;
+      _rtiSubstitutions = runtimeTypesImpl;
+    }
+
     _codegenImpactTransformer = new CodegenImpactTransformer(
         compiler.options,
         closedWorld.elementEnvironment,
diff --git a/pkg/compiler/lib/src/js_backend/codegen_listener.dart b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
index a5a2ac3..dd98494 100644
--- a/pkg/compiler/lib/src/js_backend/codegen_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
@@ -55,7 +55,7 @@
     impactBuilder
         .addImpact(_impacts.memberClosure.createImpact(_elementEnvironment));
     FunctionType type = _elementEnvironment.getFunctionType(element);
-    if (type.containsTypeVariables && _rtiNeed.methodNeedsRti(element)) {
+    if (type.containsTypeVariables && _rtiNeed.methodNeedsSignature(element)) {
       impactBuilder.addImpact(_registerComputeSignature());
     }
     return impactBuilder;
@@ -231,7 +231,7 @@
       ClassEntity cls = member.enclosingClass;
       if (member.name == Identifiers.call &&
           _elementEnvironment.isGenericClass(cls) &&
-          _rtiNeed.methodNeedsRti(member)) {
+          _rtiNeed.methodNeedsSignature(member)) {
         worldImpact.addImpact(_registerComputeSignature());
       }
     }
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index d52f2f0..1ca83e4 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -341,7 +341,7 @@
       InterfaceType type, jsAst.Expression value) {
     if (type is InterfaceType &&
         !type.treatAsRaw &&
-        _rtiNeed.classNeedsRti(type.element)) {
+        _rtiNeed.classNeedsTypeArguments(type.element)) {
       return new jsAst.Call(
           getHelperProperty(_commonElements.setRuntimeTypeInfo),
           [value, _reifiedTypeArguments(type)]);
diff --git a/pkg/compiler/lib/src/js_backend/frequency_namer.dart b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
index 854405a..511bb03 100644
--- a/pkg/compiler/lib/src/js_backend/frequency_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
@@ -28,9 +28,9 @@
   jsAst.Name get staticsPropertyName =>
       _staticsPropertyName ??= getFreshName(instanceScope, 'static');
 
-  FrequencyBasedNamer(
-      ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder)
-      : super(closedWorld, codegenWorldBuilder) {
+  FrequencyBasedNamer(ClosedWorld closedWorld,
+      CodegenWorldBuilder codegenWorldBuilder, CompilerOptions options)
+      : super(closedWorld, codegenWorldBuilder, options) {
     fieldRegistry = new _FieldNamingRegistry(this);
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 8dbb47f..887befd 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -292,15 +292,15 @@
     if (!type.isInterfaceType) return;
     InterfaceType interfaceType = type;
     // If [argument] has type variables or is a type variable, this method
-    // registers a RTI dependency between the class where the type variable is
-    // defined (that is the enclosing class of the current element being
-    // resolved) and the class of [type]. If the class of [type] requires RTI,
-    // then the class of the type variable does too.
-    ClassEntity contextClass = DartTypes.getClassContext(interfaceType);
-    if (contextClass != null) {
-      _rtiNeedBuilder.registerRtiDependency(
-          interfaceType.element, contextClass);
-    }
+    // registers a RTI dependency between the entity that introduced the type
+    // variable and the class of [type]. If the class of [type] requires type
+    // arguments at runtime, then the entity that introduced the type variable
+    // does too.
+    interfaceType.forEachTypeVariable((TypeVariableType typeVariable) {
+      Entity typeDeclaration = typeVariable.element.typeDeclaration;
+      _rtiNeedBuilder.registerTypeArgumentDependency(
+          interfaceType.element, typeDeclaration);
+    });
   }
 
   // TODO(johnniwinther): Maybe split this into [onAssertType] and [onTestType].
@@ -428,11 +428,11 @@
     for (StaticUse staticUse in impact.staticUses) {
       if (staticUse.kind == StaticUseKind.CALL_METHOD) {
         FunctionEntity callMethod = staticUse.element;
-        if (_rtiNeed.methodNeedsRti(callMethod)) {
+        if (_rtiNeed.methodNeedsSignature(callMethod)) {
           _impacts.computeSignature
               .registerImpact(transformed, _elementEnvironment);
         } else if (callMethod is SynthesizedCallMethodElementX) {
-          if (_rtiNeed.localFunctionNeedsRti(callMethod.expression)) {
+          if (_rtiNeed.localFunctionNeedsSignature(callMethod.expression)) {
             _impacts.computeSignature
                 .registerImpact(transformed, _elementEnvironment);
           }
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 517e3bb..6be7b26 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -12,8 +12,9 @@
         _MinifiedFieldNamer,
         _MinifyConstructorBodyNamer,
         _MinifiedOneShotInterceptorNamer {
-  MinifyNamer(ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder)
-      : super(closedWorld, codegenWorldBuilder) {
+  MinifyNamer(ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder,
+      CompilerOptions options)
+      : super(closedWorld, codegenWorldBuilder, options) {
     reserveBackendNames();
     fieldRegistry = new _FieldNamingRegistry(this);
   }
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 492087c..7d2e799 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -6,6 +6,7 @@
 
 import 'dart:collection' show HashMap;
 
+import 'package:front_end/src/fasta/scanner/characters.dart';
 import 'package:js_runtime/shared/embedded_names.dart' show JsGetName;
 
 import '../closure.dart';
@@ -29,10 +30,10 @@
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
 import '../js_model/closure.dart';
+import '../options.dart';
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector, SelectorKind;
 import '../universe/world_builder.dart' show CodegenWorldBuilder;
-import 'package:front_end/src/fasta/scanner/characters.dart';
 import '../util/util.dart';
 import '../world.dart' show ClosedWorld;
 import 'backend.dart';
@@ -501,6 +502,7 @@
 
   final ClosedWorld _closedWorld;
   final CodegenWorldBuilder _codegenWorldBuilder;
+  final CompilerOptions _options;
 
   RuntimeTypesEncoder _rtiEncoder;
   RuntimeTypesEncoder get rtiEncoder {
@@ -571,7 +573,7 @@
   final Map<LibraryEntity, String> _libraryKeys =
       new HashMap<LibraryEntity, String>();
 
-  Namer(this._closedWorld, this._codegenWorldBuilder) {
+  Namer(this._closedWorld, this._codegenWorldBuilder, this._options) {
     _literalAsyncPrefix = new StringBackedName(asyncPrefix);
     _literalGetterPrefix = new StringBackedName(getterPrefix);
     _literalSetterPrefix = new StringBackedName(setterPrefix);
@@ -811,7 +813,11 @@
   /// This is used for the annotated names of `call`, and for the proposed name
   /// for other instance methods.
   List<String> callSuffixForStructure(CallStructure callStructure) {
-    List<String> suffixes = ['${callStructure.argumentCount}'];
+    List<String> suffixes = [];
+    if (_options.strongMode) {
+      suffixes.add('${callStructure.typeArgumentCount}');
+    }
+    suffixes.add('${callStructure.argumentCount}');
     suffixes.addAll(callStructure.getOrderedNamedArguments());
     return suffixes;
   }
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index 7e65a2f..d47916d 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -375,7 +375,7 @@
       _registerBackendImpact(impactBuilder, _impacts.mapClass);
       // For map literals, the dependency between the implementation class
       // and [Map] is not visible, so we have to add it manually.
-      _rtiNeedBuilder.registerRtiDependency(
+      _rtiNeedBuilder.registerTypeArgumentDependency(
           _commonElements.mapLiteralClass, cls);
     } else if (cls == _commonElements.boundClosureClass) {
       _registerBackendImpact(impactBuilder, _impacts.boundClosureClass);
@@ -469,6 +469,12 @@
     if (_options.enableTypeAssertions) {
       _registerBackendImpact(impactBuilder, _impacts.enableTypeAssertions);
     }
+    if (_options.disableRtiOptimization) {
+      // When RTI optimization is disabled we always need all RTI helpers, so
+      // register these here.
+      _registerBackendImpact(impactBuilder, _impacts.computeSignature);
+      _registerBackendImpact(impactBuilder, _impacts.getRuntimeTypeArgument);
+    }
 
     if (JavaScriptBackend.TRACE_CALLS) {
       _registerBackendImpact(impactBuilder, _impacts.traceHelper);
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index dcadac5..6fd95da 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -36,22 +36,97 @@
 
 /// Interface for the classes and methods that need runtime types.
 abstract class RuntimeTypesNeed {
-  bool classNeedsRti(ClassEntity cls);
+  /// Returns `true` if [cls] needs type arguments at runtime type.
+  ///
+  /// This is for instance the case for generic classes used in a type test:
+  ///
+  ///   class C<T> {}
+  ///   main() {
+  ///     new C<int>() is C<int>;
+  ///     new C<String>() is C<String>;
+  ///   }
+  ///
+  bool classNeedsTypeArguments(ClassEntity cls);
+
+  /// Returns `true` if [method] needs type arguments at runtime type.
+  ///
+  /// This is for instance the case for generic methods that uses type tests:
+  ///
+  ///   method<T>(T t) => t is T;
+  ///   main() {
+  ///     method<int>(0);
+  ///     method<String>('');
+  ///   }
+  ///
+  bool methodNeedsTypeArguments(FunctionEntity method);
+
   bool classNeedsRtiField(ClassEntity cls);
-  bool methodNeedsRti(FunctionEntity function);
-  bool methodNeedsGenericRti(FunctionEntity function);
+
+  /// Returns `true` if a signature is needed for [method].
+  ///
+  /// A signature is a runtime method type descriptor function that creates
+  /// a runtime representation of the type of the method.
+  ///
+  /// This is for instance needed for instance methods of generic classes that
+  /// are torn off and whose type therefore potentially is used in a type test:
+  ///
+  ///     class C<T> {
+  ///       method(T t) {}
+  ///     }
+  ///     main() {
+  ///       new C<int>().method is void Function(int);
+  ///       new C<String>().method is void Function(String);
+  ///     }
+  ///
+  /// Since type of the method depends on the type argument of its enclosing
+  /// class, the type of the method is a JavaScript function like:
+  ///
+  ///    signature: function (T) {
+  ///      return {'func': true, params: [T]};
+  ///    }
+  ///
+  bool methodNeedsSignature(FunctionEntity method);
+
+  /// Returns `true` if a signature is needed for the call-method created for
+  /// [localFunction].
+  ///
+  /// See [methodNeedsSignature] for more information on what a signature is
+  /// and when it is needed.
   // TODO(redemption): Remove this when the old frontend is deleted.
-  bool localFunctionNeedsRti(Local function);
+  bool localFunctionNeedsSignature(Local localFunction);
+
   bool classUsesTypeVariableExpression(ClassEntity cls);
 }
 
+class TrivialRuntimeTypesNeed implements RuntimeTypesNeed {
+  const TrivialRuntimeTypesNeed();
+
+  @override
+  bool classNeedsTypeArguments(ClassEntity cls) => true;
+
+  @override
+  bool classUsesTypeVariableExpression(ClassEntity cls) => true;
+
+  @override
+  bool localFunctionNeedsSignature(Local localFunction) => true;
+
+  @override
+  bool methodNeedsSignature(FunctionEntity method) => true;
+
+  @override
+  bool classNeedsRtiField(ClassEntity cls) => true;
+
+  @override
+  bool methodNeedsTypeArguments(FunctionEntity method) => true;
+}
+
 /// Interface for computing classes and methods that need runtime types.
 abstract class RuntimeTypesNeedBuilder {
   /// Registers that [cls] contains a type variable literal.
   void registerClassUsingTypeVariableExpression(ClassEntity cls);
 
-  /// Registers that if [element] needs reified runtime type information then so
-  /// does [dependency].
+  /// Registers that if [element] needs type arguments at runtime then so does
+  /// [dependency].
   ///
   /// For instance:
   ///
@@ -61,9 +136,19 @@
   ///     class B<T> {}
   ///     main() => new A<String>().m() is B<int>;
   ///
-  /// Here `A` need reified runtime type information because `B` needs it in
-  /// order to generate the check against `B<int>`.
-  void registerRtiDependency(ClassEntity element, ClassEntity dependency);
+  /// Here `A` need type arguments at runtime because `B` needs it in order to
+  /// generate the check against `B<int>`.
+  ///
+  /// This can also involve generic methods:
+  ///
+  ///    class A<T> {}
+  ///    method<T>() => new A<T>();
+  ///    main() => method<int>() is A<int>();
+  ///
+  /// Here `method` need type arguments at runtime because `A` needs it in order
+  /// to generate the check against `A<int>`.
+  ///
+  void registerTypeArgumentDependency(Entity element, Entity dependency);
 
   /// Computes the [RuntimeTypesNeed] for the data registered with this builder.
   RuntimeTypesNeed computeRuntimeTypesNeed(
@@ -71,6 +156,23 @@
       {bool enableTypeAssertions});
 }
 
+class TrivialRuntimeTypesNeedBuilder implements RuntimeTypesNeedBuilder {
+  const TrivialRuntimeTypesNeedBuilder();
+
+  @override
+  void registerClassUsingTypeVariableExpression(ClassEntity cls) {}
+
+  @override
+  RuntimeTypesNeed computeRuntimeTypesNeed(
+      ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
+      {bool enableTypeAssertions}) {
+    return const TrivialRuntimeTypesNeed();
+  }
+
+  @override
+  void registerTypeArgumentDependency(Entity element, Entity dependency) {}
+}
+
 /// Interface for the needed runtime type checks.
 abstract class RuntimeTypesChecks {
   /// Returns the required runtime type checks.
@@ -84,6 +186,23 @@
   Set<ClassEntity> getRequiredArgumentClasses();
 }
 
+class TrivialTypesChecks implements RuntimeTypesChecks {
+  final TypeChecks _typeChecks;
+  final Set<ClassEntity> _allClasses;
+
+  TrivialTypesChecks(this._typeChecks)
+      : _allClasses = _typeChecks.classes.toSet();
+
+  @override
+  TypeChecks get requiredChecks => _typeChecks;
+
+  @override
+  Set<ClassEntity> getRequiredArgumentClasses() => _allClasses;
+
+  @override
+  Set<ClassEntity> getReferencedClasses(FunctionType type) => _allClasses;
+}
+
 /// Interface for computing the needed runtime type checks.
 abstract class RuntimeTypesChecksBuilder {
   void registerTypeVariableBoundsSubtypeCheck(
@@ -99,6 +218,185 @@
   /// This function must be called after all is-checks have been registered.
   void registerImplicitChecks(Set<InterfaceType> instantiatedTypes,
       Iterable<ClassEntity> classesUsingChecks, Set<DartType> implicitIsChecks);
+
+  bool get rtiChecksBuilderClosed;
+}
+
+class TrivialRuntimeTypesChecksBuilder implements RuntimeTypesChecksBuilder {
+  final ClosedWorld _closedWorld;
+  final TrivialRuntimeTypesSubstitutions _substitutions;
+  bool rtiChecksBuilderClosed = false;
+
+  TrivialRuntimeTypesChecksBuilder(this._closedWorld, this._substitutions);
+
+  ElementEnvironment get _elementEnvironment => _closedWorld.elementEnvironment;
+
+  @override
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType typeArgument, DartType bound) {}
+
+  @override
+  void registerImplicitChecks(
+      Set<InterfaceType> instantiatedTypes,
+      Iterable<ClassEntity> classesUsingChecks,
+      Set<DartType> implicitIsChecks) {}
+
+  @override
+  RuntimeTypesChecks computeRequiredChecks(
+      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
+    Set<ClassEntity> classes = _closedWorld
+        .getClassSet(_closedWorld.commonElements.objectClass)
+        .subtypes()
+        .toSet();
+    rtiChecksBuilderClosed = true;
+    TypeChecks typeChecks = _substitutions._requiredChecks = _substitutions
+        ._computeChecks(/*collector.*/ classes, /*collector.*/ classes);
+    return new TrivialTypesChecks(typeChecks);
+  }
+}
+
+class ClassCollector extends ArgumentCollector {
+  final ElementEnvironment _elementEnvironment;
+
+  ClassCollector(this._elementEnvironment);
+
+  void addClass(ClassEntity cls) {
+    if (classes.add(cls)) {
+      _elementEnvironment.forEachSupertype(cls, (InterfaceType type) {
+        collect(type, isTypeArgument: true);
+      });
+    }
+  }
+}
+
+abstract class RuntimeTypesSubstitutionsMixin
+    implements RuntimeTypesSubstitutions {
+  ElementEnvironment get _elementEnvironment;
+  DartTypes get _types;
+  TypeChecks get _requiredChecks;
+
+  TypeChecks _computeChecks(
+      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+    // Run through the combination of instantiated and checked
+    // arguments and record all combination where the element of a checked
+    // argument is a superclass of the element of an instantiated type.
+    TypeCheckMapping result = new TypeCheckMapping();
+    for (ClassEntity element in instantiated) {
+      if (checked.contains(element)) {
+        result.add(element, element, null);
+      }
+      // Find all supertypes of [element] in [checkedArguments] and add checks
+      // and precompute the substitutions for them.
+      for (InterfaceType supertype in _types.getSupertypes(element)) {
+        ClassEntity superelement = supertype.element;
+        if (checked.contains(superelement)) {
+          Substitution substitution =
+              computeSubstitution(element, superelement);
+          result.add(element, superelement, substitution);
+        }
+      }
+    }
+    return result;
+  }
+
+  @override
+  Set<ClassEntity> getClassesUsedInSubstitutions(TypeChecks checks) {
+    Set<ClassEntity> instantiated = new Set<ClassEntity>();
+    ArgumentCollector collector = new ArgumentCollector();
+    for (ClassEntity target in checks.classes) {
+      instantiated.add(target);
+      for (TypeCheck check in checks[target]) {
+        Substitution substitution = check.substitution;
+        if (substitution != null) {
+          collector.collectAll(substitution.arguments);
+        }
+      }
+    }
+    return instantiated..addAll(collector.classes);
+
+    // TODO(sra): This computation misses substitutions for reading type
+    // parameters.
+  }
+
+  // TODO(karlklose): maybe precompute this value and store it in typeChecks?
+  @override
+  bool isTrivialSubstitution(ClassEntity cls, ClassEntity check) {
+    if (cls.isClosure) {
+      // TODO(karlklose): handle closures.
+      return true;
+    }
+
+    // If there are no type variables or the type is the same, we do not need
+    // a substitution.
+    if (!_elementEnvironment.isGenericClass(check) || cls == check) {
+      return true;
+    }
+
+    InterfaceType originalType = _elementEnvironment.getThisType(cls);
+    InterfaceType type = _types.asInstanceOf(originalType, check);
+    // [type] is not a subtype of [check]. we do not generate a check and do not
+    // need a substitution.
+    if (type == null) return true;
+
+    // Run through both lists of type variables and check if the type variables
+    // are identical at each position. If they are not, we need to calculate a
+    // substitution function.
+    List<DartType> variables = originalType.typeArguments;
+    List<DartType> arguments = type.typeArguments;
+    if (variables.length != arguments.length) {
+      return false;
+    }
+    for (int index = 0; index < variables.length; index++) {
+      if (variables[index] != arguments[index]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @override
+  Substitution getSubstitution(ClassEntity cls, ClassEntity other) {
+    // Look for a precomputed check.
+    for (TypeCheck check in _requiredChecks[cls]) {
+      if (check.cls == other) {
+        return check.substitution;
+      }
+    }
+    // There is no precomputed check for this pair (because the check is not
+    // done on type arguments only.  Compute a new substitution.
+    return computeSubstitution(cls, other);
+  }
+
+  Substitution computeSubstitution(ClassEntity cls, ClassEntity check,
+      {bool alwaysGenerateFunction: false}) {
+    if (isTrivialSubstitution(cls, check)) return null;
+
+    // Unnamed mixin application classes do not need substitutions, because they
+    // are never instantiated and their checks are overwritten by the class that
+    // they are mixed into.
+    InterfaceType type = _elementEnvironment.getThisType(cls);
+    InterfaceType target = _types.asInstanceOf(type, check);
+    List<DartType> typeVariables = type.typeArguments;
+    if (typeVariables.isEmpty && !alwaysGenerateFunction) {
+      return new Substitution.list(target.typeArguments);
+    } else {
+      return new Substitution.function(target.typeArguments, typeVariables);
+    }
+  }
+}
+
+class TrivialRuntimeTypesSubstitutions extends RuntimeTypesSubstitutionsMixin {
+  final ElementEnvironment _elementEnvironment;
+  final DartTypes _types;
+  TypeChecks _requiredChecks;
+
+  TrivialRuntimeTypesSubstitutions(this._elementEnvironment, this._types);
+
+  @override
+  TypeChecks computeChecks(
+      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+    return _requiredChecks;
+  }
 }
 
 /// Interface for computing substitutions need for runtime type checks.
@@ -219,9 +517,11 @@
 class RuntimeTypesNeedImpl implements RuntimeTypesNeed {
   final ElementEnvironment _elementEnvironment;
   final BackendUsage _backendUsage;
-  final Set<ClassEntity> classesNeedingRti;
-  final Set<FunctionEntity> methodsNeedingRti;
-  final Set<Local> localFunctionsNeedingRti;
+  final Set<ClassEntity> classesNeedingTypeArguments;
+  final Set<FunctionEntity> methodsNeedingSignature;
+  final Set<FunctionEntity> methodsNeedingTypeArguments;
+  final Set<Local> localFunctionsNeedingSignature;
+  final Set<Local> localFunctionsNeedingTypeArguments;
 
   /// The set of classes that use one of their type variables as expressions
   /// to get the runtime type.
@@ -230,41 +530,49 @@
   RuntimeTypesNeedImpl(
       this._elementEnvironment,
       this._backendUsage,
-      this.classesNeedingRti,
-      this.methodsNeedingRti,
-      this.localFunctionsNeedingRti,
+      this.classesNeedingTypeArguments,
+      this.methodsNeedingSignature,
+      this.methodsNeedingTypeArguments,
+      this.localFunctionsNeedingSignature,
+      this.localFunctionsNeedingTypeArguments,
       this.classesUsingTypeVariableExpression);
 
   bool checkClass(covariant ClassEntity cls) => true;
 
-  bool classNeedsRti(ClassEntity cls) {
+  bool classNeedsTypeArguments(ClassEntity cls) {
     assert(checkClass(cls));
     if (_backendUsage.isRuntimeTypeUsed) return true;
-    return classesNeedingRti.contains(cls);
+    return classesNeedingTypeArguments.contains(cls);
   }
 
   bool classNeedsRtiField(ClassEntity cls) {
     assert(checkClass(cls));
     if (!_elementEnvironment.isGenericClass(cls)) return false;
     if (_backendUsage.isRuntimeTypeUsed) return true;
-    return classesNeedingRti.contains(cls);
+    return classesNeedingTypeArguments.contains(cls);
   }
 
-  bool methodNeedsRti(FunctionEntity function) {
-    return methodsNeedingRti.contains(function) ||
-        _backendUsage.isRuntimeTypeUsed;
+  bool methodNeedsSignature(FunctionEntity function) {
+    return _backendUsage.isRuntimeTypeUsed ||
+        methodsNeedingSignature.contains(function);
   }
 
   // TODO(johnniwinther): Optimize to only include generic methods that really
   // need the RTI.
-  bool methodNeedsGenericRti(FunctionEntity function) => true;
+  bool methodNeedsTypeArguments(FunctionEntity function) {
+    if (function.parameterStructure.typeParameters == 0) return false;
+    if (_backendUsage.isRuntimeTypeUsed) return true;
+    // TODO(johnniwinther): Include instance members in analysis.
+    if (function.isInstanceMember) return true;
+    return methodsNeedingTypeArguments.contains(function);
+  }
 
-  bool localFunctionNeedsRti(Local function) {
-    if (localFunctionsNeedingRti == null) {
+  bool localFunctionNeedsSignature(Local function) {
+    if (localFunctionsNeedingSignature == null) {
       // [localFunctionNeedsRti] is only used by the old frontend.
       throw new UnsupportedError('RuntimeTypesNeed.localFunctionsNeedingRti');
     }
-    return localFunctionsNeedingRti.contains(function) ||
+    return localFunctionsNeedingSignature.contains(function) ||
         _backendUsage.isRuntimeTypeUsed;
   }
 
@@ -280,14 +588,18 @@
       BackendUsage backendUsage,
       Set<ClassEntity> classesNeedingRti,
       Set<FunctionEntity> methodsNeedingRti,
+      Set<FunctionEntity> methodsNeedingGenericRti,
       Set<Local> localFunctionsNeedingRti,
+      Set<Local> localFunctionsNeedingTypeArguments,
       Set<ClassEntity> classesUsingTypeVariableExpression)
       : super(
             elementEnvironment,
             backendUsage,
             classesNeedingRti,
             methodsNeedingRti,
+            methodsNeedingGenericRti,
             localFunctionsNeedingRti,
+            localFunctionsNeedingTypeArguments,
             classesUsingTypeVariableExpression);
 
   bool checkClass(ClassElement cls) => cls.isDeclaration;
@@ -297,8 +609,8 @@
     implements RuntimeTypesNeedBuilder {
   final ElementEnvironment _elementEnvironment;
 
-  final Map<ClassEntity, Set<ClassEntity>> rtiDependencies =
-      <ClassEntity, Set<ClassEntity>>{};
+  final Map<Entity, Set<Entity>> typeArgumentDependencies =
+      <Entity, Set<Entity>>{};
 
   final Set<ClassEntity> classesUsingTypeVariableExpression =
       new Set<ClassEntity>();
@@ -320,11 +632,10 @@
   }
 
   @override
-  void registerRtiDependency(ClassEntity element, ClassEntity dependency) {
-    // We're not dealing with typedef for now.
+  void registerTypeArgumentDependency(Entity element, Entity dependency) {
     assert(element != null);
-    Set<ClassEntity> classes =
-        rtiDependencies.putIfAbsent(element, () => new Set<ClassEntity>());
+    Set<Entity> classes =
+        typeArgumentDependencies.putIfAbsent(element, () => new Set<Entity>());
     classes.add(dependency);
   }
 
@@ -333,30 +644,39 @@
       ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
       {bool enableTypeAssertions}) {
     isChecks = new Set<DartType>.from(resolutionWorldBuilder.isChecks);
-    Set<ClassEntity> classesNeedingRti = new Set<ClassEntity>();
-    Set<FunctionEntity> methodsNeedingRti = new Set<FunctionEntity>();
-    Set<Local> localFunctionsNeedingRti = new Set<Local>();
+    Set<ClassEntity> classesNeedingTypeArguments = new Set<ClassEntity>();
+    Set<FunctionEntity> methodsNeedingSignature = new Set<FunctionEntity>();
+    Set<FunctionEntity> methodsNeedingTypeArguments = new Set<FunctionEntity>();
+    Set<Local> localFunctionsNeedingSignature = new Set<Local>();
+    Set<Local> localFunctionsNeedingTypeArguments = new Set<Local>();
 
-    // Find the classes that need runtime type information. Such
+    // Find the classes that need type arguments at runtime. Such
     // classes are:
-    // (1) used in a is check with type variables,
+    // (1) used in an is check with type variables,
     // (2) dependencies of classes in (1),
     // (3) subclasses of (2) and (3).
-    void potentiallyAddForRti(ClassEntity cls) {
-      assert(checkClass(cls));
-      if (!_elementEnvironment.isGenericClass(cls)) return;
-      if (classesNeedingRti.contains(cls)) return;
-      classesNeedingRti.add(cls);
+    void potentiallyNeedTypeArguments(Entity entity) {
+      if (entity is ClassEntity) {
+        ClassEntity cls = entity;
+        assert(checkClass(cls));
+        if (!_elementEnvironment.isGenericClass(cls)) return;
+        if (classesNeedingTypeArguments.contains(cls)) return;
+        classesNeedingTypeArguments.add(cls);
 
-      // TODO(ngeoffray): This should use subclasses, not subtypes.
-      closedWorld.forEachStrictSubtypeOf(cls, (ClassEntity sub) {
-        potentiallyAddForRti(sub);
-      });
+        // TODO(ngeoffray): This should use subclasses, not subtypes.
+        closedWorld.forEachStrictSubtypeOf(cls, (ClassEntity sub) {
+          potentiallyNeedTypeArguments(sub);
+        });
+      } else if (entity is FunctionEntity) {
+        methodsNeedingTypeArguments.add(entity);
+      } else {
+        localFunctionsNeedingTypeArguments.add(entity);
+      }
 
-      Set<ClassEntity> dependencies = rtiDependencies[cls];
+      Set<Entity> dependencies = typeArgumentDependencies[entity];
       if (dependencies != null) {
-        dependencies.forEach((ClassEntity other) {
-          potentiallyAddForRti(other);
+        dependencies.forEach((Entity other) {
+          potentiallyNeedTypeArguments(other);
         });
       }
     }
@@ -384,7 +704,8 @@
     // TODO(karlklose): make this dependency visible from code.
     if (closedWorld.commonElements.jsArrayClass != null) {
       ClassEntity listClass = closedWorld.commonElements.listClass;
-      registerRtiDependency(closedWorld.commonElements.jsArrayClass, listClass);
+      registerTypeArgumentDependency(
+          closedWorld.commonElements.jsArrayClass, listClass);
     }
 
     // Check local functions and closurized members.
@@ -395,7 +716,7 @@
             (potentialSubtypeOf == null ||
                 closedWorld.dartTypes
                     .isPotentialSubtype(functionType, potentialSubtypeOf))) {
-          potentiallyAddForRti(contextClass);
+          potentiallyNeedTypeArguments(contextClass);
           return true;
         }
         return false;
@@ -405,13 +726,13 @@
           in resolutionWorldBuilder.localFunctionsWithFreeTypeVariables) {
         if (checkFunctionType(
             _elementEnvironment.getLocalFunctionType(function))) {
-          localFunctionsNeedingRti.add(function);
+          localFunctionsNeedingSignature.add(function);
         }
       }
       for (FunctionEntity function
           in resolutionWorldBuilder.closurizedMembersWithFreeTypeVariables) {
         if (checkFunctionType(_elementEnvironment.getFunctionType(function))) {
-          methodsNeedingRti.add(function);
+          methodsNeedingSignature.add(function);
         }
       }
     }
@@ -424,16 +745,15 @@
         if (type.isInterfaceType) {
           InterfaceType itf = type;
           if (!itf.treatAsRaw) {
-            potentiallyAddForRti(itf.element);
+            potentiallyNeedTypeArguments(itf.element);
           }
         } else {
-          ClassEntity contextClass = DartTypes.getClassContext(type);
-          if (contextClass != null) {
-            // [type] contains type variables (declared in [contextClass]) if
-            // [contextClass] is non-null. This handles checks against type
-            // variables and function types containing type variables.
-            potentiallyAddForRti(contextClass);
-          }
+          type.forEachTypeVariable((TypeVariableType typeVariable) {
+            // This handles checks against type variables and function types
+            // containing type variables.
+            Entity typeDeclaration = typeVariable.element.typeDeclaration;
+            potentiallyNeedTypeArguments(typeDeclaration);
+          });
           if (type.isFunctionType) {
             checkClosures(potentialSubtypeOf: type);
           }
@@ -450,30 +770,36 @@
 
     // Add the classes that need RTI because they use a type variable as
     // expression.
-    classesUsingTypeVariableExpression.forEach(potentiallyAddForRti);
+    classesUsingTypeVariableExpression.forEach(potentiallyNeedTypeArguments);
 
     return _createRuntimeTypesNeed(
         _elementEnvironment,
         closedWorld.backendUsage,
-        classesNeedingRti,
-        methodsNeedingRti,
-        localFunctionsNeedingRti,
+        classesNeedingTypeArguments,
+        methodsNeedingSignature,
+        methodsNeedingTypeArguments,
+        localFunctionsNeedingSignature,
+        localFunctionsNeedingTypeArguments,
         classesUsingTypeVariableExpression);
   }
 
   RuntimeTypesNeed _createRuntimeTypesNeed(
       ElementEnvironment elementEnvironment,
       BackendUsage backendUsage,
-      Set<ClassEntity> classesNeedingRti,
-      Set<FunctionEntity> methodsNeedingRti,
-      Set<Local> localFunctionsNeedingRti,
+      Set<ClassEntity> classesNeedingTypeArguments,
+      Set<FunctionEntity> methodsNeedingSignature,
+      Set<FunctionEntity> methodsNeedingTypeArguments,
+      Set<Local> localFunctionsNeedingSignature,
+      Set<Local> localFunctionsNeedingTypeArguments,
       Set<ClassEntity> classesUsingTypeVariableExpression) {
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
         backendUsage,
-        classesNeedingRti,
-        methodsNeedingRti,
-        localFunctionsNeedingRti,
+        classesNeedingTypeArguments,
+        methodsNeedingSignature,
+        methodsNeedingTypeArguments,
+        localFunctionsNeedingSignature,
+        localFunctionsNeedingTypeArguments,
         classesUsingTypeVariableExpression);
   }
 }
@@ -489,16 +815,20 @@
   RuntimeTypesNeed _createRuntimeTypesNeed(
       ElementEnvironment elementEnvironment,
       BackendUsage backendUsage,
-      Set<ClassEntity> classesNeedingRti,
-      Set<FunctionEntity> methodsNeedingRti,
-      Set<Local> localFunctionsNeedingRti,
+      Set<ClassEntity> classesNeedingTypeArguments,
+      Set<FunctionEntity> methodsNeedingSignature,
+      Set<FunctionEntity> methodsNeedingTypeArguments,
+      Set<Local> localFunctionsNeedingSignature,
+      Set<Local> localFunctionsNeedingTypeArguments,
       Set<ClassEntity> classesUsingTypeVariableExpression) {
     return new _ResolutionRuntimeTypesNeed(
         _elementEnvironment,
         backendUsage,
-        classesNeedingRti,
-        methodsNeedingRti,
-        localFunctionsNeedingRti,
+        classesNeedingTypeArguments,
+        methodsNeedingSignature,
+        methodsNeedingTypeArguments,
+        localFunctionsNeedingSignature,
+        localFunctionsNeedingTypeArguments,
         classesUsingTypeVariableExpression);
   }
 }
@@ -530,7 +860,8 @@
 }
 
 class RuntimeTypesImpl extends _RuntimeTypesBase
-    implements RuntimeTypesChecksBuilder, RuntimeTypesSubstitutions {
+    with RuntimeTypesSubstitutionsMixin
+    implements RuntimeTypesChecksBuilder {
   final ElementEnvironment _elementEnvironment;
 
   // The set of type arguments tested against type variable bounds.
@@ -544,6 +875,9 @@
 
   RuntimeTypesImpl(this._elementEnvironment, DartTypes types) : super(types);
 
+  @override
+  TypeChecks get _requiredChecks => cachedRequiredChecks;
+
   Set<ClassEntity> directlyInstantiatedArguments;
   Set<ClassEntity> allInstantiatedArguments;
   Set<ClassEntity> checkedArguments;
@@ -555,31 +889,6 @@
     checkedBounds.add(bound);
   }
 
-  @override
-  TypeChecks computeChecks(
-      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
-    // Run through the combination of instantiated and checked
-    // arguments and record all combination where the element of a checked
-    // argument is a superclass of the element of an instantiated type.
-    TypeCheckMapping result = new TypeCheckMapping();
-    for (ClassEntity element in instantiated) {
-      if (checked.contains(element)) {
-        result.add(element, element, null);
-      }
-      // Find all supertypes of [element] in [checkedArguments] and add checks
-      // and precompute the substitutions for them.
-      for (InterfaceType supertype in _types.getSupertypes(element)) {
-        ClassEntity superelement = supertype.element;
-        if (checked.contains(superelement)) {
-          Substitution substitution =
-              computeSubstitution(element, superelement);
-          result.add(element, superelement, substitution);
-        }
-      }
-    }
-    return result;
-  }
-
   RuntimeTypesChecks computeRequiredChecks(
       CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
     Set<DartType> isChecks =
@@ -706,88 +1015,9 @@
   }
 
   @override
-  Set<ClassEntity> getClassesUsedInSubstitutions(TypeChecks checks) {
-    Set<ClassEntity> instantiated = new Set<ClassEntity>();
-    ArgumentCollector collector = new ArgumentCollector();
-    for (ClassEntity target in checks.classes) {
-      instantiated.add(target);
-      for (TypeCheck check in checks[target]) {
-        Substitution substitution = check.substitution;
-        if (substitution != null) {
-          collector.collectAll(substitution.arguments);
-        }
-      }
-    }
-    return instantiated..addAll(collector.classes);
-
-    // TODO(sra): This computation misses substitutions for reading type
-    // parameters.
-  }
-
-  // TODO(karlklose): maybe precompute this value and store it in typeChecks?
-  @override
-  bool isTrivialSubstitution(ClassEntity cls, ClassEntity check) {
-    if (cls.isClosure) {
-      // TODO(karlklose): handle closures.
-      return true;
-    }
-
-    // If there are no type variables or the type is the same, we do not need
-    // a substitution.
-    if (!_elementEnvironment.isGenericClass(check) || cls == check) {
-      return true;
-    }
-
-    InterfaceType originalType = _elementEnvironment.getThisType(cls);
-    InterfaceType type = _types.asInstanceOf(originalType, check);
-    // [type] is not a subtype of [check]. we do not generate a check and do not
-    // need a substitution.
-    if (type == null) return true;
-
-    // Run through both lists of type variables and check if the type variables
-    // are identical at each position. If they are not, we need to calculate a
-    // substitution function.
-    List<DartType> variables = originalType.typeArguments;
-    List<DartType> arguments = type.typeArguments;
-    if (variables.length != arguments.length) {
-      return false;
-    }
-    for (int index = 0; index < variables.length; index++) {
-      if (variables[index] != arguments[index]) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @override
-  Substitution getSubstitution(ClassEntity cls, ClassEntity other) {
-    // Look for a precomputed check.
-    for (TypeCheck check in cachedRequiredChecks[cls]) {
-      if (check.cls == other) {
-        return check.substitution;
-      }
-    }
-    // There is no precomputed check for this pair (because the check is not
-    // done on type arguments only.  Compute a new substitution.
-    return computeSubstitution(cls, other);
-  }
-
-  Substitution computeSubstitution(ClassEntity cls, ClassEntity check,
-      {bool alwaysGenerateFunction: false}) {
-    if (isTrivialSubstitution(cls, check)) return null;
-
-    // Unnamed mixin application classes do not need substitutions, because they
-    // are never instantiated and their checks are overwritten by the class that
-    // they are mixed into.
-    InterfaceType type = _elementEnvironment.getThisType(cls);
-    InterfaceType target = _types.asInstanceOf(type, check);
-    List<DartType> typeVariables = type.typeArguments;
-    if (typeVariables.isEmpty && !alwaysGenerateFunction) {
-      return new Substitution.list(target.typeArguments);
-    } else {
-      return new Substitution.function(target.typeArguments, typeVariables);
-    }
+  TypeChecks computeChecks(
+      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+    return _computeChecks(instantiated, checked);
   }
 }
 
@@ -1215,8 +1445,8 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     for (ClassEntity holder in classes) {
-      for (ClassEntity check in [holder]) {
-        sb.write('${holder.name}.' '${check.name}, ');
+      for (TypeCheck check in this[holder]) {
+        sb.write('${holder.name} <: ${check.cls.name}, ');
       }
     }
     return '[$sb]';
@@ -1226,6 +1456,10 @@
 class ArgumentCollector extends ResolutionDartTypeVisitor<dynamic, bool> {
   final Set<ClassEntity> classes = new Set<ClassEntity>();
 
+  void addClass(ClassEntity cls) {
+    classes.add(cls);
+  }
+
   collect(DartType type, {bool isTypeArgument: false}) {
     visit(type, isTypeArgument);
   }
@@ -1243,7 +1477,7 @@
   }
 
   visitInterfaceType(InterfaceType type, bool isTypeArgument) {
-    if (isTypeArgument) classes.add(type.element);
+    if (isTypeArgument) addClass(type.element);
     collectAll(type.typeArguments, isTypeArgument: true);
   }
 
@@ -1310,6 +1544,9 @@
         parameters = const <DartType>[];
 
   Substitution.function(this.arguments, this.parameters) : isFunction = true;
+
+  String toString() => 'Substitution(isFunction=$isFunction,'
+      'arguments=$arguments,parameters=$parameters)';
 }
 
 /**
@@ -1323,4 +1560,6 @@
   static int _nextHash = 0;
 
   TypeCheck(this.cls, this.substitution);
+
+  String toString() => 'TypeCheck(cls=$cls,substitution=$substitution)';
 }
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index c96a17c..4cd7014 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -851,7 +851,7 @@
     jsAst.Expression laziesAccess =
         generateEmbeddedGlobalAccess(embeddedNames.LAZIES);
 
-    return js.statement('''
+    return js.statement("""
       function init() {
         $isolatePropertiesName = Object.create(null);
         #allClasses = map();
@@ -955,7 +955,7 @@
           return Isolate;
       }
 
-      }''', {
+      }""", {
       'allClasses': allClassesAccess,
       'getTypeFromName': getTypeFromNameAccess,
       'interceptorsByTag': interceptorsByTagAccess,
@@ -1735,49 +1735,59 @@
           generateEmbeddedGlobalAccess(embeddedNames.DEFERRED_INITIALIZED)
     }));
 
-    // Write a javascript mapping from Deferred import load ids (derrived
-    // from the import prefix.) to a list of lists of uris of hunks to load,
-    // and a corresponding mapping to a list of hashes used by
-    // INITIALIZE_LOADED_HUNK and IS_HUNK_LOADED.
-    Map<String, List<jsAst.LiteralString>> deferredLibraryUris =
-        new Map<String, List<jsAst.LiteralString>>();
-    Map<String, List<_DeferredOutputUnitHash>> deferredLibraryHashes =
-        new Map<String, List<_DeferredOutputUnitHash>>();
-    compiler.deferredLoadTask.hunksToLoad
-        .forEach((String loadId, List<OutputUnit> outputUnits) {
-      List<jsAst.LiteralString> uris = new List<jsAst.LiteralString>();
-      List<_DeferredOutputUnitHash> hashes =
-          new List<_DeferredOutputUnitHash>();
-      deferredLibraryHashes[loadId] = new List<_DeferredOutputUnitHash>();
-      for (OutputUnit outputUnit in outputUnits) {
-        uris.add(js.escapedString(
-            compiler.deferredLoadTask.deferredPartFileName(outputUnit.name)));
-        hashes.add(deferredLoadHashes[outputUnit]);
+    void store(
+        jsAst.Expression map, jsAst.Expression uris, jsAst.Expression hashes) {
+      void assign(String name, jsAst.Expression value) {
+        parts.add(
+            js.statement('# = #', [generateEmbeddedGlobalAccess(name), value]));
       }
 
-      deferredLibraryUris[loadId] = uris;
-      deferredLibraryHashes[loadId] = hashes;
-    });
-
-    void emitMapping(String name, Map<String, List<jsAst.Expression>> mapping) {
-      List<jsAst.Property> properties = new List<jsAst.Property>();
-      mapping.forEach((String key, List<jsAst.Expression> values) {
-        properties.add(new jsAst.Property(
-            js.escapedString(key), new jsAst.ArrayInitializer(values)));
-      });
-      jsAst.Node initializer =
-          new jsAst.ObjectInitializer(properties, isOneLiner: true);
-
-      jsAst.Node globalName = generateEmbeddedGlobalAccess(name);
-      parts.add(js.statement("# = #", [globalName, initializer]));
+      assign(embeddedNames.DEFERRED_LIBRARY_PARTS, map);
+      assign(embeddedNames.DEFERRED_PART_URIS, uris);
+      assign(embeddedNames.DEFERRED_PART_HASHES, hashes);
     }
 
-    emitMapping(embeddedNames.DEFERRED_LIBRARY_URIS, deferredLibraryUris);
-    emitMapping(embeddedNames.DEFERRED_LIBRARY_HASHES, deferredLibraryHashes);
+    createDeferredLoadingData(
+        compiler.deferredLoadTask.hunksToLoad, deferredLoadHashes, store);
 
     return new jsAst.Block(parts);
   }
 
+  // Create data used for loading and initializing the hunks for a deferred
+  // import. There are three parts: a map from loadId to list of parts, where
+  // parts are represented as an index; an array of uris indexed by part; and an
+  // array of hashes indexed by part.
+  void createDeferredLoadingData(
+      Map<String, List<OutputUnit>> loadMap,
+      Map<OutputUnit, _DeferredOutputUnitHash> deferredLoadHashes,
+      void finish(jsAst.Expression map, jsAst.Expression uris,
+          jsAst.Expression hashes)) {
+    Map<OutputUnit, int> fragmentIndexes = <OutputUnit, int>{};
+    var uris = <jsAst.Expression>[];
+    var hashes = <jsAst.Expression>[];
+
+    List<jsAst.Property> libraryPartsMapEntries = <jsAst.Property>[];
+
+    loadMap.forEach((String loadId, List<OutputUnit> fragmentList) {
+      List<jsAst.Expression> indexes = <jsAst.Expression>[];
+      for (OutputUnit fragment in fragmentList) {
+        int index = fragmentIndexes[fragment];
+        if (index == null) {
+          index = fragmentIndexes[fragment] = fragmentIndexes.length;
+          uris.add(js.escapedString(
+              compiler.deferredLoadTask.deferredPartFileName(fragment.name)));
+          hashes.add(deferredLoadHashes[fragment]);
+        }
+        indexes.add(js.number(index));
+      }
+      libraryPartsMapEntries.add(new jsAst.Property(
+          js.string(loadId), new jsAst.ArrayInitializer(indexes)));
+    });
+
+    finish(new jsAst.ObjectInitializer(libraryPartsMapEntries),
+        new jsAst.ArrayInitializer(uris), new jsAst.ArrayInitializer(hashes));
+  }
+
   Map<OutputUnit, jsAst.Program> buildOutputAstForDeferredCode(
       Program program) {
     if (!program.isSplit) return const <OutputUnit, jsAst.Program>{};
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 4473469..c3207c7 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -319,7 +319,7 @@
   int get superclassHolderIndex =>
       (superclass == null) ? 0 : superclass.holder.index;
 
-  String toString() => 'Class(name=${name},element=$element)';
+  String toString() => 'Class(name=${name.key},element=$element)';
 }
 
 class MixinApplication extends Class {
@@ -524,7 +524,7 @@
       : super(element, name, code);
 
   String toString() {
-    return 'StubMethod(name=${name},element=${element}'
+    return 'StubMethod(name=${name.key},element=${element}'
         ',code=${js.nodeToString(code)})';
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index a296b45..db80fe3 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -6,6 +6,7 @@
 
 import '../constants/values.dart';
 import '../elements/entities.dart';
+import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
 import '../js_backend/namer.dart' show Namer;
@@ -60,13 +61,17 @@
     CallStructure callStructure = selector.callStructure;
     ParameterStructure parameterStructure = member.parameterStructure;
     int positionalArgumentCount = callStructure.positionalArgumentCount;
-    if (positionalArgumentCount == parameterStructure.totalParameters) {
+    bool needsTypeArguments =
+        callStructure.typeArgumentCount != parameterStructure.typeParameters;
+    if (positionalArgumentCount == parameterStructure.totalParameters &&
+        !needsTypeArguments) {
       assert(callStructure.isUnnamed);
       return null;
     }
     if (parameterStructure.namedParameters.isNotEmpty &&
         callStructure.namedArgumentCount ==
-            parameterStructure.namedParameters.length) {
+            parameterStructure.namedParameters.length &&
+        !needsTypeArguments) {
       // If the selector has the same number of named arguments as the element,
       // we don't need to add a stub. The call site will hit the method
       // directly.
@@ -89,7 +94,9 @@
         new List<jsAst.Parameter>(selector.argumentCount + extraArgumentCount);
     // The arguments that will be passed to the real method.
     List<jsAst.Expression> argumentsBuffer = new List<jsAst.Expression>(
-        parameterStructure.totalParameters + extraArgumentCount);
+        parameterStructure.totalParameters +
+            extraArgumentCount +
+            parameterStructure.typeParameters);
 
     int count = 0;
     if (isInterceptedMethod) {
@@ -134,6 +141,15 @@
       }
       count++;
     });
+    if (needsTypeArguments) {
+      // ignore: unused_local_variable
+      for (TypeVariableType typeVariable
+          in _closedWorld.elementEnvironment.getFunctionTypeVariables(member)) {
+        argumentsBuffer[count++] =
+            // TODO(johnniwinther): Insert the type variable bound instead.
+            _emitter.constantReference(new NullConstantValue());
+      }
+    }
 
     var body; // List or jsAst.Statement.
     if (_nativeData.hasFixedBackendName(member)) {
@@ -210,7 +226,7 @@
     // The set of selectors that apply to `member`. For example, for
     // a member `foo(x, [y])` the following selectors may apply:
     // `foo(x)`, and `foo(x, y)`.
-    Map<Selector, SelectorConstraints> selectors;
+    Map<Selector, SelectorConstraints> liveSelectors;
     // The set of selectors that apply to `member` if it's name was `call`.
     // This happens when a member is torn off. In that case calls to the
     // function use the name `call`, and we must be able to handle every
@@ -221,7 +237,7 @@
 
     // Only instance members (not static methods) need stubs.
     if (member.isInstanceMember) {
-      selectors = _codegenWorldBuilder.invocationsByName(member.name);
+      liveSelectors = _codegenWorldBuilder.invocationsByName(member.name);
     }
 
     if (canTearOff) {
@@ -230,13 +246,14 @@
     }
 
     assert(emptySelectorSet.isEmpty);
-    if (selectors == null) selectors = const <Selector, SelectorConstraints>{};
+    if (liveSelectors == null)
+      liveSelectors = const <Selector, SelectorConstraints>{};
     if (callSelectors == null)
       callSelectors = const <Selector, SelectorConstraints>{};
 
     List<ParameterStubMethod> stubs = <ParameterStubMethod>[];
 
-    if (selectors.isEmpty && callSelectors.isEmpty) {
+    if (liveSelectors.isEmpty && callSelectors.isEmpty) {
       return stubs;
     }
 
@@ -248,7 +265,7 @@
     Set<Selector> renamedCallSelectors =
         callSelectors.isEmpty ? emptySelectorSet : new Set<Selector>();
 
-    Set<Selector> untypedSelectors = new Set<Selector>();
+    Set<Selector> stubSelectors = new Set<Selector>();
 
     // Start with the callSelectors since they imply the generation of the
     // non-call version.
@@ -261,7 +278,7 @@
         continue;
       }
 
-      if (untypedSelectors.add(renamedSelector)) {
+      if (stubSelectors.add(renamedSelector)) {
         ParameterStubMethod stub =
             generateParameterStub(member, renamedSelector, selector);
         if (stub != null) {
@@ -273,14 +290,14 @@
     // Now run through the actual member selectors (eg. `foo$2(x, y)` and not
     // `call$2(x, y)`. Some of them have already been generated because of the
     // call-selectors (and they are in the renamedCallSelectors set.
-    for (Selector selector in selectors.keys) {
+    for (Selector selector in liveSelectors.keys) {
       if (renamedCallSelectors.contains(selector)) continue;
       if (!selector.appliesUnnamed(member)) continue;
-      if (!selectors[selector].applies(member, selector, _closedWorld)) {
+      if (!liveSelectors[selector].applies(member, selector, _closedWorld)) {
         continue;
       }
 
-      if (untypedSelectors.add(selector)) {
+      if (stubSelectors.add(selector)) {
         ParameterStubMethod stub =
             generateParameterStub(member, selector, null);
         if (stub != null) {
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 4a14cc2..33b9496 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -844,7 +844,8 @@
   }
 
   bool _methodNeedsStubs(FunctionEntity method) {
-    return method.parameterStructure.optionalParameters != 0;
+    return method.parameterStructure.optionalParameters != 0 ||
+        method.parameterStructure.typeParameters != 0;
   }
 
   bool _methodCanBeReflected(FunctionEntity method) {
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index 9828718..10308c1 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -312,7 +312,7 @@
       // TODO(karlklose): move the computation of these checks to
       // RuntimeTypeInformation.
       while (superclass != null) {
-        if (_rtiNeed.classNeedsRti(superclass)) {
+        if (_rtiNeed.classNeedsTypeArguments(superclass)) {
           generateSubstitution(superclass, emitNull: true);
           generated.add(superclass);
         }
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 13cfaef..0214083 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -705,7 +705,7 @@
         return method.needsTearOff || method.parameterStubs.isEmpty;
       }
       return true;
-    });
+    }());
     jsMethods[method.name] = method.code;
 
     return jsMethods;
@@ -1256,32 +1256,6 @@
 
     List<js.Property> globals = <js.Property>[];
 
-    js.ArrayInitializer fragmentUris(List<Fragment> fragments) {
-      return js.stringArray(fragments.map((Fragment fragment) =>
-          "${fragment.outputFileName}.${ModelEmitter.deferredExtension}"));
-    }
-
-    js.ArrayInitializer fragmentHashes(List<Fragment> fragments) {
-      return new js.ArrayInitializer(fragments
-          .map((fragment) => deferredLoadHashes[fragment])
-          .toList(growable: false));
-    }
-
-    List<js.Property> uris = new List<js.Property>(loadMap.length);
-    List<js.Property> hashes = new List<js.Property>(loadMap.length);
-    int count = 0;
-    loadMap.forEach((String loadId, List<Fragment> fragmentList) {
-      uris[count] =
-          new js.Property(js.string(loadId), fragmentUris(fragmentList));
-      hashes[count] =
-          new js.Property(js.string(loadId), fragmentHashes(fragmentList));
-      count++;
-    });
-
-    globals.add(new js.Property(
-        js.string(DEFERRED_LIBRARY_URIS), new js.ObjectInitializer(uris)));
-    globals.add(new js.Property(
-        js.string(DEFERRED_LIBRARY_HASHES), new js.ObjectInitializer(hashes)));
     globals.add(new js.Property(
         js.string(DEFERRED_INITIALIZED), js.js("Object.create(null)")));
 
@@ -1316,9 +1290,51 @@
     globals.add(new js.Property(
         js.string(INITIALIZE_LOADED_HUNK), initializeLoadedHunkFunction));
 
+    createDeferredLoadingData(loadMap, deferredLoadHashes,
+        (js.Expression map, js.Expression uris, js.Expression hashes) {
+      globals.add(new js.Property(js.string(DEFERRED_LIBRARY_PARTS), map));
+      globals.add(new js.Property(js.string(DEFERRED_PART_URIS), uris));
+      globals.add(new js.Property(js.string(DEFERRED_PART_HASHES), hashes));
+    });
+
     return globals;
   }
 
+  // Create data used for loading and initializing the hunks for a deferred
+  // import. There are three parts: a map from loadId to list of parts, where
+  // parts are represented as an index; an array of uris indexed by part; and an
+  // array of hashes indexed by part.
+  static void createDeferredLoadingData(
+      Map<String, List<Fragment>> loadMap,
+      Map<DeferredFragment, _DeferredFragmentHash> deferredLoadHashes,
+      void finish(
+          js.Expression map, js.Expression uris, js.Expression hashes)) {
+    Map<Fragment, int> fragmentIndexes = <Fragment, int>{};
+    List<String> fragmentUris = <String>[];
+    List<js.Expression> fragmentHashes = <js.Expression>[];
+
+    List<js.Property> libraryPartsMapEntries = <js.Property>[];
+
+    loadMap.forEach((String loadId, List<Fragment> fragmentList) {
+      List<js.Expression> indexes = <js.Expression>[];
+      for (Fragment fragment in fragmentList) {
+        int index = fragmentIndexes[fragment];
+        if (index == null) {
+          index = fragmentIndexes[fragment] = fragmentIndexes.length;
+          fragmentUris.add(
+              "${fragment.outputFileName}.${ModelEmitter.deferredExtension}");
+          fragmentHashes.add(deferredLoadHashes[fragment]);
+        }
+        indexes.add(js.number(index));
+      }
+      libraryPartsMapEntries.add(
+          new js.Property(js.string(loadId), new js.ArrayInitializer(indexes)));
+    });
+
+    finish(new js.ObjectInitializer(libraryPartsMapEntries),
+        js.stringArray(fragmentUris), new js.ArrayInitializer(fragmentHashes));
+  }
+
   /// Emits the [MANGLED_GLOBAL_NAMES] embedded global.
   ///
   /// This global maps minified names for selected classes (some important
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index 9f50a9b..86f5d3d 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -13,8 +13,9 @@
         CLASS_ID_EXTRACTOR,
         CREATE_NEW_ISOLATE,
         DEFERRED_INITIALIZED,
-        DEFERRED_LIBRARY_URIS,
-        DEFERRED_LIBRARY_HASHES,
+        DEFERRED_LIBRARY_PARTS,
+        DEFERRED_PART_URIS,
+        DEFERRED_PART_HASHES,
         GET_TYPE_FROM_NAME,
         INITIALIZE_EMPTY_INSTANCE,
         INITIALIZE_LOADED_HUNK,
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index b34cd47..4d20f75 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -202,8 +202,8 @@
         info, node.parent, localFunctionsNeedingRti, classesNeedingRti, member);
     KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(member);
     KernelClosureClassInfo closureClassInfo =
-        closedWorldBuilder.buildClosureClass(member, node, member.library,
-            boxedVariables, info, node.location, localsMap);
+        closedWorldBuilder.buildClosureClass(
+            member, node, member.library, boxedVariables, info, localsMap);
 
     // We want the original declaration where that function is used to point
     // to the correct closure class.
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 0ee5d63..55bda1b 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -265,29 +265,44 @@
         map.toBackendMemberSet(closedWorld.processedMembers);
 
     RuntimeTypesNeedImpl kernelRtiNeed = closedWorld.rtiNeed;
-    Set<ir.Node> localFunctionsNodes = new Set<ir.Node>();
+    Set<ir.Node> localFunctionsNodesNeedingSignature = new Set<ir.Node>();
     for (KLocalFunction localFunction
-        in kernelRtiNeed.localFunctionsNeedingRti) {
-      localFunctionsNodes.add(localFunction.node);
+        in kernelRtiNeed.localFunctionsNeedingSignature) {
+      localFunctionsNodesNeedingSignature.add(localFunction.node);
+    }
+    Set<ir.Node> localFunctionsNodesNeedingTypeArguments = new Set<ir.Node>();
+    for (KLocalFunction localFunction
+        in kernelRtiNeed.localFunctionsNeedingTypeArguments) {
+      localFunctionsNodesNeedingTypeArguments.add(localFunction.node);
     }
 
-    var classesNeedingRti =
-        map.toBackendClassSet(kernelRtiNeed.classesNeedingRti);
+    Set<ClassEntity> classesNeedingTypeArguments =
+        map.toBackendClassSet(kernelRtiNeed.classesNeedingTypeArguments);
     Iterable<FunctionEntity> callMethods =
         _closureConversionTask.createClosureEntities(
             this,
             map.toBackendMemberMap(closureModels, identity),
-            localFunctionsNodes,
-            classesNeedingRti);
+            localFunctionsNodesNeedingSignature,
+            classesNeedingTypeArguments);
 
-    List<FunctionEntity> callMethodsNeedingRti = <FunctionEntity>[];
-    for (ir.Node node in localFunctionsNodes) {
-      callMethodsNeedingRti
+    List<FunctionEntity> callMethodsNeedingSignature = <FunctionEntity>[];
+    for (ir.Node node in localFunctionsNodesNeedingSignature) {
+      callMethodsNeedingSignature
+          .add(_closureConversionTask.getClosureInfo(node).callMethod);
+    }
+    List<FunctionEntity> callMethodsNeedingTypeArguments = <FunctionEntity>[];
+    for (ir.Node node in localFunctionsNodesNeedingTypeArguments) {
+      callMethodsNeedingTypeArguments
           .add(_closureConversionTask.getClosureInfo(node).callMethod);
     }
 
-    RuntimeTypesNeed rtiNeed = _convertRuntimeTypesNeed(map, backendUsage,
-        kernelRtiNeed, callMethodsNeedingRti, classesNeedingRti);
+    RuntimeTypesNeed rtiNeed = _convertRuntimeTypesNeed(
+        map,
+        backendUsage,
+        kernelRtiNeed,
+        callMethodsNeedingSignature,
+        callMethodsNeedingTypeArguments,
+        classesNeedingTypeArguments);
 
     NoSuchMethodDataImpl oldNoSuchMethodData = closedWorld.noSuchMethodData;
     NoSuchMethodData noSuchMethodData = new NoSuchMethodDataImpl(
@@ -457,18 +472,24 @@
       JsToFrontendMap map,
       BackendUsage backendUsage,
       RuntimeTypesNeedImpl rtiNeed,
-      List<FunctionEntity> callMethodsNeedingRti,
-      Set<ClassEntity> classesNeedingRti) {
-    Set<FunctionEntity> methodsNeedingRti =
-        map.toBackendFunctionSet(rtiNeed.methodsNeedingRti);
-    methodsNeedingRti.addAll(callMethodsNeedingRti);
+      List<FunctionEntity> callMethodsNeedingSignature,
+      List<FunctionEntity> callMethodsNeedingTypeArguments,
+      Set<ClassEntity> classesNeedingTypeArguments) {
+    Set<FunctionEntity> methodsNeedingSignature =
+        map.toBackendFunctionSet(rtiNeed.methodsNeedingSignature);
+    methodsNeedingSignature.addAll(callMethodsNeedingSignature);
+    Set<FunctionEntity> methodsNeedingTypeArguments =
+        map.toBackendFunctionSet(rtiNeed.methodsNeedingTypeArguments);
+    methodsNeedingTypeArguments.addAll(callMethodsNeedingTypeArguments);
     Set<ClassEntity> classesUsingTypeVariableExpression =
         map.toBackendClassSet(rtiNeed.classesUsingTypeVariableExpression);
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
         backendUsage,
-        classesNeedingRti,
-        methodsNeedingRti,
+        classesNeedingTypeArguments,
+        methodsNeedingSignature,
+        methodsNeedingTypeArguments,
+        null,
         null,
         classesUsingTypeVariableExpression);
   }
@@ -481,7 +502,6 @@
       JLibrary enclosingLibrary,
       Map<Local, JRecordField> boxedVariables,
       KernelScopeInfo info,
-      ir.Location location,
       KernelToLocalsMap localsMap) {
     ClassEntity superclass = _commonElements.closureClass;
 
@@ -491,7 +511,6 @@
         enclosingLibrary,
         boxedVariables,
         info,
-        location,
         localsMap,
         new InterfaceType(superclass, const []));
 
diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
index 4e09ba2..48a03a8 100644
--- a/pkg/compiler/lib/src/js_model/locals.dart
+++ b/pkg/compiler/lib/src/js_model/locals.dart
@@ -299,9 +299,10 @@
   @override
   visitSwitchStatement(ir.SwitchStatement node) {
     node.expression.accept(this);
-    if (node.cases.isNotEmpty && !node.cases.last.isDefault) {
-      // Ensure that [node] has a corresponding target. We generate a break in
-      // case of a missing break on the last case if it isn't a default case.
+    if (node.cases.isNotEmpty) {
+      // Ensure that [node] has a corresponding target. We generate a break if:
+      //   - a switch case calls a function that always throws
+      //   - there's a missing break on the last case if it isn't a default case
       _getJumpTarget(node);
     }
     super.visitSwitchStatement(node);
diff --git a/pkg/compiler/lib/src/kernel/deferred_load.dart b/pkg/compiler/lib/src/kernel/deferred_load.dart
index f9d46c3..0117c71 100644
--- a/pkg/compiler/lib/src/kernel/deferred_load.dart
+++ b/pkg/compiler/lib/src/kernel/deferred_load.dart
@@ -145,16 +145,16 @@
       constants.add(elementMap.getConstantValue(node));
 
   @override
-  void visitIntLiteral(ir.IntLiteral literal) {}
+  void visitIntLiteral(ir.IntLiteral literal) => add(literal);
 
   @override
-  void visitDoubleLiteral(ir.DoubleLiteral literal) {}
+  void visitDoubleLiteral(ir.DoubleLiteral literal) => add(literal);
 
   @override
-  void visitBoolLiteral(ir.BoolLiteral literal) {}
+  void visitBoolLiteral(ir.BoolLiteral literal) => add(literal);
 
   @override
-  void visitStringLiteral(ir.StringLiteral literal) {}
+  void visitStringLiteral(ir.StringLiteral literal) => add(literal);
 
   @override
   void visitSymbolLiteral(ir.SymbolLiteral literal) => add(literal);
@@ -190,16 +190,6 @@
   }
 
   @override
-  void visitFunctionDeclaration(ir.FunctionDeclaration node) {
-    // Do not recurse - closures are visited separately.
-  }
-
-  @override
-  void visitFunctionExpression(ir.FunctionExpression node) {
-    // Do not recurse - closures are visited separately.
-  }
-
-  @override
   void visitTypeLiteral(ir.TypeLiteral node) {
     if (node.type is! ir.TypeParameterType) add(node);
   }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index b01eea5..c212e70 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -810,8 +810,16 @@
   Map<ir.Library, IndexedLibrary> _libraryMap = <ir.Library, IndexedLibrary>{};
   Map<ir.Class, IndexedClass> _classMap = <ir.Class, IndexedClass>{};
   Map<ir.Typedef, IndexedTypedef> _typedefMap = <ir.Typedef, IndexedTypedef>{};
-  Map<ir.TypeParameter, IndexedTypeVariable> _typeVariableMap =
-      <ir.TypeParameter, IndexedTypeVariable>{};
+
+  /// Map from [ir.TypeParameter] nodes to the corresponding
+  /// [TypeVariableEntity].
+  ///
+  /// Normally the type variables are [IndexedTypeVariable]s, but for type
+  /// parameters on local function (in the frontend) these are _not_ since
+  /// their type declaration is neither a class nor a member. In the backend,
+  /// these type parameters belong to the call-method and are therefore indexed.
+  Map<ir.TypeParameter, TypeVariableEntity> _typeVariableMap =
+      <ir.TypeParameter, TypeVariableEntity>{};
   Map<ir.Member, IndexedConstructor> _constructorMap =
       <ir.Member, IndexedConstructor>{};
   Map<ir.Procedure, IndexedFunction> _methodMap =
@@ -822,6 +830,7 @@
   Name getName(ir.Name node);
   FunctionType getFunctionType(ir.FunctionNode node);
   MemberEntity getMember(ir.Member node);
+  Entity getClosure(ir.FunctionDeclaration node);
 
   Iterable<LibraryEntity> get _libraryList {
     if (_env.length != _libraryMap.length) {
@@ -890,8 +899,7 @@
           ir.Constructor constructor = func.parent;
           ir.Class cls = constructor.enclosingClass;
           return _getTypeVariable(cls.typeParameters[index]);
-        }
-        if (func.parent is ir.Procedure) {
+        } else if (func.parent is ir.Procedure) {
           ir.Procedure procedure = func.parent;
           if (procedure.kind == ir.ProcedureKind.Factory) {
             ir.Class cls = procedure.enclosingClass;
@@ -1162,6 +1170,11 @@
     return true;
   }
 
+  DartType _getTypeVariableBound(TypeVariableEntity typeVariable) {
+    if (typeVariable is KLocalTypeVariable) return typeVariable.bound;
+    return super._getTypeVariableBound(typeVariable);
+  }
+
   @override
   void _forEachNestedClosure(
       MemberEntity member, void f(FunctionEntity closure)) {
@@ -1206,12 +1219,18 @@
   }
 
   @override
+  Entity getClosure(ir.FunctionDeclaration node) {
+    return getLocalFunction(node);
+  }
+
+  @override
   Local getLocalFunction(ir.TreeNode node) {
     assert(
         node is ir.FunctionDeclaration || node is ir.FunctionExpression,
         failedAt(
             CURRENT_ELEMENT_SPANNABLE, 'Invalid local function node: $node'));
-    return _localFunctionMap.putIfAbsent(node, () {
+    KLocalFunction localFunction = _localFunctionMap[node];
+    if (localFunction == null) {
       MemberEntity memberContext;
       Entity executableContext;
       ir.TreeNode parent = node.parent;
@@ -1230,16 +1249,25 @@
         parent = parent.parent;
       }
       String name;
-      FunctionType functionType;
+      ir.FunctionNode function;
       if (node is ir.FunctionDeclaration) {
         name = node.variable.name;
-        functionType = getFunctionType(node.function);
+        function = node.function;
       } else if (node is ir.FunctionExpression) {
-        functionType = getFunctionType(node.function);
+        function = node.function;
       }
-      return new KLocalFunction(
-          name, memberContext, executableContext, functionType, node);
-    });
+      localFunction = _localFunctionMap[node] =
+          new KLocalFunction(name, memberContext, executableContext, node);
+      int index = 0;
+      for (ir.TypeParameter typeParameter in function.typeParameters) {
+        KLocalTypeVariable typeVariable = _typeVariableMap[typeParameter] =
+            new KLocalTypeVariable(localFunction, typeParameter.name, index);
+        typeVariable.bound = getDartType(typeParameter.bound);
+        index++;
+      }
+      localFunction.functionType = getFunctionType(function);
+    }
+    return localFunction;
   }
 
   bool _implementsFunction(IndexedClass cls) {
@@ -2045,9 +2073,14 @@
     return _backend._members.getEntity(member.memberIndex);
   }
 
-  TypeVariableEntity toBackendTypeVariable(
-      covariant IndexedTypeVariable typeVariable) {
-    return _backend._typeVariables.getEntity(typeVariable.typeVariableIndex);
+  TypeVariableEntity toBackendTypeVariable(TypeVariableEntity typeVariable) {
+    if (typeVariable is KLocalTypeVariable) {
+      failedAt(
+          typeVariable, "Local function type variables are not supported.");
+    }
+    IndexedTypeVariable indexedTypeVariable = typeVariable;
+    return _backend._typeVariables
+        .getEntity(indexedTypeVariable.typeVariableIndex);
   }
 }
 
@@ -2133,9 +2166,11 @@
       if (oldTypeVariable.typeDeclaration is ClassEntity) {
         IndexedClass cls = oldTypeVariable.typeDeclaration;
         newTypeDeclaration = _classes.getEntity(cls.classIndex);
-      } else {
+      } else if (oldTypeVariable.typeDeclaration is MemberEntity) {
         IndexedMember member = oldTypeVariable.typeDeclaration;
         newTypeDeclaration = _members.getEntity(member.memberIndex);
+      } else {
+        assert(oldTypeVariable.typeDeclaration is Local);
       }
       IndexedTypeVariable newTypeVariable = createTypeVariable(
           newTypeDeclaration, oldTypeVariable.name, oldTypeVariable.index);
@@ -2147,6 +2182,11 @@
   }
 
   @override
+  Entity getClosure(ir.FunctionDeclaration node) {
+    throw new UnsupportedError('JsKernelToElementMap.getClosure');
+  }
+
+  @override
   void _forEachNestedClosure(
       MemberEntity member, void f(FunctionEntity closure)) {
     assert(checkFamily(member));
@@ -2358,7 +2398,6 @@
       JLibrary enclosingLibrary,
       Map<Local, JRecordField> recordFieldsVisibleInScope,
       KernelScopeInfo info,
-      ir.Location location,
       KernelToLocalsMap localsMap,
       InterfaceType supertype) {
     InterfaceType memberThisType = member.enclosingClass != null
@@ -2418,6 +2457,13 @@
     _nestedClosureMap
         .putIfAbsent(member, () => <FunctionEntity>[])
         .add(callMethod);
+    int index = 0;
+    for (ir.TypeParameter typeParameter in node.typeParameters) {
+      _typeVariableMap[typeParameter] = _typeVariables.register(
+          createTypeVariable(callMethod, typeParameter.name, index),
+          new TypeVariableData(typeParameter));
+      index++;
+    }
     _members.register<IndexedFunction, FunctionData>(
         callMethod,
         new ClosureFunctionData(
diff --git a/pkg/compiler/lib/src/kernel/kelements.dart b/pkg/compiler/lib/src/kernel/kelements.dart
index 6f14b6e..3b18fbc 100644
--- a/pkg/compiler/lib/src/kernel/kelements.dart
+++ b/pkg/compiler/lib/src/kernel/kelements.dart
@@ -278,12 +278,24 @@
   final String name;
   final MemberEntity memberContext;
   final Entity executableContext;
-  final FunctionType functionType;
   final ir.Node node;
+  FunctionType functionType;
 
-  KLocalFunction(this.name, this.memberContext, this.executableContext,
-      this.functionType, this.node);
+  KLocalFunction(
+      this.name, this.memberContext, this.executableContext, this.node);
 
   String toString() => '${kElementPrefix}local_function'
       '(${memberContext.name}.${name ?? '<anonymous>'})';
 }
+
+class KLocalTypeVariable implements TypeVariableEntity {
+  final Entity typeDeclaration;
+  final String name;
+  final int index;
+  DartType bound;
+
+  KLocalTypeVariable(this.typeDeclaration, this.name, this.index);
+
+  String toString() =>
+      '${kElementPrefix}local_type_variable(${typeDeclaration.name}.$name)';
+}
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index 825c81f..2146eba 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -134,8 +134,10 @@
   }
 
   RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() {
-    return _runtimeTypesNeedBuilder ??=
-        new RuntimeTypesNeedBuilderImpl(elementEnvironment, _elementMap.types);
+    return _runtimeTypesNeedBuilder ??= _options.disableRtiOptimization
+        ? const TrivialRuntimeTypesNeedBuilder()
+        : new RuntimeTypesNeedBuilderImpl(
+            elementEnvironment, _elementMap.types);
   }
 
   RuntimeTypesNeedBuilder get runtimeTypesNeedBuilderForTesting =>
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 73650f6..26c7d71 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -128,6 +128,9 @@
   /// Whether to disable global type inference.
   final bool disableTypeInference;
 
+  /// Whether to disable optimization for need runtime type information.
+  final bool disableRtiOptimization;
+
   /// Whether to emit a .json file with a summary of the information used by the
   /// compiler during optimization. This includes resolution details,
   /// dependencies between elements, results of type inference, and the output
@@ -303,6 +306,8 @@
             _extractOptionalCsvOption(options, Flags.showPackageWarnings),
         disableInlining: _hasOption(options, Flags.disableInlining),
         disableTypeInference: _hasOption(options, Flags.disableTypeInference),
+        disableRtiOptimization:
+            _hasOption(options, Flags.disableRtiOptimization),
         dumpInfo: _hasOption(options, Flags.dumpInfo),
         enableExperimentalMirrors:
             _hasOption(options, Flags.enableExperimentalMirrors),
@@ -374,6 +379,7 @@
       List<String> shownPackageWarnings: null,
       bool disableInlining: false,
       bool disableTypeInference: false,
+      bool disableRtiOptimization: false,
       bool dumpInfo: false,
       bool enableAssertMessage: true,
       bool enableExperimentalMirrors: false,
@@ -454,6 +460,7 @@
         shownPackageWarnings: shownPackageWarnings,
         disableInlining: disableInlining,
         disableTypeInference: disableTypeInference,
+        disableRtiOptimization: disableRtiOptimization,
         dumpInfo: dumpInfo,
         enableAssertMessage: enableAssertMessage,
         enableExperimentalMirrors: enableExperimentalMirrors,
@@ -508,6 +515,7 @@
       List<String> shownPackageWarnings: null,
       this.disableInlining: false,
       this.disableTypeInference: false,
+      this.disableRtiOptimization: false,
       this.dumpInfo: false,
       this.enableAssertMessage: true,
       this.enableExperimentalMirrors: false,
@@ -568,6 +576,7 @@
       List<String> shownPackageWarnings,
       disableInlining,
       disableTypeInference,
+      disableRtiOptimization,
       dumpInfo,
       enableAssertMessage,
       enableExperimentalMirrors,
@@ -630,6 +639,8 @@
         disableInlining: disableInlining ?? options.disableInlining,
         disableTypeInference:
             disableTypeInference ?? options.disableTypeInference,
+        disableRtiOptimization:
+            disableRtiOptimization ?? options.disableRtiOptimization,
         dumpInfo: dumpInfo ?? options.dumpInfo,
         enableAssertMessage: enableAssertMessage ?? options.enableAssertMessage,
         enableExperimentalMirrors:
diff --git a/pkg/compiler/lib/src/resolution/member_impl.dart b/pkg/compiler/lib/src/resolution/member_impl.dart
index ac37087..e454c83 100644
--- a/pkg/compiler/lib/src/resolution/member_impl.dart
+++ b/pkg/compiler/lib/src/resolution/member_impl.dart
@@ -149,7 +149,7 @@
       // substituted into the context of [newInstance] in the created member.
       ClassElement contextClass = DartTypes.getClassContext(instance);
       return contextClass == null || contextClass == newInstance.element;
-    },
+    }(),
         failedAt(
             declaration.element,
             "Context mismatch: Context class "
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index d939a65..0cc75e9 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -1131,6 +1131,13 @@
       sendStructure = new IsStructure(type);
     }
 
+    // GENERIC_METHODS: Method type variables are not reified so we must warn
+    // about the error which will occur at runtime.
+    if (type is MethodTypeVariableType) {
+      reporter.reportWarningMessage(
+          node, MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED);
+    }
+
     registry.registerTypeUse(new TypeUse.isCheck(type));
     registry.registerSendStructure(node, sendStructure);
     return const NoneResult();
@@ -1145,6 +1152,13 @@
     ResolutionDartType type =
         resolveTypeAnnotation(typeNode, registerCheckedModeCheck: false);
 
+    // GENERIC_METHODS: Method type variables are not reified, so we must inform
+    // the developer about the potentially bug-inducing semantics.
+    if (type is MethodTypeVariableType) {
+      reporter.reportHintMessage(
+          node, MessageKind.TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC);
+    }
+
     registry.registerTypeUse(new TypeUse.asCast(type));
     registry.registerSendStructure(node, new AsStructure(type));
     return const NoneResult();
@@ -1913,6 +1927,12 @@
       // TODO(johnniwinther): Clean up registration of elements and selectors
       // for this case.
     } else {
+      // GENERIC_METHODS: Method type variables are not reified so we must warn
+      // about the error which will occur at runtime.
+      if (element.type is MethodTypeVariableType) {
+        reporter.reportWarningMessage(
+            node, MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED);
+      }
       semantics = new StaticAccess.typeParameterTypeLiteral(element);
     }
 
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index c245e30..c036637 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -602,7 +602,8 @@
             currentlyResolvedTypeDeclaration;
         currentlyResolvedTypeDeclaration = element;
         var result = resolveTypeDeclaration();
-        if (previousResolvedTypeDeclaration == null) {
+        currentlyResolvedTypeDeclaration = previousResolvedTypeDeclaration;
+        if (currentlyResolvedTypeDeclaration == null) {
           do {
             while (!pendingClassesToBeResolved.isEmpty) {
               pendingClassesToBeResolved
@@ -617,7 +618,6 @@
           assert(pendingClassesToBeResolved.isEmpty);
           assert(pendingClassesToBePostProcessed.isEmpty);
         }
-        currentlyResolvedTypeDeclaration = previousResolvedTypeDeclaration;
         return result;
       });
     });
diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
index fd5efea..8d64db4 100644
--- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
@@ -129,8 +129,9 @@
       new MirrorsResolutionAnalysisImpl(backend, _compiler.resolution);
 
   RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() {
-    return _runtimeTypesNeedBuilder ??=
-        new ResolutionRuntimeTypesNeedBuilderImpl(
+    return _runtimeTypesNeedBuilder ??= _compiler.options.disableRtiOptimization
+        ? const TrivialRuntimeTypesNeedBuilder()
+        : new ResolutionRuntimeTypesNeedBuilderImpl(
             elementEnvironment, dartTypes);
   }
 
diff --git a/pkg/compiler/lib/src/resolution/tree_elements.dart b/pkg/compiler/lib/src/resolution/tree_elements.dart
index c68b64d..f2f43be 100644
--- a/pkg/compiler/lib/src/resolution/tree_elements.dart
+++ b/pkg/compiler/lib/src/resolution/tree_elements.dart
@@ -139,7 +139,7 @@
         return analyzedElement.implementationLibrary.isPatch;
       }
       return true;
-    }, failedAt(node));
+    }(), failedAt(node));
     // TODO(ahe): Investigate why the invariant below doesn't hold.
     // assert(
     //     getTreeElement(node) == element ||
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 0c2ea28..bca2447 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -873,7 +873,7 @@
 
     ClassElement enclosing = function.enclosingClass;
     if ((function.isConstructor || function.isGenerativeConstructorBody) &&
-        rtiNeed.classNeedsRti(enclosing)) {
+        rtiNeed.classNeedsTypeArguments(enclosing)) {
       enclosing.typeVariables.forEach((_typeVariable) {
         ResolutionTypeVariableType typeVariable = _typeVariable;
         HInstruction argument = compiledArguments[argumentIndex++];
@@ -961,7 +961,7 @@
         ClassElement enclosingClass = member.enclosingClass;
         if (!includedClasses.add(enclosingClass)) return;
 
-        if (rtiNeed.classNeedsRti(enclosingClass)) {
+        if (rtiNeed.classNeedsTypeArguments(enclosingClass)) {
           // If [enclosingClass] needs RTI, we have to give a value to its
           // type parameters.
           // For a super constructor call, the type is the supertype of
@@ -1402,7 +1402,7 @@
 
       // Type variables arguments must come after the box (if there is one).
       ClassElement currentClass = constructor.enclosingClass;
-      if (rtiNeed.classNeedsRti(currentClass)) {
+      if (rtiNeed.classNeedsTypeArguments(currentClass)) {
         // If [currentClass] needs RTI, we add the type variables as
         // parameters of the generative constructor body.
         currentClass.typeVariables.forEach((_argument) {
@@ -1473,7 +1473,7 @@
     // may contain references to type variables.
     ClassElement cls = element.enclosingClass;
     if ((element.isConstructor || element.isGenerativeConstructorBody) &&
-        rtiNeed.classNeedsRti(cls)) {
+        rtiNeed.classNeedsTypeArguments(cls)) {
       cls.typeVariables.forEach((_typeVariable) {
         ResolutionTypeVariableType typeVariable = _typeVariable;
         HParameterValue param =
@@ -3383,7 +3383,7 @@
 
   HInstruction handleListConstructor(ResolutionInterfaceType type,
       HInstruction newObject, SourceInformation sourceInformation) {
-    if (!rtiNeed.classNeedsRti(type.element) || type.treatAsRaw) {
+    if (!rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) {
       return newObject;
     }
     List<HInstruction> inputs = <HInstruction>[];
@@ -3623,7 +3623,7 @@
     // not know about the type argument. Therefore we special case
     // this constructor to have the setRuntimeTypeInfo called where
     // the 'new' is done.
-    if (rtiNeed.classNeedsRti(commonElements.listClass) &&
+    if (rtiNeed.classNeedsTypeArguments(commonElements.listClass) &&
         (isFixedListConstructorCall ||
             isGrowableListConstructorCall ||
             isJSArrayTypedConstructor)) {
@@ -3645,7 +3645,7 @@
   void potentiallyAddTypeArguments(List<HInstruction> inputs, ClassElement cls,
       ResolutionInterfaceType expectedType,
       {SourceInformation sourceInformation}) {
-    if (!rtiNeed.classNeedsRti(cls)) return;
+    if (!rtiNeed.classNeedsTypeArguments(cls)) return;
     assert(cls.typeVariables.length == expectedType.typeArguments.length);
     expectedType.typeArguments.forEach((ResolutionDartType argument) {
       inputs.add(typeBuilder.analyzeTypeArgument(argument, sourceElement,
@@ -5247,7 +5247,7 @@
     }
 
     ClassElement targetClass = targetConstructor.enclosingClass;
-    if (rtiNeed.classNeedsRti(targetClass)) {
+    if (rtiNeed.classNeedsTypeArguments(targetClass)) {
       ClassElement cls = redirectingConstructor.enclosingClass;
       ResolutionDartType targetType =
           redirectingConstructor.computeEffectiveTargetType(cls.thisType);
@@ -5367,7 +5367,7 @@
       HInstruction object, ast.Node node, SourceInformation sourceInformation) {
     ResolutionInterfaceType type =
         localsHandler.substInContext(elements.getType(node));
-    if (!rtiNeed.classNeedsRti(type.element) || type.treatAsRaw) {
+    if (!rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) {
       return object;
     }
     List<HInstruction> arguments = <HInstruction>[];
@@ -5841,7 +5841,8 @@
     ClassElement cls = listConstructor.enclosingClass;
 
     MethodElement createFunction = listConstructor;
-    if (expectedType is ResolutionInterfaceType && rtiNeed.classNeedsRti(cls)) {
+    if (expectedType is ResolutionInterfaceType &&
+        rtiNeed.classNeedsTypeArguments(cls)) {
       List<HInstruction> typeInputs = <HInstruction>[];
       expectedType.typeArguments.forEach((ResolutionDartType argument) {
         typeInputs
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index aae6afd..424bc55 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -356,11 +356,11 @@
     if (thisType.typeArguments.isEmpty) {
       return;
     }
-    bool needsRti = rtiNeed.classNeedsRti(cls);
+    bool needsTypeArguments = rtiNeed.classNeedsTypeArguments(cls);
     thisType.typeArguments.forEach((DartType _typeVariable) {
       TypeVariableType typeVariableType = _typeVariable;
       HInstruction param;
-      if (needsRti) {
+      if (needsTypeArguments) {
         param = addParameter(typeVariableType.element, commonMasks.nonNullType);
       } else {
         // Unused, so bind to `dynamic`.
@@ -385,10 +385,10 @@
     if (typeVariables.isEmpty) {
       return;
     }
-    bool needsRti = rtiNeed.methodNeedsGenericRti(member);
+    bool needsTypeArguments = rtiNeed.methodNeedsTypeArguments(member);
     typeVariables.forEach((TypeVariableType typeVariableType) {
       HInstruction param;
-      if (needsRti) {
+      if (needsTypeArguments) {
         param = addParameter(typeVariableType.element, commonMasks.nonNullType);
       } else {
         // Unused, so bind to `dynamic`.
@@ -556,7 +556,8 @@
 
         // Pass type arguments.
         ClassEntity inlinedConstructorClass = inlinedConstructor.enclosingClass;
-        if (closedWorld.rtiNeed.classNeedsRti(inlinedConstructorClass)) {
+        if (closedWorld.rtiNeed
+            .classNeedsTypeArguments(inlinedConstructorClass)) {
           InterfaceType thisType = _elementMap.elementEnvironment
               .getThisType(inlinedConstructorClass);
           for (DartType typeVariable in thisType.typeArguments) {
@@ -620,7 +621,7 @@
   void _collectFieldValues(ir.Class clazz, ConstructorData constructorData) {
     void ensureTypeVariablesForInitializers(ClassEntity enclosingClass) {
       if (!constructorData.includedClasses.add(enclosingClass)) return;
-      if (rtiNeed.classNeedsRti(enclosingClass)) {
+      if (rtiNeed.classNeedsTypeArguments(enclosingClass)) {
         // If [enclosingClass] needs RTI, we have to give a value to its type
         // parameters. For a super constructor call, the type is the supertype
         // of current class. For a redirecting constructor, the type is the
@@ -2378,7 +2379,7 @@
   /// Set the runtime type information if necessary.
   HInstruction _setListRuntimeTypeInfoIfNeeded(HInstruction object,
       InterfaceType type, SourceInformation sourceInformation) {
-    if (!rtiNeed.classNeedsRti(type.element) || type.treatAsRaw) {
+    if (!rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) {
       return object;
     }
     List<HInstruction> arguments = <HInstruction>[];
@@ -2457,7 +2458,7 @@
         _elementMap.getDartType(node.valueType)));
     ClassEntity cls = constructor.enclosingClass;
 
-    if (rtiNeed.classNeedsRti(cls)) {
+    if (rtiNeed.classNeedsTypeArguments(cls)) {
       List<HInstruction> typeInputs = <HInstruction>[];
       type.typeArguments.forEach((DartType argument) {
         typeInputs
@@ -2768,18 +2769,23 @@
   /// defaulted arguments, so (unlike static targets) we do not add the default
   /// values.
   List<HInstruction> _visitArgumentsForDynamicTarget(
-      Selector selector, ir.Arguments arguments) {
+      Selector selector, ir.Arguments arguments,
+      [SourceInformation sourceInformation]) {
     List<HInstruction> values = _visitPositionalArguments(arguments);
 
-    if (arguments.named.isEmpty) return values;
-
-    var namedValues = <String, HInstruction>{};
-    for (ir.NamedExpression argument in arguments.named) {
-      argument.value.accept(this);
-      namedValues[argument.name] = pop();
+    if (arguments.named.isNotEmpty) {
+      Map<String, HInstruction> namedValues = <String, HInstruction>{};
+      for (ir.NamedExpression argument in arguments.named) {
+        argument.value.accept(this);
+        namedValues[argument.name] = pop();
+      }
+      for (String name in selector.callStructure.getOrderedNamedArguments()) {
+        values.add(namedValues[name]);
+      }
     }
-    for (String name in selector.callStructure.getOrderedNamedArguments()) {
-      values.add(namedValues[name]);
+
+    if (selector.callStructure.typeArgumentCount > 0) {
+      _addTypeArguments(values, arguments, sourceInformation);
     }
 
     return values;
@@ -2919,7 +2925,8 @@
         ? _visitArgumentsForNativeStaticTarget(target.function, node.arguments)
         : _visitArgumentsForStaticTarget(
             target.function, node.arguments, sourceInformation,
-            addFunctionTypeArguments: rtiNeed.methodNeedsGenericRti(function));
+            addFunctionTypeArguments:
+                rtiNeed.methodNeedsTypeArguments(function));
 
     // Error in the arguments provided. Do not process further.
     if (arguments == null) {
@@ -3057,14 +3064,16 @@
       // TODO(sra): Instead of calling the identity-like factory constructor,
       // simply select the single argument.
       // Factory constructors take type parameters.
-      if (closedWorld.rtiNeed.classNeedsRti(function.enclosingClass)) {
+      if (closedWorld.rtiNeed
+          .classNeedsTypeArguments(function.enclosingClass)) {
         _addTypeArguments(arguments, invocation.arguments, sourceInformation);
       }
       _pushStaticInvocation(function, arguments, typeMask,
           sourceInformation: sourceInformation);
     } else {
       // Factory constructors take type parameters.
-      if (closedWorld.rtiNeed.classNeedsRti(function.enclosingClass)) {
+      if (closedWorld.rtiNeed
+          .classNeedsTypeArguments(function.enclosingClass)) {
         _addTypeArguments(arguments, invocation.arguments, sourceInformation);
       }
       instanceType = localsHandler.substInContext(instanceType);
@@ -3083,7 +3092,7 @@
       graph.allocatedFixedLists.add(newInstance);
     }
 
-    if (rtiNeed.classNeedsRti(commonElements.listClass) &&
+    if (rtiNeed.classNeedsTypeArguments(commonElements.listClass) &&
         (isFixedListConstructorCall ||
             isGrowableListConstructorCall ||
             isJSArrayTypedConstructor)) {
@@ -4078,7 +4087,7 @@
     if (commonElements.isSymbolConstructor(constructor)) {
       constructor = commonElements.symbolValidatedConstructor;
     }
-    if (closedWorld.rtiNeed.classNeedsRti(cls)) {
+    if (closedWorld.rtiNeed.classNeedsTypeArguments(cls)) {
       _addTypeArguments(arguments, node.arguments, sourceInformation);
     }
     addImplicitInstantiation(instanceType);
@@ -4558,7 +4567,9 @@
     List<String> selectorArgumentNames =
         selector.callStructure.getOrderedNamedArguments();
     List<HInstruction> compiledArguments = new List<HInstruction>(
-        parameterStructure.totalParameters + 1); // Plus one for receiver.
+        parameterStructure.totalParameters +
+            parameterStructure.typeParameters +
+            1); // Plus one for receiver.
 
     compiledArguments[0] = providedArguments[0]; // Receiver.
     int index = 1;
@@ -4602,6 +4613,24 @@
       }
       index++;
     });
+    if (rtiNeed.methodNeedsTypeArguments(function)) {
+      if (selector.callStructure.typeArgumentCount ==
+          parameterStructure.typeParameters) {
+        // Pass explicit type arguments.
+        for (int i = 0; i < parameterStructure.typeParameters; i++) {
+          compiledArguments[index] = providedArguments[index];
+          index++;
+        }
+      } else {
+        assert(selector.callStructure.typeArgumentCount == 0);
+        // Pass type variable bounds as type arguments.
+        for (int i = 0; i < parameterStructure.typeParameters; i++) {
+          // TODO(johnniwinther): Pass type variable bounds.
+          compiledArguments[index] = graph.addConstantNull(closedWorld);
+          index++;
+        }
+      }
+    }
     return compiledArguments;
   }
 
@@ -4662,7 +4691,7 @@
 
     ClassEntity enclosing = function.enclosingClass;
     if ((function.isConstructor || function is ConstructorBodyEntity) &&
-        rtiNeed.classNeedsRti(enclosing)) {
+        rtiNeed.classNeedsTypeArguments(enclosing)) {
       InterfaceType thisType =
           _elementMap.elementEnvironment.getThisType(enclosing);
       thisType.typeArguments.forEach((_typeVariable) {
@@ -4672,7 +4701,7 @@
             localsHandler.getTypeVariableAsLocal(typeVariable), argument);
       });
     }
-    if (rtiNeed.methodNeedsGenericRti(function) && options.strongMode) {
+    if (rtiNeed.methodNeedsTypeArguments(function) && options.strongMode) {
       for (TypeVariableType typeVariable in _elementMap.elementEnvironment
           .getFunctionTypeVariables(function)) {
         HInstruction argument = compiledArguments[argumentIndex++];
@@ -4680,7 +4709,12 @@
             localsHandler.getTypeVariableAsLocal(typeVariable), argument);
       }
     }
-    assert(argumentIndex == compiledArguments.length);
+    assert(
+        argumentIndex == compiledArguments.length,
+        failedAt(
+            function,
+            "Only ${argumentIndex} of ${compiledArguments.length} "
+            "arguments have been read from: ${compiledArguments}"));
 
     _returnType =
         _elementMap.elementEnvironment.getFunctionType(function).returnType;
diff --git a/pkg/compiler/lib/src/ssa/graph_builder.dart b/pkg/compiler/lib/src/ssa/graph_builder.dart
index 6d9a6ba..9abf34d 100644
--- a/pkg/compiler/lib/src/ssa/graph_builder.dart
+++ b/pkg/compiler/lib/src/ssa/graph_builder.dart
@@ -254,7 +254,7 @@
       List<HInstruction> rtiInputs,
       HInstruction newObject,
       SourceInformation sourceInformation) {
-    if (!rtiNeed.classNeedsRti(type.element)) {
+    if (!rtiNeed.classNeedsTypeArguments(type.element)) {
       return newObject;
     }
 
@@ -299,6 +299,8 @@
         return options.useContentSecurityPolicy;
       case 'IS_FULL_EMITTER':
         return !options.useStartupEmitter;
+      case 'STRONG_MODE':
+        return options.strongMode;
       default:
         return null;
     }
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 767e633..9c972af 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -492,9 +492,9 @@
         // TODO(ngeoffray): If the method has optional parameters,
         // we should pass the default values.
         ParameterStructure parameters = method.parameterStructure;
-        if (parameters.optionalParameters == 0 ||
-            parameters.requiredParameters + parameters.optionalParameters ==
-                node.selector.argumentCount) {
+        if (parameters.totalParameters == node.selector.argumentCount &&
+            parameters.typeParameters ==
+                node.selector.callStructure.typeArgumentCount) {
           node.element = method;
         }
       }
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index c08d246..c6dabbe 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -97,6 +97,10 @@
   bool isMemberProcessed(MemberEntity member);
   void registerProcessedMember(MemberEntity member);
   Iterable<MemberEntity> get processedMembers;
+
+  /// Registers that [type] is checked in this world builder. The unaliased type
+  /// is returned.
+  void registerIsCheck(DartType type);
 }
 
 /// The type and kind of an instantiation registered through
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index a5b2922..330d84f 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -186,8 +186,4 @@
   /// instantiated classes.
   // TODO(johnniwinther): Improve semantic precision.
   Iterable<InterfaceType> get instantiatedTypes;
-
-  /// Registers that [type] is checked in this world builder. The unaliased type
-  /// is returned.
-  void registerIsCheck(DartType type);
 }
diff --git a/pkg/compiler/tool/status_files/update_all.sh b/pkg/compiler/tool/status_files/update_all.sh
index 52ed57f..96453a2 100755
--- a/pkg/compiler/tool/status_files/update_all.sh
+++ b/pkg/compiler/tool/status_files/update_all.sh
@@ -16,6 +16,9 @@
     --with-fast-startup|--fast-startup)
       fast_startup=true
       ;;
+    --strong)
+      strong=true
+      ;;
     --with-checked-mode|--checked-mode|--checked)
       checked_mode=true
       ;;
@@ -31,7 +34,11 @@
 done
 
 if [ -z "$suites" ]; then
-  suites="dart2js_native dart2js_extra language language_2 corelib corelib_2 html"
+  if [[ "$strong" == true ]]; then
+    suites="language_2 corelib_2"
+  else
+    suites="dart2js_native dart2js_extra language corelib html"
+  fi
 fi
 
 repodir=$(cd $(dirname ${BASH_SOURCE[0]})/../../../../; pwd)
@@ -41,6 +48,23 @@
 
 tmp=$(mktemp -d)
 
+function update_suite_with_flags {
+  local name=$1
+  local suite=$2
+  shift 2
+  local args=$@
+  if [[ "$strong" == true ]]; then
+    name="$name-strong"
+    args="--strong $args"
+  fi
+
+  echo "  - $name tests"
+  ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
+      --dart2js-with-kernel $args $suite > $tmp/$suite-$name.txt
+  echo $tmp/$suite-$name.txt
+  $dart $update_script $name $tmp/$suite-$name.txt
+}
+
 function update_suite {
   local suite=$1
   local runtime="d8"
@@ -48,39 +72,13 @@
     runtime="drt"
   fi
   echo -e "\nupdate suite: [32m$suite[0m"
-  echo "  - minified tests"
-  ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
-      --use-sdk --minified --dart2js-with-kernel \
-      $suite > $tmp/$suite-minified.txt
-  $dart $update_script minified $tmp/$suite-minified.txt
-
-
-  echo "  - host-checked tests"
-  ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
-    --host-checked \
-    --dart2js-options="--platform-binaries=$binaries_dir" \
-    --dart2js-with-kernel \
-    $suite > $tmp/$suite-host-checked.txt
-  $dart $update_script host-checked $tmp/$suite-host-checked.txt
-
+  update_suite_with_flags minified $suite "--minified --use-sdk"
+  update_suite_with_flags host-checked $suite "--host-checked"
   if [ "$fast_startup" = true ]; then
-    echo "  - fast-startup tests"
-    ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
-      --fast-startup \
-      --dart2js-options="--platform-binaries=$binaries_dir" \
-      --dart2js-with-kernel \
-      $suite > $tmp/$suite-fast-startup.txt
-    $dart $update_script fast-startup $tmp/$suite-fast-startup.txt
+    update_suite_with_flags fast-startup $suite "--fast-startup"
   fi
-
   if [ "$checked_mode" = true ]; then
-    echo "  - checked mode tests"
-    ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
-      --checked \
-      --dart2js-options="--platform-binaries=$binaries_dir" \
-      --dart2js-with-kernel \
-      $suite > $tmp/$suite-checked-mode.txt
-    $dart $update_script checked-mode $tmp/$suite-checked-mode.txt
+    update_suite_with_flags checked-mode $suite "--checked"
   fi
 }
 
diff --git a/pkg/compiler/tool/status_files/update_from_log.dart b/pkg/compiler/tool/status_files/update_from_log.dart
index c2fc283..af5afdb 100644
--- a/pkg/compiler/tool/status_files/update_from_log.dart
+++ b/pkg/compiler/tool/status_files/update_from_log.dart
@@ -33,10 +33,18 @@
   'host-checked':
       r'[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]',
   'minified': r'[ $compiler == dart2js && $dart2js_with_kernel && $minified ]',
+  'host-checked-strong':
+      r'[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]',
+  'minified-strong':
+      r'[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]',
   'fast-startup':
       r'[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]',
+  'fast-startup-strong':
+      r'[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]',
   'checked-mode':
       r'[ $compiler == dart2js && $checked && $dart2js_with_kernel ]',
+  'checked-mode-strong':
+      r'[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]',
 };
 
 final dart2jsStatusFiles = {
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 030011b..bb2c765 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -4730,7 +4730,10 @@
   int _asIntInRange(Expression expr, int low, int high) {
     expr = expr.unParenthesized;
     if (expr is IntegerLiteral) {
-      if (expr.value >= low && expr.value <= high) return expr.value;
+      var value = expr.value;
+      if (value != null && value >= low && value <= high) {
+        return expr.value;
+      }
       return null;
     }
 
@@ -4753,7 +4756,7 @@
 
   bool _isDefinitelyNonNegative(Expression expr) {
     expr = expr.unParenthesized;
-    if (expr is IntegerLiteral) {
+    if (expr is IntegerLiteral && expr.value != null) {
       return expr.value >= 0;
     }
     if (_nodeIsBitwiseOperation(expr)) return true;
@@ -4786,7 +4789,7 @@
     /// Determines how many bits are required to hold result of evaluation
     /// [expr].  [depth] is used to bound exploration of huge expressions.
     int bitWidth(Expression expr, int depth) {
-      if (expr is IntegerLiteral) {
+      if (expr is IntegerLiteral && expr.value != null) {
         return expr.value >= 0 ? expr.value.bitLength : MAX;
       }
       if (++depth > 5) return MAX;
@@ -5563,7 +5566,18 @@
   }
 
   @override
-  visitIntegerLiteral(IntegerLiteral node) => js.number(node.value);
+  visitIntegerLiteral(IntegerLiteral node) {
+    // The analyzer is using int.parse and, in the the VM's new
+    // 64-bit mode, it's silently failing if the Literal is out of bounds.
+    // If the value is null, fall back on the string representation.  This
+    // is also fudging the number, but consistent with the old behavior.
+    // Ideally, this is a static error.
+    // TODO(vsm): Remove this hack.
+    if (node.value != null) {
+      return js.number(node.value);
+    }
+    return new JS.LiteralNumber('${node.literal}');
+  }
 
   @override
   visitDoubleLiteral(DoubleLiteral node) => js.number(node.value);
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index e719f1d..120a36b 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -118,6 +118,7 @@
     // TODO(vsm): Should this be hardcoded?
     context.declaredVariables.define('dart.library.html', 'true');
     context.declaredVariables.define('dart.library.io', 'false');
+    context.declaredVariables.define('dart.library.ui', 'false');
 
     if (!context.analysisOptions.strongMode) {
       throw new ArgumentError('AnalysisContext must be strong mode');
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 1d5f990..ca2474d 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -8,7 +8,7 @@
 
 import 'package:args/args.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:front_end/src/multi_root_file_system.dart';
 import 'package:kernel/core_types.dart';
@@ -153,7 +153,8 @@
       .toList();
 
   var sdkSummaryPath = argResults['dart-sdk-summary'] ??
-      path.absolute(ddcPath, 'gen', 'sdk', 'ddc_sdk.dill');
+      path.join(path.dirname(path.dirname(Platform.resolvedExecutable)), 'lib',
+          '_internal', 'ddc_sdk.dill');
 
   var packageFile =
       argResults['packages'] ?? path.absolute(ddcPath, '..', '..', '.packages');
@@ -164,11 +165,7 @@
 
   var succeeded = true;
   void errorHandler(fe.CompilationMessage error) {
-    // TODO(jmesserly): front end warning levels do not seem to follow the
-    // Strong Mode/Dart 2 spec. So for now, we treat all warnings as
-    // compile time errors.
-    if (error.severity == fe.Severity.error ||
-        error.severity == fe.Severity.warning) {
+    if (error.severity == fe.Severity.error) {
       succeeded = false;
     }
   }
@@ -179,7 +176,7 @@
   // the correct location and keeps the real file location hidden from the
   // front end.
   var fileSystem = new MultiRootFileSystem(
-      customScheme, multiRoots, PhysicalFileSystem.instance);
+      customScheme, multiRoots, StandardFileSystem.instance);
 
   compilerState = await fe.initializeCompiler(
       compilerState,
@@ -367,5 +364,14 @@
       i++;
     }
   }
+
+  // Add platform defined variables
+  declaredVariables['dart.isVM'] = 'false';
+
+  // TODO(vsm): Should this be hardcoded?
+  declaredVariables['dart.library.html'] = 'true';
+  declaredVariables['dart.library.io'] = 'false';
+  declaredVariables['dart.library.ui'] = 'false';
+
   return declaredVariables;
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 024bcb1..4f76e3e 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -398,7 +398,7 @@
     if (bootstrap) _emitLibraryProcedures(library);
 
     library.classes.forEach(_emitClass);
-    _moduleItems.addAll(library.typedefs.map(_emitTypedef));
+    library.typedefs.forEach(_emitTypedef);
     if (bootstrap) {
       _moduleItems.add(_emitInternalSdkFields(library.fields));
     } else {
@@ -1884,7 +1884,7 @@
     var jsMethods = <JS.Method>[];
     if (field.isStatic) return jsMethods;
 
-    var name = getAnnotationName(field, isJSName) ?? field.name;
+    var name = getAnnotationName(field, isJSName) ?? field.name.name;
     // Generate getter
     var fn = new JS.Fun([], js.statement('{ return this.#; }', [name]));
     var method = new JS.Method(_declareMemberName(field), fn, isGetter: true);
@@ -2012,16 +2012,18 @@
     return js.statement('# = #;', [_emitTopLevelName(c), jsTypeName]);
   }
 
-  JS.Statement _emitTypedef(Typedef t) {
+  void _emitTypedef(Typedef t) {
     var body = _callHelper(
         'typedef(#, () => #)', [js.string(t.name, "'"), _emitType(t.type)]);
 
+    JS.Statement result;
     if (t.typeParameters.isNotEmpty) {
-      return _defineClassTypeArguments(
+      result = _defineClassTypeArguments(
           t, t.typeParameters, js.statement('const # = #;', [t.name, body]));
     } else {
-      return js.statement('# = #;', [_emitTopLevelName(t), body]);
+      result = js.statement('# = #;', [_emitTopLevelName(t), body]);
     }
+    _moduleItems.add(result);
   }
 
   /// Treat dart:_runtime fields as safe to eagerly evaluate.
@@ -2057,11 +2059,7 @@
     for (var field in fields) {
       var name = field.name.name;
       var access = _emitStaticMemberName(name);
-      accessors.add(new JS.Method(
-          access,
-          js.call('function() { return #; }',
-                  _visitInitializer(field.initializer, field.annotations))
-              as JS.Fun,
+      accessors.add(new JS.Method(access, _emitStaticFieldInitializer(field),
           isGetter: true));
 
       // TODO(jmesserly): currently uses a dummy setter to indicate writable.
@@ -2077,6 +2075,20 @@
     return _callHelperStatement('defineLazy(#, { # });', [objExpr, accessors]);
   }
 
+  JS.Fun _emitStaticFieldInitializer(Field field) {
+    var savedLetVariables = _letVariables;
+    _letVariables = [];
+
+    var body = [
+      new JS.Return(_visitInitializer(field.initializer, field.annotations))
+    ];
+    _initTempVars(body);
+
+    _letVariables = savedLetVariables;
+
+    return new JS.Fun([], new JS.Block(body));
+  }
+
   JS.PropertyAccess _emitTopLevelName(NamedNode n, {String suffix: ''}) {
     return _emitJSInterop(n) ?? _emitTopLevelNameNoInterop(n, suffix: suffix);
   }
@@ -4324,56 +4336,64 @@
 
   @override
   visitConstructorInvocation(ConstructorInvocation node) {
-    var target = node.target;
-    var targetName = target.name;
+    var ctor = node.target;
     var args = node.arguments;
+    var ctorClass = ctor.enclosingClass;
+    if (_isObjectLiteral(ctorClass)) return _emitObjectLiteral(args);
 
-    var enclosingClass = target.enclosingClass;
-    if (node.isConst &&
-        targetName.name == 'fromEnvironment' &&
-        target.enclosingLibrary == coreTypes.coreLibrary &&
-        args.positional.length == 1) {
-      var varName = (args.positional[0] as StringLiteral).value;
-      var value = declaredVariables[varName];
-      var defaultArg = args.named.isNotEmpty ? args.named[0].value : null;
-      if (enclosingClass == coreTypes.stringClass) {
-        value ??= (defaultArg as StringLiteral)?.value;
-        return value != null ? js.escapedString(value) : new JS.LiteralNull();
-      } else if (enclosingClass == coreTypes.intClass) {
-        var intValue = int.parse(value ?? '',
-            onError: (_) => (defaultArg as IntLiteral)?.value);
-        return intValue != null ? js.number(intValue) : new JS.LiteralNull();
-      } else if (enclosingClass == coreTypes.boolClass) {
-        if (value == "true") return js.boolean(true);
-        if (value == "false") return js.boolean(false);
-        return js
-            .boolean(defaultArg != null && (defaultArg as BoolLiteral)?.value);
-      } else {
-        return _emitInvalidNode(
-            node, '${enclosingClass}.fromEnvironment constant');
-      }
+    JS.Expression emitNew() {
+      return new JS.New(_emitConstructorName(node.constructedType, ctor),
+          _emitArgumentList(args, types: false));
     }
-    return _emitConstructorInvocation(
-        target, node.constructedType, args, node.isConst);
+
+    return node.isConst ? _emitConst(emitNew) : emitNew();
   }
 
   JS.Expression _emitFactoryInvocation(StaticInvocation node) {
     var args = node.arguments;
-    var target = node.target;
-    var c = target.enclosingClass;
-    var type =
-        c.typeParameters.isEmpty ? c.rawType : new InterfaceType(c, args.types);
+    var ctor = node.target;
+    var ctorClass = ctor.enclosingClass;
+    var type = ctorClass.typeParameters.isEmpty
+        ? ctorClass.rawType
+        : new InterfaceType(ctorClass, args.types);
+
+    if (node.isConst &&
+        ctor.name.name == 'fromEnvironment' &&
+        ctor.enclosingLibrary == coreTypes.coreLibrary &&
+        args.positional.length == 1 &&
+        // TODO(jmesserly): this does not correctly handle when the arguments to
+        // fromEnvironment are constant non-literal values.
+        args.positional[0] is BasicLiteral &&
+        (args.named.isEmpty || args.named[0].value is BasicLiteral)) {
+      var varName = (args.positional[0] as StringLiteral).value;
+      var value = declaredVariables[varName];
+      var defaultArg = args.named.isNotEmpty ? args.named[0].value : null;
+      if (ctorClass == coreTypes.stringClass) {
+        if (value != null) return js.escapedString(value);
+        return _visitExpression(defaultArg) ?? new JS.LiteralNull();
+      } else if (ctorClass == coreTypes.intClass) {
+        var intValue = int.parse(value ?? '', onError: (_) => null);
+        if (intValue != null) return js.number(intValue);
+        return _visitExpression(defaultArg) ?? new JS.LiteralNull();
+      } else if (ctorClass == coreTypes.boolClass) {
+        if (value == "true") return js.boolean(true);
+        if (value == "false") return js.boolean(false);
+        return _visitExpression(defaultArg) ?? js.boolean(false);
+      } else {
+        return _emitInvalidNode(node, '$ctorClass.fromEnvironment constant');
+      }
+    }
     if (args.positional.isEmpty &&
         args.named.isEmpty &&
-        c.enclosingLibrary.importUri.scheme == 'dart') {
+        ctorClass.enclosingLibrary.importUri.scheme == 'dart') {
       // Skip the slow SDK factory constructors when possible.
-      switch (c.name) {
+      switch (ctorClass.name) {
         case 'Map':
         case 'HashMap':
         case 'LinkedHashMap':
-          if (target.name == '') {
+          if (ctor.name == '') {
             return js.call('new #.new()', _emitMapImplType(type));
-          } else if (target.name == 'identity') {
+          } else if (ctor.name == 'identity') {
             return js.call(
                 'new #.new()', _emitMapImplType(type, identity: true));
           }
@@ -4381,15 +4401,15 @@
         case 'Set':
         case 'HashSet':
         case 'LinkedHashSet':
-          if (target.name == '') {
+          if (ctor.name == '') {
             return js.call('new #.new()', _emitSetImplType(type));
-          } else if (target.name == 'identity') {
+          } else if (ctor.name == 'identity') {
             return js.call(
                 'new #.new()', _emitSetImplType(type, identity: true));
           }
           break;
         case 'List':
-          if (target.name == '' && type is InterfaceType) {
+          if (ctor.name == '' && type is InterfaceType) {
             return _emitList(type.typeArguments[0], []);
           }
           break;
@@ -4398,28 +4418,13 @@
 
     JS.Expression emitNew() {
       // Native factory constructors are JS constructors - use new here.
-      return new JS.Call(_emitConstructorName(type, target),
+      return new JS.Call(_emitConstructorName(type, ctor),
           _emitArgumentList(args, types: false));
     }
 
     return node.isConst ? _emitConst(emitNew) : emitNew();
   }
 
-  JS.Expression _emitConstructorInvocation(
-      Constructor ctor, InterfaceType type, Arguments arguments, bool isConst) {
-    var enclosingClass = ctor.enclosingClass;
-    if (_isObjectLiteral(enclosingClass)) {
-      return _emitObjectLiteral(arguments);
-    }
-
-    JS.Expression emitNew() {
-      return new JS.New(_emitConstructorName(type, ctor),
-          _emitArgumentList(arguments, types: false));
-    }
-
-    return isConst ? _emitConst(emitNew) : emitNew();
-  }
-
   JS.Expression _emitMapImplType(InterfaceType type, {bool identity}) {
     var typeArgs = type.typeArguments;
     if (typeArgs.isEmpty) return _emitType(type);
diff --git a/pkg/dev_compiler/test/sourcemap/README.md b/pkg/dev_compiler/test/sourcemap/README.md
index 8562f98..a855144 100644
--- a/pkg/dev_compiler/test/sourcemap/README.md
+++ b/pkg/dev_compiler/test/sourcemap/README.md
@@ -7,7 +7,7 @@
 
 Running the tests likely requires the compilation of the correct targets. DDK currently also
 requires `ddc_sdk.dill` inside
-`{sdkroot}/{out,xcodebuild}/ReleaseX64/gen/utils/dartdevc/ddc_sdk.dill`.
+`{sdkroot}/{out,xcodebuild}/ReleaseX64/gen/utils/dartdevc/kernel/ddc_sdk.dill`.
 
 Except for that, running them should simply be a matter of executing the `*_suite.dart` files.
 
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
index 9ce07ce..1658cf7 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
@@ -52,7 +52,7 @@
     File sdkJsFile = findInOutDir("gen/utils/dartdevc/js/es6/dart_sdk.js");
     var jsSdkPath = sdkJsFile.uri;
 
-    File ddcSdkSummary = findInOutDir("gen/utils/dartdevc/ddc_sdk.dill");
+    File ddcSdkSummary = findInOutDir("gen/utils/dartdevc/kernel/ddc_sdk.dill");
 
     var ddc = getDdcDir().uri.resolve("bin/dartdevk.dart");
 
diff --git a/pkg/dev_compiler/test/string_to_uri_test.dart b/pkg/dev_compiler/test/string_to_uri_test.dart
index b27303f..43eaa8b 100755
--- a/pkg/dev_compiler/test/string_to_uri_test.dart
+++ b/pkg/dev_compiler/test/string_to_uri_test.dart
@@ -15,9 +15,13 @@
   expect(stringToUri("C:/full/windows/path.foo", windows: true).toString(),
       "file:///C:/full/windows/path.foo");
 
+  // Get current dir, making sure we use "/" and start with "/".
+  String currentDir = Directory.current.path.replaceAll(r'\', r'/');
+  if (!currentDir.startsWith(r'/')) currentDir = "/$currentDir";
+
   // Relative Windows path
   expect(stringToUri("partial\\windows\\path.foo", windows: true).toString(),
-      "file://${Directory.current.path}/partial/windows/path.foo");
+      "file://$currentDir/partial/windows/path.foo");
 
   // Full Unix path
   expect(stringToUri("/full/path/to/foo.bar", windows: false).toString(),
@@ -25,5 +29,5 @@
 
   // Relative Unix path
   expect(stringToUri("partial/path/to/foo.bar", windows: false).toString(),
-      "file://${Directory.current.path}/partial/path/to/foo.bar");
+      "file://$currentDir/partial/path/to/foo.bar");
 }
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 e85d898..41af78b 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
@@ -1109,10 +1109,17 @@
     throw new ArgumentError('Cannot extract type of null instance.');
   }
   var type = unwrapType(T);
-  if (type is AbstractFunctionType) {
+  if (type is AbstractFunctionType || _isFutureOr(type)) {
     throw new ArgumentError('Cannot extract from non-class type ($type).');
   }
-  List typeArgs = _extractTypes(getReifiedType(instance), type);
+  var typeArguments = getGenericArgs(type);
+  if (typeArguments.isEmpty) {
+    throw new ArgumentError('Cannot extract from non-generic type ($type).');
+  }
+  List typeArgs = _extractTypes(getReifiedType(instance), type, typeArguments);
+  // The signature of this method guarantees that instance is a T, so we
+  // should have a valid non-empty list at this point.
+  assert(typeArgs != null && typeArgs.isNotEmpty);
   return _checkAndCall(
       f, _getRuntimeType(f), JS('', 'void 0'), typeArgs, [], 'call');
 }
@@ -1130,8 +1137,7 @@
 // [String] depending on which it hits first.
 //
 // TODO(vsm): Consider merging with similar isClassSubType logic.
-List _extractTypes(Type t1, Type t2) => JS('', '''(() => {
-  let typeArguments2 = $getGenericArgs($t2);
+List _extractTypes(Type t1, Type t2, List typeArguments2) => JS('', '''(() => {
   if ($t1 == $t2) return typeArguments2;
 
   if ($t1 == $Object) return null;
@@ -1146,15 +1152,10 @@
   if (raw1 != null && raw1 == raw2) {
     let typeArguments1 = $getGenericArgs($t1);
     let length = typeArguments1.length;
-    if (typeArguments2.length == 0) {
-      // t2 is the raw form of t1
-      return typeArguments1;
-    } else if (length == 0) {
-      // t1 is raw, but t2 is not
-      if (typeArguments2.every($_isTop)) return typeArguments2;
-      return null;
-    }
-    if (length != typeArguments2.length) $assertFailed();
+    if (length == 0 || length != typeArguments2.length) $assertFailed();
+    // TODO(vsm): Remove this subtyping check if/when we eliminate the ability
+    // to implement multiple versions of the same interface
+    // (e.g., Foo<int>, Foo<String>).
     for (let i = 0; i < length; ++i) {
       let result =
           $_isSubtype(typeArguments1[i], typeArguments2[i], true);
@@ -1165,13 +1166,13 @@
     return typeArguments1;
   }
 
-  var result = $_extractTypes($t1.__proto__, $t2);
+  var result = $_extractTypes($t1.__proto__, $t2, $typeArguments2);
   if (result) return result;
 
   // Check mixin.
   let m1 = $getMixin($t1);
   if (m1 != null) {
-    result = $_extractTypes(m1, $t2);
+    result = $_extractTypes(m1, $t2, $typeArguments2);
     if (result) return result;
   }
 
@@ -1179,7 +1180,7 @@
   let getInterfaces = $getImplements($t1);
   if (getInterfaces) {
     for (let i1 of getInterfaces()) {
-      result = $_extractTypes(i1, $t2);
+      result = $_extractTypes(i1, $t2, $typeArguments2);
       if (result) return result;
     }
   }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
index 68a1c71..96879ad 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
@@ -32,6 +32,8 @@
   static const skipDart = const JsonMLConfig("skipDart");
   static const keyToString = const JsonMLConfig("keyToString");
   static const asClass = const JsonMLConfig("asClass");
+  static const asObject = const JsonMLConfig("asObject");
+  toString() => "JsonMLConfig($name)";
 }
 
 int _maxSpanLength = 100;
@@ -454,6 +456,7 @@
     // The order of formatters matters as formatters earlier in the list take
     // precedence.
     _formatters = [
+      new ObjectInternalsFormatter(),
       new ClassFormatter(),
       new TypeFormatter(),
       new NamedConstructorFormatter(),
@@ -555,15 +558,33 @@
     var type = dart.getType(object);
     var ret = new LinkedHashSet<NameValuePair>();
     // We use a Set rather than a List to avoid duplicates.
-    var properties = new Set<NameValuePair>();
-    addPropertiesFromSignature(dart.getFields(type), properties, object, true);
-    addPropertiesFromSignature(dart.getGetters(type), properties, object, true);
-    ret.addAll(sortProperties(properties));
+    var fields = new Set<NameValuePair>();
+    addPropertiesFromSignature(dart.getFields(type), fields, object, true);
+    var getters = new Set<NameValuePair>();
+    addPropertiesFromSignature(dart.getGetters(type), getters, object, true);
+    ret.addAll(sortProperties(fields));
+    ret.addAll(sortProperties(getters));
     addMetadataChildren(object, ret);
     return ret.toList();
   }
 }
 
+/// Show the object instance members and a reduced preview.
+///
+/// Used as a sub-entry to show the internals of objects that have a different
+/// primary format. For example, a Map shows the key-value pairs, but this makes
+/// the internals of the map visible for debugging.
+class ObjectInternalsFormatter extends ObjectFormatter {
+  bool accept(object, config) =>
+      super.accept(object, config) && config == JsonMLConfig.asObject;
+
+  // A minimal preview because we expect a full preview is already shown in a
+  // parent formatter.
+  String preview(object) {
+    return getObjectTypeName(object);
+  }
+}
+
 /// Formatter for module Dart Library objects.
 class LibraryModuleFormatter implements Formatter {
   accept(object, config) => dart.getModuleName(object) != null;
@@ -674,9 +695,20 @@
       entries.add(new NameValuePair(
           name: entries.length.toString(), value: entryWrapper));
     });
+    addInstanceMembers(object, entries);
     addMetadataChildren(object, entries);
     return entries.toList();
   }
+
+  // We've formatted as a Map, but we may want to see the internals
+  // of the Map, particularly for domain objects that implement Map.
+  // Add an ObjectFormatter view underneath.
+  void addInstanceMembers(object, Set<NameValuePair> ret) {
+    ret.add(new NameValuePair(
+        name: "[[instance members]]",
+        value: object,
+        config: JsonMLConfig.asObject));
+  }
 }
 
 /// Formatter for Dart Iterable objects including List and Set.
diff --git a/pkg/dev_compiler/tool/kernel_sdk.dart b/pkg/dev_compiler/tool/kernel_sdk.dart
index b16bd46..b94a9bb 100755
--- a/pkg/dev_compiler/tool/kernel_sdk.dart
+++ b/pkg/dev_compiler/tool/kernel_sdk.dart
@@ -3,8 +3,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
 import 'dart:async';
+import 'dart:convert' show JSON;
+import 'dart:io';
 import 'package:args/args.dart' show ArgParser;
 import 'package:dev_compiler/src/compiler/module_builder.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
@@ -17,17 +18,14 @@
 
 Future main(List<String> args) async {
   // Parse flags.
-  var parser = new ArgParser()
-    ..addFlag('generate-javascript',
-        help: 'Generate JavaScript (in addition to dill)', abbr: 'g');
+  var parser = new ArgParser();
   var parserOptions = parser.parse(args);
-  var generateJS = parserOptions['generate-javascript'] as bool;
   var rest = parserOptions.rest;
 
   Directory.current = path.dirname(path.dirname(path.fromUri(Platform.script)));
 
   var outputPath =
-      path.absolute(rest.length > 0 ? rest[0] : 'gen/sdk/ddc_sdk.dill');
+      path.absolute(rest.length > 0 ? rest[0] : 'gen/sdk/kernel/ddc_sdk.dill');
 
   patch_sdk.main(['../..', 'tool/input_sdk', 'gen/patched_sdk']);
 
@@ -43,14 +41,25 @@
   var inputs = target.extraRequiredLibraries.map(Uri.parse).toList();
   var program = await kernelForBuildUnit(inputs, options);
 
-  // Useful for debugging:
-  // writeProgramToText(program);
+  var outputDir = path.dirname(outputPath);
+  await new Directory(outputDir).create(recursive: true);
   await writeProgramToBinary(program, outputPath);
 
-  if (generateJS) {
-    var jsModule = compileToJSModule(program, [], [], {});
-    var jsPath = path.join(path.basename(outputPath), 'dart_sdk.kernel.js');
-    new File(jsPath)
-        .writeAsStringSync(jsProgramToCode(jsModule, ModuleFormat.es6).code);
+  var jsModule = compileToJSModule(program, [], [], {});
+  var moduleFormats = {
+    'amd': ModuleFormat.amd,
+    'common': ModuleFormat.common,
+    'es6': ModuleFormat.es6,
+    'legacy': ModuleFormat.legacy,
+  };
+
+  for (var name in moduleFormats.keys) {
+    var format = moduleFormats[name];
+    var jsDir = path.join(outputDir, name);
+    var jsPath = path.join(jsDir, 'dart_sdk.js');
+    await new Directory(jsDir).create();
+    var jsCode = jsProgramToCode(jsModule, format);
+    await new File(jsPath).writeAsString(jsCode.code);
+    await new File('$jsPath.map').writeAsString(JSON.encode(jsCode.sourceMap));
   }
 }
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 30eca21..ccfe2ea 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -13,7 +13,7 @@
 
 import 'compilation_message.dart';
 import 'file_system.dart';
-import 'physical_file_system.dart';
+import 'standard_file_system.dart';
 
 /// Callback used to report errors encountered during compilation.
 typedef void ErrorHandler(CompilationMessage error);
@@ -115,7 +115,7 @@
   /// mechanism, with one exception: if no value is specified for
   /// [packagesFileUri], the packages file is located using the actual physical
   /// file system.  TODO(paulberry): fix this.
-  FileSystem fileSystem = PhysicalFileSystem.instance;
+  FileSystem fileSystem = StandardFileSystem.instance;
 
   /// The byte storage to access serialized data.
   ByteStore byteStore = new NullByteStore();
diff --git a/pkg/front_end/lib/src/api_prototype/physical_file_system.dart b/pkg/front_end/lib/src/api_prototype/physical_file_system.dart
deleted file mode 100644
index 083f802..0000000
--- a/pkg/front_end/lib/src/api_prototype/physical_file_system.dart
+++ /dev/null
@@ -1,84 +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.
-
-library front_end.physical_file_system;
-
-import 'dart:async';
-import 'dart:io' as io;
-
-import 'file_system.dart';
-
-/// Concrete implementation of [FileSystem] which performs its operations using
-/// I/O.
-///
-/// Not intended to be implemented or extended by clients.
-class PhysicalFileSystem implements FileSystem {
-  static final PhysicalFileSystem instance = new PhysicalFileSystem._();
-
-  PhysicalFileSystem._();
-
-  @override
-  FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme != 'file' && uri.scheme != '') {
-      throw new FileSystemException(
-          uri, 'PhysicalFileSystem only supports file:* URIs');
-    }
-    return new _PhysicalFileSystemEntity(Uri.base.resolveUri(uri));
-  }
-}
-
-/// Concrete implementation of [FileSystemEntity] for use by
-/// [PhysicalFileSystem].
-class _PhysicalFileSystemEntity implements FileSystemEntity {
-  @override
-  final Uri uri;
-
-  _PhysicalFileSystemEntity(this.uri);
-
-  @override
-  int get hashCode => uri.hashCode;
-
-  @override
-  bool operator ==(Object other) =>
-      other is _PhysicalFileSystemEntity && other.uri == uri;
-
-  @override
-  Future<bool> exists() async {
-    if (await io.FileSystemEntity.isFile(uri.toFilePath())) {
-      return new io.File.fromUri(uri).exists();
-    } else {
-      return new io.Directory.fromUri(uri).exists();
-    }
-  }
-
-  @override
-  Future<List<int>> readAsBytes() async {
-    try {
-      return await new io.File.fromUri(uri).readAsBytes();
-    } on io.FileSystemException catch (exception) {
-      throw _toFileSystemException(exception);
-    }
-  }
-
-  @override
-  Future<String> readAsString() async {
-    try {
-      return await new io.File.fromUri(uri).readAsString();
-    } on io.FileSystemException catch (exception) {
-      throw _toFileSystemException(exception);
-    }
-  }
-
-  /**
-   * Return the [FileSystemException] for the given I/O exception.
-   */
-  FileSystemException _toFileSystemException(io.FileSystemException exception) {
-    String message = exception.message;
-    String osMessage = exception.osError?.message;
-    if (osMessage != null && osMessage.isNotEmpty) {
-      message = osMessage;
-    }
-    return new FileSystemException(uri, message);
-  }
-}
diff --git a/pkg/front_end/lib/src/api_prototype/standard_file_system.dart b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
new file mode 100644
index 0000000..c64cfd8
--- /dev/null
+++ b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
@@ -0,0 +1,119 @@
+// 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.
+
+library front_end.standard_file_system;
+
+import 'dart:async';
+import 'dart:io' as io;
+
+import 'file_system.dart';
+
+/// Concrete implementation of [FileSystem] handling standard URI schemes.
+///
+/// file: URIs are handled using file I/O.
+/// data: URIs return their data contents.
+///
+/// Not intended to be implemented or extended by clients.
+class StandardFileSystem implements FileSystem {
+  static final StandardFileSystem instance = new StandardFileSystem._();
+
+  StandardFileSystem._();
+
+  @override
+  FileSystemEntity entityForUri(Uri uri) {
+    if (uri.scheme == 'file' || uri.scheme == '') {
+      // TODO(askesc): Empty schemes should have been handled elsewhere.
+      return new _IoFileSystemEntity(Uri.base.resolveUri(uri));
+    } else if (uri.scheme == 'data') {
+      return new _DataFileSystemEntity(Uri.base.resolveUri(uri));
+    } else {
+      throw new FileSystemException(
+          uri, 'StandardFileSystem only supports file:* and data:* URIs');
+    }
+  }
+}
+
+/// Concrete implementation of [FileSystemEntity] for file: URIs.
+class _IoFileSystemEntity implements FileSystemEntity {
+  @override
+  final Uri uri;
+
+  _IoFileSystemEntity(this.uri);
+
+  @override
+  int get hashCode => uri.hashCode;
+
+  @override
+  bool operator ==(Object other) =>
+      other is _IoFileSystemEntity && other.uri == uri;
+
+  @override
+  Future<bool> exists() async {
+    if (await io.FileSystemEntity.isFile(uri.toFilePath())) {
+      return new io.File.fromUri(uri).exists();
+    } else {
+      return new io.Directory.fromUri(uri).exists();
+    }
+  }
+
+  @override
+  Future<List<int>> readAsBytes() async {
+    try {
+      return await new io.File.fromUri(uri).readAsBytes();
+    } on io.FileSystemException catch (exception) {
+      throw _toFileSystemException(exception);
+    }
+  }
+
+  @override
+  Future<String> readAsString() async {
+    try {
+      return await new io.File.fromUri(uri).readAsString();
+    } on io.FileSystemException catch (exception) {
+      throw _toFileSystemException(exception);
+    }
+  }
+
+  /**
+   * Return the [FileSystemException] for the given I/O exception.
+   */
+  FileSystemException _toFileSystemException(io.FileSystemException exception) {
+    String message = exception.message;
+    String osMessage = exception.osError?.message;
+    if (osMessage != null && osMessage.isNotEmpty) {
+      message = osMessage;
+    }
+    return new FileSystemException(uri, message);
+  }
+}
+
+/// Concrete implementation of [FileSystemEntity] for data: URIs.
+class _DataFileSystemEntity implements FileSystemEntity {
+  @override
+  final Uri uri;
+
+  _DataFileSystemEntity(this.uri);
+
+  @override
+  int get hashCode => uri.hashCode;
+
+  @override
+  bool operator ==(Object other) =>
+      other is _DataFileSystemEntity && other.uri == uri;
+
+  @override
+  Future<bool> exists() async {
+    return true;
+  }
+
+  @override
+  Future<List<int>> readAsBytes() async {
+    return uri.data.contentAsBytes();
+  }
+
+  @override
+  Future<String> readAsString() async {
+    return uri.data.contentAsString();
+  }
+}
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
index 14bc14c..5e0cf2c 100644
--- a/pkg/front_end/lib/src/api_unstable/ddc.dart
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -5,7 +5,7 @@
 import 'dart:async' show Future;
 
 import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/kernel_generator_impl.dart';
 import 'package:kernel/kernel.dart' show Program;
@@ -65,7 +65,7 @@
     ..packagesFileUri = packagesFile
     ..inputSummaries = inputSummaries
     ..target = target
-    ..fileSystem = fileSystem ?? PhysicalFileSystem.instance
+    ..fileSystem = fileSystem ?? StandardFileSystem.instance
     ..chaseDependencies = true
     ..reportMessages = true;
 
diff --git a/pkg/front_end/lib/src/api_unstable/summary_worker.dart b/pkg/front_end/lib/src/api_unstable/summary_worker.dart
index b34fc82..d5c8b18 100644
--- a/pkg/front_end/lib/src/api_unstable/summary_worker.dart
+++ b/pkg/front_end/lib/src/api_unstable/summary_worker.dart
@@ -17,7 +17,7 @@
 
 export 'compiler_state.dart';
 
-export '../api_prototype/physical_file_system.dart' show PhysicalFileSystem;
+export '../api_prototype/standard_file_system.dart' show StandardFileSystem;
 export '../fasta/fasta_codes.dart' show LocatedMessage;
 export '../fasta/severity.dart' show Severity;
 
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 48d6b74..7043564 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -32,6 +32,9 @@
     extends TypeDeclarationBuilder<T, R> {
   final List<TypeVariableBuilder> typeVariables;
 
+  /// List of type arguments provided by instantiate to bound.
+  List<TypeBuilder> get calculatedBounds => null;
+
   T supertype;
 
   List<T> interfaces;
@@ -219,11 +222,7 @@
     library.addCompileTimeError(message, charOffset, fileUri, context: context);
   }
 
-  void addWarning(Message message, int charOffset, {LocatedMessage context}) {
-    library.addWarning(message, charOffset, fileUri, context: context);
-  }
-
-  void addNit(Message message, int charOffset, {LocatedMessage context}) {
-    library.addNit(message, charOffset, fileUri, context: context);
+  void addProblem(Message message, int charOffset, {LocatedMessage context}) {
+    library.addProblem(message, charOffset, fileUri, context: context);
   }
 }
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 3ea7514..eb2b923 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
@@ -59,7 +59,7 @@
           suffix ?? "", charOffset, fileUri, accessingLibrary);
     }
     if (target == null) {
-      accessingLibrary.addWarning(
+      accessingLibrary.addProblem(
           templateConstructorNotFound.withArguments(fullNameForErrors),
           charOffset,
           fileUri);
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 347d208..710e5e3 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
@@ -18,6 +18,9 @@
 
   final List<TypeVariableBuilder> typeVariables;
 
+  /// List of type arguments provided by instantiate to bound.
+  List<TypeBuilder> get calculatedBounds;
+
   FunctionTypeAliasBuilder(List<MetadataBuilder> metadata, String name,
       this.typeVariables, this.type, LibraryBuilder parent, int charOffset)
       : super(metadata, null, name, parent, charOffset);
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 dbbc106..e9f701a 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -83,16 +83,11 @@
         wasHandled: wasHandled, context: context);
   }
 
-  void addWarning(Message message, int charOffset, Uri fileUri,
+  /// Add a problem with a severity determined by the severity of the message.
+  void addProblem(Message message, int charOffset, Uri fileUri,
       {LocatedMessage context}) {
     fileUri ??= this.fileUri;
-    loader.addWarning(message, charOffset, fileUri, context: context);
-  }
-
-  void addNit(Message message, int charOffset, Uri fileUri,
-      {LocatedMessage context}) {
-    fileUri ??= this.fileUri;
-    loader.addNit(message, charOffset, fileUri, context: context);
+    loader.addProblem(message, charOffset, fileUri, context: context);
   }
 
   /// Returns true if the export scope was modified.
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index aeeaca7..2f48cb8 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -23,7 +23,7 @@
 
 import 'messages.dart' show getLocation, getSourceLine, isVerbose;
 
-import 'problems.dart' show unhandled;
+import 'problems.dart' show unexpected;
 
 import 'severity.dart' show Severity;
 
@@ -59,6 +59,9 @@
         case Severity.warning:
           text = magenta(text);
           break;
+
+        default:
+          return unexpected("$severity", "formatInternal", -1, null);
       }
     }
 
@@ -102,8 +105,10 @@
 
     case Severity.warning:
       return hideWarnings;
+
+    default:
+      return unexpected("$severity", "isHidden", -1, null);
   }
-  return unhandled("$severity", "isHidden", -1, null);
 }
 
 /// Are problems of [severity] fatal? That is, should the compiler terminate
@@ -121,8 +126,10 @@
 
     case Severity.warning:
       return CompilerContext.current.options.throwOnWarningsForDebugging;
+
+    default:
+      return unexpected("$severity", "shouldThrowOn", -1, null);
   }
-  return unhandled("$severity", "shouldThrowOn", -1, null);
 }
 
 /// Convert [severity] to a name that can be used to prefix a message.
@@ -139,8 +146,10 @@
 
     case Severity.warning:
       return capitalized ? "Warning" : "warning";
+
+    default:
+      return unexpected("$severity", "severityName", -1, null);
   }
-  return unhandled("$severity", "severityName", -1, null);
 }
 
 /// Print a formatted message and throw when errors are treated as fatal.
diff --git a/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart
deleted file mode 100644
index 0776650..0000000
--- a/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart
+++ /dev/null
@@ -1,44 +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.built_type_variable_builder;
-
-import 'package:kernel/ast.dart'
-    show DartType, TypeParameter, TypeParameterType;
-
-import '../kernel/kernel_builder.dart'
-    show
-        TypeVariableBuilder,
-        KernelTypeBuilder,
-        LibraryBuilder,
-        KernelNamedTypeBuilder,
-        KernelLibraryBuilder;
-
-class BuiltTypeVariableBuilder
-    extends TypeVariableBuilder<KernelTypeBuilder, DartType> {
-  final TypeParameter builtTypeParameter;
-
-  TypeParameter get target => builtTypeParameter;
-
-  BuiltTypeVariableBuilder(String name, this.builtTypeParameter,
-      KernelLibraryBuilder compilationUnit, int charOffset,
-      [KernelTypeBuilder bound])
-      : super(name, bound, compilationUnit, charOffset);
-
-  DartType buildType(
-      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
-    // TODO(dmitryas): Do we need a check for [arguments] here?
-    return new TypeParameterType(builtTypeParameter);
-  }
-
-  DartType buildTypesWithBuiltArguments(
-      LibraryBuilder library, List<DartType> arguments) {
-    // TODO(dmitryas): Do we need a check for [arguments] here?
-    return new TypeParameterType(builtTypeParameter);
-  }
-
-  KernelTypeBuilder asTypeBuilder() {
-    return new KernelNamedTypeBuilder(name, null)..bind(this);
-  }
-}
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 8605dcb..caa23e7 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -16,7 +16,7 @@
         KernelClassBuilder,
         KernelTypeBuilder,
         Scope,
-        TypeVariableBuilder;
+        TypeBuilder;
 
 import '../modifier.dart' show abstractMask;
 
@@ -24,8 +24,6 @@
 
 import 'dill_library_builder.dart' show DillLibraryBuilder;
 
-import 'built_type_variable_builder.dart' show BuiltTypeVariableBuilder;
-
 import 'built_type_builder.dart' show BuiltTypeBuilder;
 
 class DillClassBuilder extends KernelClassBuilder {
@@ -62,22 +60,24 @@
     }
   }
 
-  List<TypeVariableBuilder> get typeVariables {
+  List<TypeBuilder> get calculatedBounds {
+    if (super.calculatedBounds != null) {
+      return super.calculatedBounds;
+    }
     DillLibraryBuilder parentLibraryBuilder = parent;
     DillClassBuilder objectClassBuilder =
         parentLibraryBuilder.loader.coreLibrary["Object"];
     Class objectClass = objectClassBuilder.cls;
     List<TypeParameter> targetTypeParameters = target.typeParameters;
-    List<DartType> calculatedBounds =
+    List<DartType> calculatedBoundTypes =
         calculateBounds(targetTypeParameters, objectClass);
-    List<TypeVariableBuilder> typeVariables =
-        new List<BuiltTypeVariableBuilder>(targetTypeParameters.length);
-    for (int i = 0; i < typeVariables.length; i++) {
-      TypeParameter parameter = targetTypeParameters[i];
-      typeVariables[i] = new BuiltTypeVariableBuilder(parameter.name, parameter,
-          null, charOffset, new BuiltTypeBuilder(calculatedBounds[i]));
+    List<TypeBuilder> result =
+        new List<BuiltTypeBuilder>(targetTypeParameters.length);
+    for (int i = 0; i < result.length; i++) {
+      result[i] = new BuiltTypeBuilder(calculatedBoundTypes[i]);
     }
-    return typeVariables;
+    super.calculatedBounds = result;
+    return super.calculatedBounds;
   }
 
   /// Returns true if this class is the result of applying a mixin to its
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
index 66b097c..7f9ba1b 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
@@ -14,7 +14,7 @@
         KernelFunctionTypeBuilder,
         LibraryBuilder,
         MetadataBuilder,
-        TypeVariableBuilder;
+        TypeBuilder;
 
 import '../problems.dart' show unimplemented;
 
@@ -22,8 +22,6 @@
 
 import 'dill_class_builder.dart' show DillClassBuilder;
 
-import 'built_type_variable_builder.dart' show BuiltTypeVariableBuilder;
-
 import 'built_type_builder.dart' show BuiltTypeBuilder;
 
 class DillFunctionTypeAliasBuilder extends KernelFunctionTypeAliasBuilder {
@@ -35,23 +33,24 @@
     return unimplemented("metadata", -1, null);
   }
 
-  @override
-  List<TypeVariableBuilder> get typeVariables {
+  List<TypeBuilder> get calculatedBounds {
+    if (super.calculatedBounds != null) {
+      return super.calculatedBounds;
+    }
     DillLibraryBuilder parentLibraryBuilder = parent;
     DillClassBuilder objectClassBuilder =
         parentLibraryBuilder.loader.coreLibrary["Object"];
     Class objectClass = objectClassBuilder.cls;
     List<TypeParameter> targetTypeParameters = target.typeParameters;
-    List<DartType> calculatedBounds =
+    List<DartType> calculatedBoundTypes =
         calculateBounds(targetTypeParameters, objectClass);
-    List<TypeVariableBuilder> typeVariables =
-        new List<BuiltTypeVariableBuilder>(targetTypeParameters.length);
-    for (int i = 0; i < typeVariables.length; i++) {
-      TypeParameter parameter = targetTypeParameters[i];
-      typeVariables[i] = new BuiltTypeVariableBuilder(parameter.name, parameter,
-          null, charOffset, new BuiltTypeBuilder(calculatedBounds[i]));
+    List<TypeBuilder> result =
+        new List<BuiltTypeBuilder>(targetTypeParameters.length);
+    for (int i = 0; i < result.length; i++) {
+      result[i] = new BuiltTypeBuilder(calculatedBoundTypes[i]);
     }
-    return typeVariables;
+    super.calculatedBounds = result;
+    return super.calculatedBounds;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 59eee7e..5e36e3d 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -10,6 +10,8 @@
 
 import '../scanner/token.dart' show Token;
 
+import 'severity.dart' show Severity;
+
 import 'util/relativize.dart' as util show relativizeUri;
 
 part 'fasta_codes_generated.dart';
@@ -23,7 +25,10 @@
 
   final String dart2jsCode;
 
-  const Code(this.name, this.template, {this.analyzerCode, this.dart2jsCode});
+  final Severity severity;
+
+  const Code(this.name, this.template,
+      {this.analyzerCode, this.dart2jsCode, this.severity});
 
   String toString() => name;
 }
@@ -50,8 +55,15 @@
   final String tip;
 
   const MessageCode(String name,
-      {String analyzerCode, String dart2jsCode, this.message, this.tip})
-      : super(name, null, analyzerCode: analyzerCode, dart2jsCode: dart2jsCode);
+      {String analyzerCode,
+      String dart2jsCode,
+      Severity severity,
+      this.message,
+      this.tip})
+      : super(name, null,
+            analyzerCode: analyzerCode,
+            dart2jsCode: dart2jsCode,
+            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 f84087b..4eaf799 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -20,9 +20,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeAbstractClassInstantiation =
     const Code<Message Function(String name)>(
-  "AbstractClassInstantiation",
-  templateAbstractClassInstantiation,
-);
+        "AbstractClassInstantiation", templateAbstractClassInstantiation,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsAbstractClassInstantiation(String name) {
@@ -65,9 +64,9 @@
 const Code<Message Function(String name)>
     codeAbstractRedirectedClassInstantiation =
     const Code<Message Function(String name)>(
-  "AbstractRedirectedClassInstantiation",
-  templateAbstractRedirectedClassInstantiation,
-);
+        "AbstractRedirectedClassInstantiation",
+        templateAbstractRedirectedClassInstantiation,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsAbstractRedirectedClassInstantiation(String name) {
@@ -229,6 +228,7 @@
 const Code<Message Function(Token token)> codeBuiltInIdentifierInDeclaration =
     const Code<Message Function(Token token)>("BuiltInIdentifierInDeclaration",
         templateBuiltInIdentifierInDeclaration,
+        analyzerCode: "BUILT_IN_IDENTIFIER_IN_DECLARATION",
         dart2jsCode: "GENERIC");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -348,9 +348,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String string)> codeCantInferTypeDueToCircularity =
     const Code<Message Function(String string)>(
-  "CantInferTypeDueToCircularity",
-  templateCantInferTypeDueToCircularity,
-);
+        "CantInferTypeDueToCircularity", templateCantInferTypeDueToCircularity,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCantInferTypeDueToCircularity(String string) {
@@ -428,9 +427,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConflictsWithConstructor =
     const Code<Message Function(String name)>(
-  "ConflictsWithConstructor",
-  templateConflictsWithConstructor,
-);
+        "ConflictsWithConstructor", templateConflictsWithConstructor,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithConstructor(String name) {
@@ -448,9 +446,8 @@
 // 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,
-);
+        "ConflictsWithFactory", templateConflictsWithFactory,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithFactory(String name) {
@@ -468,9 +465,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConflictsWithMember =
     const Code<Message Function(String name)>(
-  "ConflictsWithMember",
-  templateConflictsWithMember,
-);
+        "ConflictsWithMember", templateConflictsWithMember,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithMember(String name) {
@@ -479,6 +475,25 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateConflictsWithMemberWarning =
+    const Template<Message Function(String name)>(
+        messageTemplate: r"""Conflicts with member '#name'.""",
+        withArguments: _withArgumentsConflictsWithMemberWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeConflictsWithMemberWarning =
+    const Code<Message Function(String name)>(
+        "ConflictsWithMemberWarning", templateConflictsWithMemberWarning,
+        severity: Severity.errorLegacyWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsConflictsWithMemberWarning(String name) {
+  return new Message(codeConflictsWithMemberWarning,
+      message: """Conflicts with member '$name'.""", arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConflictsWithSetter =
     const Template<Message Function(String name)>(
         messageTemplate: r"""Conflicts with setter '#name'.""",
@@ -487,9 +502,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConflictsWithSetter =
     const Code<Message Function(String name)>(
-  "ConflictsWithSetter",
-  templateConflictsWithSetter,
-);
+        "ConflictsWithSetter", templateConflictsWithSetter,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithSetter(String name) {
@@ -499,6 +513,25 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
+    templateConflictsWithSetterWarning =
+    const Template<Message Function(String name)>(
+        messageTemplate: r"""Conflicts with setter '#name'.""",
+        withArguments: _withArgumentsConflictsWithSetterWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeConflictsWithSetterWarning =
+    const Code<Message Function(String name)>(
+        "ConflictsWithSetterWarning", templateConflictsWithSetterWarning,
+        severity: Severity.errorLegacyWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsConflictsWithSetterWarning(String name) {
+  return new Message(codeConflictsWithSetterWarning,
+      message: """Conflicts with setter '$name'.""", arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
     templateConflictsWithTypeVariable =
     const Template<Message Function(String name)>(
         messageTemplate: r"""Conflicts with type variable '#name'.""",
@@ -507,9 +540,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConflictsWithTypeVariable =
     const Code<Message Function(String name)>(
-  "ConflictsWithTypeVariable",
-  templateConflictsWithTypeVariable,
-);
+        "ConflictsWithTypeVariable", templateConflictsWithTypeVariable,
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithTypeVariable(String name) {
@@ -525,6 +557,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConflictsWithTypeVariableCause = const MessageCode(
     "ConflictsWithTypeVariableCause",
+    severity: Severity.error,
     message: r"""This is the type variable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -655,9 +688,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConstructorNotFound =
     const Code<Message Function(String name)>(
-  "ConstructorNotFound",
-  templateConstructorNotFound,
-);
+        "ConstructorNotFound", templateConstructorNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstructorNotFound(String name) {
@@ -938,9 +970,10 @@
 const Code<Message Function(String name, Uri uri_, Uri uri2_)>
     codeDuplicatedExport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
-  "DuplicatedExport",
-  templateDuplicatedExport,
-);
+        "DuplicatedExport", templateDuplicatedExport,
+        analyzerCode: "AMBIGUOUS_EXPORT",
+        dart2jsCode: "*ignored*",
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedExport(String name, Uri uri_, Uri uri2_) {
@@ -953,6 +986,30 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, Uri uri_, Uri uri2_)>
+    templateDuplicatedExportInType =
+    const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
+        messageTemplate:
+            r"""'#name' is exported from both '#uri' and '#uri2'.""",
+        withArguments: _withArgumentsDuplicatedExportInType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, Uri uri_, Uri uri2_)>
+    codeDuplicatedExportInType =
+    const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
+        "DuplicatedExportInType", templateDuplicatedExportInType,
+        severity: Severity.errorLegacyWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedExportInType(String name, Uri uri_, Uri uri2_) {
+  String uri = relativizeUri(uri_);
+  String uri2 = relativizeUri(uri2_);
+  return new Message(codeDuplicatedExportInType,
+      message: """'$name' is exported from both '$uri' and '$uri2'.""",
+      arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, Uri uri_, Uri uri2_)>
     templateDuplicatedImport =
     const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
         messageTemplate:
@@ -963,9 +1020,8 @@
 const Code<Message Function(String name, Uri uri_, Uri uri2_)>
     codeDuplicatedImport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
-  "DuplicatedImport",
-  templateDuplicatedImport,
-);
+        "DuplicatedImport", templateDuplicatedImport,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedImport(String name, Uri uri_, Uri uri2_) {
@@ -977,6 +1033,30 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, Uri uri_, Uri uri2_)>
+    templateDuplicatedImportInType =
+    const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
+        messageTemplate:
+            r"""'#name' is imported from both '#uri' and '#uri2'.""",
+        withArguments: _withArgumentsDuplicatedImportInType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, Uri uri_, Uri uri2_)>
+    codeDuplicatedImportInType =
+    const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
+        "DuplicatedImportInType", templateDuplicatedImportInType,
+        severity: Severity.errorLegacyWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedImportInType(String name, Uri uri_, Uri uri2_) {
+  String uri = relativizeUri(uri_);
+  String uri2 = relativizeUri(uri2_);
+  return new Message(codeDuplicatedImportInType,
+      message: """'$name' is imported from both '$uri' and '$uri2'.""",
+      arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateDuplicatedModifier =
     const Template<Message Function(Token token)>(
         messageTemplate: r"""The modifier '#lexeme' was already specified.""",
@@ -1325,7 +1405,9 @@
 const Code<Message Function(Token token)> codeExpectedIdentifier =
     const Code<Message Function(Token token)>(
         "ExpectedIdentifier", templateExpectedIdentifier,
-        analyzerCode: "MISSING_IDENTIFIER", dart2jsCode: "*fatal*");
+        analyzerCode: "MISSING_IDENTIFIER",
+        dart2jsCode: "*fatal*",
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedIdentifier(Token token) {
@@ -1432,9 +1514,8 @@
 const Code<Message Function(String name, Uri uri_, Uri uri2_)>
     codeExportHidesExport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
-  "ExportHidesExport",
-  templateExportHidesExport,
-);
+        "ExportHidesExport", templateExportHidesExport,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExportHidesExport(String name, Uri uri_, Uri uri2_) {
@@ -1485,9 +1566,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeExtendingRestricted =
     const Code<Message Function(String name)>(
-  "ExtendingRestricted",
-  templateExtendingRestricted,
-);
+        "ExtendingRestricted", templateExtendingRestricted,
+        analyzerCode: "EXTENDS_DISALLOWED_CLASS", dart2jsCode: "*ignored*");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExtendingRestricted(String name) {
@@ -1809,9 +1889,9 @@
 const Code<Message Function(String name)>
     codeFinalInstanceVariableAlreadyInitialized =
     const Code<Message Function(String name)>(
-  "FinalInstanceVariableAlreadyInitialized",
-  templateFinalInstanceVariableAlreadyInitialized,
-);
+        "FinalInstanceVariableAlreadyInitialized",
+        templateFinalInstanceVariableAlreadyInitialized,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalInstanceVariableAlreadyInitialized(String name) {
@@ -1833,9 +1913,9 @@
 const Code<Message Function(String name)>
     codeFinalInstanceVariableAlreadyInitializedCause =
     const Code<Message Function(String name)>(
-  "FinalInstanceVariableAlreadyInitializedCause",
-  templateFinalInstanceVariableAlreadyInitializedCause,
-);
+        "FinalInstanceVariableAlreadyInitializedCause",
+        templateFinalInstanceVariableAlreadyInitializedCause,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalInstanceVariableAlreadyInitializedCause(
@@ -1873,9 +1953,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeGetterNotFound =
     const Code<Message Function(String name)>(
-  "GetterNotFound",
-  templateGetterNotFound,
-);
+        "GetterNotFound", templateGetterNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsGetterNotFound(String name) {
@@ -2026,9 +2105,8 @@
 const Code<Message Function(String name, Uri uri_, Uri uri2_)>
     codeImportHidesImport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
-  "ImportHidesImport",
-  templateImportHidesImport,
-);
+        "ImportHidesImport", templateImportHidesImport,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsImportHidesImport(String name, Uri uri_, Uri uri2_) {
@@ -2096,6 +2174,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemAlreadyInitialized = const MessageCode(
     "InternalProblemAlreadyInitialized",
+    severity: Severity.internalProblem,
     message: r"""Attempt to set initializer on field without initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2105,6 +2184,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemBodyOnAbstractMethod =
     const MessageCode("InternalProblemBodyOnAbstractMethod",
+        severity: Severity.internalProblem,
         message: r"""Attempting to set body on abstract method.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2118,9 +2198,9 @@
 const Code<Message Function(String name, Uri uri_)>
     codeInternalProblemConstructorNotFound =
     const Code<Message Function(String name, Uri uri_)>(
-  "InternalProblemConstructorNotFound",
-  templateInternalProblemConstructorNotFound,
-);
+        "InternalProblemConstructorNotFound",
+        templateInternalProblemConstructorNotFound,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemConstructorNotFound(
@@ -2138,6 +2218,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemExtendingUnmodifiableScope =
     const MessageCode("InternalProblemExtendingUnmodifiableScope",
+        severity: Severity.internalProblem,
         message: r"""Can't extend an unmodifiable scope.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2147,11 +2228,33 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemMissingContext = const MessageCode(
     "InternalProblemMissingContext",
+    severity: Severity.internalProblem,
     message: r"""Compiler cannot run without a compiler context.""",
     tip:
         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'.""",
@@ -2160,9 +2263,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeInternalProblemNotFound =
     const Code<Message Function(String name)>(
-  "InternalProblemNotFound",
-  templateInternalProblemNotFound,
-);
+        "InternalProblemNotFound", templateInternalProblemNotFound,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemNotFound(String name) {
@@ -2181,9 +2283,8 @@
 const Code<Message Function(String name, String name2)>
     codeInternalProblemNotFoundIn =
     const Code<Message Function(String name, String name2)>(
-  "InternalProblemNotFoundIn",
-  templateInternalProblemNotFoundIn,
-);
+        "InternalProblemNotFoundIn", templateInternalProblemNotFoundIn,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemNotFoundIn(String name, String name2) {
@@ -2199,6 +2300,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemPreviousTokenNotFound =
     const MessageCode("InternalProblemPreviousTokenNotFound",
+        severity: Severity.internalProblem,
         message: r"""Couldn't find previous token.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2212,9 +2314,9 @@
 const Code<Message Function(String name)>
     codeInternalProblemPrivateConstructorAccess =
     const Code<Message Function(String name)>(
-  "InternalProblemPrivateConstructorAccess",
-  templateInternalProblemPrivateConstructorAccess,
-);
+        "InternalProblemPrivateConstructorAccess",
+        templateInternalProblemPrivateConstructorAccess,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemPrivateConstructorAccess(String name) {
@@ -2230,6 +2332,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInternalProblemProvidedBothCompileSdkAndSdkSummary =
     const MessageCode("InternalProblemProvidedBothCompileSdkAndSdkSummary",
+        severity: Severity.internalProblem,
         message:
             r"""The compileSdk and sdkSummary options are mutually exclusive""");
 
@@ -2244,9 +2347,8 @@
 const Code<Message Function(String name, String string)>
     codeInternalProblemStackNotEmpty =
     const Code<Message Function(String name, String string)>(
-  "InternalProblemStackNotEmpty",
-  templateInternalProblemStackNotEmpty,
-);
+        "InternalProblemStackNotEmpty", templateInternalProblemStackNotEmpty,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemStackNotEmpty(String name, String string) {
@@ -2266,9 +2368,9 @@
 const Code<Message Function(String name)>
     codeInternalProblemSuperclassNotFound =
     const Code<Message Function(String name)>(
-  "InternalProblemSuperclassNotFound",
-  templateInternalProblemSuperclassNotFound,
-);
+        "InternalProblemSuperclassNotFound",
+        templateInternalProblemSuperclassNotFound,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemSuperclassNotFound(String name) {
@@ -2287,9 +2389,8 @@
 const Code<Message Function(String string, String string2)>
     codeInternalProblemUnexpected =
     const Code<Message Function(String string, String string2)>(
-  "InternalProblemUnexpected",
-  templateInternalProblemUnexpected,
-);
+        "InternalProblemUnexpected", templateInternalProblemUnexpected,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemUnexpected(String string, String string2) {
@@ -2309,9 +2410,8 @@
 const Code<Message Function(String string, String string2)>
     codeInternalProblemUnhandled =
     const Code<Message Function(String string, String string2)>(
-  "InternalProblemUnhandled",
-  templateInternalProblemUnhandled,
-);
+        "InternalProblemUnhandled", templateInternalProblemUnhandled,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemUnhandled(String string, String string2) {
@@ -2330,9 +2430,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String string)> codeInternalProblemUnimplemented =
     const Code<Message Function(String string)>(
-  "InternalProblemUnimplemented",
-  templateInternalProblemUnimplemented,
-);
+        "InternalProblemUnimplemented", templateInternalProblemUnimplemented,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemUnimplemented(String string) {
@@ -2350,9 +2449,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeInternalProblemUnsupported =
     const Code<Message Function(String name)>(
-  "InternalProblemUnsupported",
-  templateInternalProblemUnsupported,
-);
+        "InternalProblemUnsupported", templateInternalProblemUnsupported,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemUnsupported(String name) {
@@ -2370,10 +2468,9 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(Uri uri_)> codeInternalProblemUriMissingScheme =
-    const Code<Message Function(Uri uri_)>(
-  "InternalProblemUriMissingScheme",
-  templateInternalProblemUriMissingScheme,
-);
+    const Code<Message Function(Uri uri_)>("InternalProblemUriMissingScheme",
+        templateInternalProblemUriMissingScheme,
+        severity: Severity.internalProblem);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInternalProblemUriMissingScheme(Uri uri_) {
@@ -2835,6 +2932,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageListLiteralTooManyTypeArguments = const MessageCode(
     "ListLiteralTooManyTypeArguments",
+    severity: Severity.errorLegacyWarning,
     message: r"""Too many type arguments on List literal.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2844,6 +2942,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageListLiteralTypeArgumentMismatch = const MessageCode(
     "ListLiteralTypeArgumentMismatch",
+    severity: Severity.errorLegacyWarning,
     message: r"""Map literal requires two type arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2858,9 +2957,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(Uri uri_)> codeLoadLibraryHidesMember =
     const Code<Message Function(Uri uri_)>(
-  "LoadLibraryHidesMember",
-  templateLoadLibraryHidesMember,
-);
+        "LoadLibraryHidesMember", templateLoadLibraryHidesMember,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsLoadLibraryHidesMember(Uri uri_) {
@@ -2879,6 +2977,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLoadLibraryTakesNoArguments = const MessageCode(
     "LoadLibraryTakesNoArguments",
+    severity: Severity.errorLegacyWarning,
     message: r"""'loadLibrary' takes no arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2893,9 +2992,8 @@
 const Code<Message Function(String name, Uri uri_)>
     codeLocalDefinitionHidesExport =
     const Code<Message Function(String name, Uri uri_)>(
-  "LocalDefinitionHidesExport",
-  templateLocalDefinitionHidesExport,
-);
+        "LocalDefinitionHidesExport", templateLocalDefinitionHidesExport,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsLocalDefinitionHidesExport(String name, Uri uri_) {
@@ -2917,9 +3015,8 @@
 const Code<Message Function(String name, Uri uri_)>
     codeLocalDefinitionHidesImport =
     const Code<Message Function(String name, Uri uri_)>(
-  "LocalDefinitionHidesImport",
-  templateLocalDefinitionHidesImport,
-);
+        "LocalDefinitionHidesImport", templateLocalDefinitionHidesImport,
+        severity: Severity.nit);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsLocalDefinitionHidesImport(String name, Uri uri_) {
@@ -2957,9 +3054,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeMethodNotFound =
     const Code<Message Function(String name)>(
-  "MethodNotFound",
-  templateMethodNotFound,
-);
+        "MethodNotFound", templateMethodNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsMethodNotFound(String name) {
@@ -3258,6 +3354,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNonInstanceTypeVariableUse = const MessageCode(
     "NonInstanceTypeVariableUse",
+    severity: Severity.errorLegacyWarning,
     message: r"""Can only use type variables in instance methods.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3281,7 +3378,9 @@
 // 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");
+        analyzerCode: "NOT_A_TYPE",
+        dart2jsCode: "*ignored*",
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNotAType(String name) {
@@ -3443,9 +3542,8 @@
 const Code<Message Function(String name, String name2)>
     codeOverrideFewerNamedArguments =
     const Code<Message Function(String name, String name2)>(
-  "OverrideFewerNamedArguments",
-  templateOverrideFewerNamedArguments,
-);
+        "OverrideFewerNamedArguments", templateOverrideFewerNamedArguments,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideFewerNamedArguments(String name, String name2) {
@@ -3470,9 +3568,9 @@
 const Code<Message Function(String name, String name2)>
     codeOverrideFewerPositionalArguments =
     const Code<Message Function(String name, String name2)>(
-  "OverrideFewerPositionalArguments",
-  templateOverrideFewerPositionalArguments,
-);
+        "OverrideFewerPositionalArguments",
+        templateOverrideFewerPositionalArguments,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideFewerPositionalArguments(
@@ -3499,9 +3597,9 @@
 const Code<Message Function(String name, String name2, String name3)>
     codeOverrideMismatchNamedParameter =
     const Code<Message Function(String name, String name2, String name3)>(
-  "OverrideMismatchNamedParameter",
-  templateOverrideMismatchNamedParameter,
-);
+        "OverrideMismatchNamedParameter",
+        templateOverrideMismatchNamedParameter,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideMismatchNamedParameter(
@@ -3527,9 +3625,8 @@
 const Code<Message Function(String name, String name2)>
     codeOverrideMoreRequiredArguments =
     const Code<Message Function(String name, String name2)>(
-  "OverrideMoreRequiredArguments",
-  templateOverrideMoreRequiredArguments,
-);
+        "OverrideMoreRequiredArguments", templateOverrideMoreRequiredArguments,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideMoreRequiredArguments(String name, String name2) {
@@ -3645,9 +3742,8 @@
 const Code<Message Function(String name, String name2)>
     codeOverrideTypeVariablesMismatch =
     const Code<Message Function(String name, String name2)>(
-  "OverrideTypeVariablesMismatch",
-  templateOverrideTypeVariablesMismatch,
-);
+        "OverrideTypeVariablesMismatch", templateOverrideTypeVariablesMismatch,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideTypeVariablesMismatch(String name, String name2) {
@@ -3696,9 +3792,8 @@
 const Code<Message Function(Uri uri_, String name, String name2)>
     codePartOfLibraryNameMismatch =
     const Code<Message Function(Uri uri_, String name, String name2)>(
-  "PartOfLibraryNameMismatch",
-  templatePartOfLibraryNameMismatch,
-);
+        "PartOfLibraryNameMismatch", templatePartOfLibraryNameMismatch,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsPartOfLibraryNameMismatch(
@@ -3743,9 +3838,8 @@
 const Code<Message Function(Uri uri_, Uri uri2_, Uri uri3_)>
     codePartOfUriMismatch =
     const Code<Message Function(Uri uri_, Uri uri2_, Uri uri3_)>(
-  "PartOfUriMismatch",
-  templatePartOfUriMismatch,
-);
+        "PartOfUriMismatch", templatePartOfUriMismatch,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsPartOfUriMismatch(Uri uri_, Uri uri2_, Uri uri3_) {
@@ -3776,9 +3870,8 @@
 const Code<Message Function(Uri uri_, Uri uri2_, String name)>
     codePartOfUseUri =
     const Code<Message Function(Uri uri_, Uri uri2_, String name)>(
-  "PartOfUseUri",
-  templatePartOfUseUri,
-);
+        "PartOfUseUri", templatePartOfUseUri,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsPartOfUseUri(Uri uri_, Uri uri2_, String name) {
@@ -3978,9 +4071,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeRedirectionTargetNotFound =
     const Code<Message Function(String name)>(
-  "RedirectionTargetNotFound",
-  templateRedirectionTargetNotFound,
-);
+        "RedirectionTargetNotFound", templateRedirectionTargetNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsRedirectionTargetNotFound(String name) {
@@ -4010,6 +4102,7 @@
 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.
@@ -4090,9 +4183,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeSetterNotFound =
     const Code<Message Function(String name)>(
-  "SetterNotFound",
-  templateSetterNotFound,
-);
+        "SetterNotFound", templateSetterNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSetterNotFound(String name) {
@@ -4301,9 +4393,10 @@
 const Code<Message Function(String name)>
     codeSuperclassHasNoDefaultConstructor =
     const Code<Message Function(String name)>(
-  "SuperclassHasNoDefaultConstructor",
-  templateSuperclassHasNoDefaultConstructor,
-);
+        "SuperclassHasNoDefaultConstructor",
+        templateSuperclassHasNoDefaultConstructor,
+        analyzerCode: "NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT",
+        dart2jsCode: "*ignored*");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassHasNoDefaultConstructor(String name) {
@@ -4322,9 +4415,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeSuperclassHasNoGetter =
     const Code<Message Function(String name)>(
-  "SuperclassHasNoGetter",
-  templateSuperclassHasNoGetter,
-);
+        "SuperclassHasNoGetter", templateSuperclassHasNoGetter,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassHasNoGetter(String name) {
@@ -4343,7 +4435,9 @@
 const Code<Message Function(String name)> codeSuperclassHasNoMethod =
     const Code<Message Function(String name)>(
         "SuperclassHasNoMethod", templateSuperclassHasNoMethod,
-        analyzerCode: "UNDEFINED_SUPER_METHOD");
+        analyzerCode: "UNDEFINED_SUPER_METHOD",
+        dart2jsCode: "*ignored*",
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassHasNoMethod(String name) {
@@ -4361,9 +4455,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeSuperclassHasNoSetter =
     const Code<Message Function(String name)>(
-  "SuperclassHasNoSetter",
-  templateSuperclassHasNoSetter,
-);
+        "SuperclassHasNoSetter", templateSuperclassHasNoSetter,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassHasNoSetter(String name) {
@@ -4385,9 +4478,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeSuperclassMethodArgumentMismatch =
     const Code<Message Function(String name)>(
-  "SuperclassMethodArgumentMismatch",
-  templateSuperclassMethodArgumentMismatch,
-);
+        "SuperclassMethodArgumentMismatch",
+        templateSuperclassMethodArgumentMismatch,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassMethodArgumentMismatch(String name) {
@@ -4452,6 +4545,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSwitchCaseFallThrough = const MessageCode(
     "SwitchCaseFallThrough",
+    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.
@@ -4543,9 +4637,8 @@
 const Code<Message Function(String name, String string)>
     codeTypeArgumentMismatch =
     const Code<Message Function(String name, String string)>(
-  "TypeArgumentMismatch",
-  templateTypeArgumentMismatch,
-);
+        "TypeArgumentMismatch", templateTypeArgumentMismatch,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeArgumentMismatch(String name, String string) {
@@ -4565,9 +4658,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeTypeArgumentsOnTypeVariable =
     const Code<Message Function(String name)>(
-  "TypeArgumentsOnTypeVariable",
-  templateTypeArgumentsOnTypeVariable,
-);
+        "TypeArgumentsOnTypeVariable", templateTypeArgumentsOnTypeVariable,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeArgumentsOnTypeVariable(String name) {
@@ -4585,9 +4677,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeTypeNotFound =
     const Code<Message Function(String name)>(
-  "TypeNotFound",
-  templateTypeNotFound,
-);
+        "TypeNotFound", templateTypeNotFound,
+        severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeNotFound(String name) {
@@ -4632,6 +4723,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypeVariableInStaticContext = const MessageCode(
     "TypeVariableInStaticContext",
+    severity: Severity.errorLegacyWarning,
     message: r"""Type variables can't be used in static members.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4792,6 +4884,16 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeUnimplementedBoundsOnTypeVariables =
+    messageUnimplementedBoundsOnTypeVariables;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageUnimplementedBoundsOnTypeVariables = const MessageCode(
+    "UnimplementedBoundsOnTypeVariables",
+    severity: Severity.warning,
+    message: r"""Unimplemented bounds on type variables.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string, Token token)>
     templateUnmatchedToken =
     const Template<Message Function(String string, Token token)>(
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 6184d00..e2d9584 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4,6 +4,9 @@
 
 library fasta.body_builder;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
 
 import 'package:kernel/type_algebra.dart' show instantiateToBounds;
@@ -1053,7 +1056,8 @@
         ? fasta.templateSuperclassHasNoGetter.withArguments(name.name)
         : fasta.templateGetterNotFound.withArguments(name.name);
     if (reportWarning) {
-      addWarning(message, charOffset, name.name.length, context: context);
+      addProblemErrorIfConst(message, charOffset, name.name.length,
+          context: context);
     }
     return message;
   }
@@ -1065,7 +1069,8 @@
         ? fasta.templateSuperclassHasNoSetter.withArguments(name.name)
         : fasta.templateSetterNotFound.withArguments(name.name);
     if (reportWarning) {
-      addWarning(message, charOffset, name.name.length, context: context);
+      addProblemErrorIfConst(message, charOffset, name.name.length,
+          context: context);
     }
     return message;
   }
@@ -1077,14 +1082,15 @@
         ? fasta.templateSuperclassHasNoMethod.withArguments(name.name)
         : fasta.templateMethodNotFound.withArguments(name.name);
     if (reportWarning) {
-      addWarning(message, charOffset, name.name.length, context: context);
+      addProblemErrorIfConst(message, charOffset, name.name.length,
+          context: context);
     }
     return message;
   }
 
   @override
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset) {
-    addWarning(
+    addProblemErrorIfConst(
         fasta.templateTypeArgumentMismatch.withArguments(name, '${expected}'),
         charOffset,
         name.length);
@@ -1363,8 +1369,10 @@
       // Contains more than just \' or \".
       if (first.lexeme.length > 1) {
         String value = unescapeFirstStringPart(first.lexeme, quote);
-        expressions.add(
-            new ShadowStringLiteral(value)..fileOffset = offsetForToken(first));
+        if (value.isNotEmpty) {
+          expressions.add(new ShadowStringLiteral(value)
+            ..fileOffset = offsetForToken(first));
+        }
       }
       for (int i = 1; i < parts.length - 1; i++) {
         var part = parts[i];
@@ -1381,8 +1389,10 @@
       // Contains more than just \' or \".
       if (last.lexeme.length > 1) {
         String value = unescapeLastStringPart(last.lexeme, quote);
-        expressions.add(
-            new ShadowStringLiteral(value)..fileOffset = offsetForToken(last));
+        if (value.isNotEmpty) {
+          expressions.add(new ShadowStringLiteral(value)
+            ..fileOffset = offsetForToken(last));
+        }
       }
       push(new ShadowStringConcatenation(expressions)
         ..fileOffset = offsetForToken(endToken));
@@ -1714,7 +1724,7 @@
       typeArgument = typeArguments.first;
       if (typeArguments.length > 1) {
         typeArgument = null;
-        warningNotError(fasta.messageListLiteralTooManyTypeArguments,
+        addProblem(fasta.messageListLiteralTooManyTypeArguments,
             beginToken.charOffset);
       } else {
         typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
@@ -1763,7 +1773,7 @@
       if (typeArguments.length != 2) {
         keyType = null;
         valueType = null;
-        warningNotError(fasta.messageListLiteralTypeArgumentMismatch,
+        addProblem(fasta.messageListLiteralTypeArgumentMismatch,
             beginToken.charOffset);
       } else {
         keyType = instantiateToBounds(typeArguments[0], coreTypes.objectClass);
@@ -1835,7 +1845,7 @@
             isQualified: true, prefix: prefix);
       } else {
         String displayName = debugName(getNodeName(prefix), suffix.name);
-        warningNotError(fasta.templateNotAType.withArguments(displayName),
+        addProblem(fasta.templateNotAType.withArguments(displayName),
             beginToken.charOffset);
         push(const InvalidType());
         return;
@@ -1844,13 +1854,13 @@
     if (name is TypeDeclarationAccessor) {
       push(name.buildType(arguments));
     } else if (name is FastaAccessor) {
-      warningNotError(fasta.templateNotAType.withArguments(beginToken.lexeme),
+      addProblem(fasta.templateNotAType.withArguments(beginToken.lexeme),
           beginToken.charOffset);
       push(const InvalidType());
     } else if (name is TypeBuilder) {
       push(name.build(library));
     } else if (name is PrefixBuilder) {
-      warningNotError(fasta.templateNotAType.withArguments(name.name),
+      addProblem(fasta.templateNotAType.withArguments(name.name),
           beginToken.charOffset);
       push(const InvalidType());
     } else {
@@ -3219,9 +3229,9 @@
     DartType bound = pop();
     if (bound != null) {
       // TODO(ahe): To handle F-bounded types, this needs to be a TypeBuilder.
-      warningNotError(
-          fasta.templateInternalProblemUnimplemented
-              .withArguments("bounds on type variables"),
+      // TODO(askesc): Remove message type when no longer needed.
+      // https://github.com/dart-lang/sdk/issues/31766
+      addProblem(fasta.messageUnimplementedBoundsOnTypeVariables,
           offsetForToken(extendsOrSuper.next));
     }
     Identifier name = pop();
@@ -3323,7 +3333,7 @@
   }
 
   Expression buildFallThroughError(int charOffset) {
-    warningNotError(fasta.messageSwitchCaseFallThrough, charOffset);
+    addProblem(fasta.messageSwitchCaseFallThrough, charOffset);
 
     Location location = messages.getLocationFromUri(uri, charOffset);
 
@@ -3339,7 +3349,7 @@
   Expression buildAbstractClassInstantiationError(
       Message message, String className,
       [int charOffset = -1]) {
-    addWarning(message, charOffset, className.length);
+    addProblemErrorIfConst(message, charOffset, className.length);
     Builder constructor = library.loader.getAbstractClassInstantiationError();
     return new Throw(buildStaticInvocation(constructor.target,
         new ShadowArguments(<Expression>[new StringLiteral(className)])));
@@ -3399,11 +3409,11 @@
       if (builder.isFinal && builder.hasInitializer) {
         // TODO(ahe): If CL 2843733002 is landed, this becomes a compile-time
         // error. Also, this is a compile-time error in strong mode.
-        warningNotError(
+        addProblem(
             fasta.templateFinalInstanceVariableAlreadyInitialized
                 .withArguments(name),
             offset);
-        warningNotError(
+        addProblem(
             fasta.templateFinalInstanceVariableAlreadyInitializedCause
                 .withArguments(name),
             builder.charOffset);
@@ -3500,7 +3510,7 @@
       if (nonInstanceAccessIsError) {
         addCompileTimeError(message, offset, length);
       } else {
-        addWarning(message, offset, length);
+        addProblemErrorIfConst(message, offset, length);
       }
       return const InvalidType();
     } else if (constantExpressionRequired) {
@@ -3553,7 +3563,7 @@
           warnUnresolvedMethod(name, offset, isSuper: true);
         } else if (!areArgumentsCompatible(target.function, arguments)) {
           target = null;
-          addWarning(
+          addProblemErrorIfConst(
               fasta.templateSuperclassMethodArgumentMismatch
                   .withArguments(name.name),
               offset,
@@ -3594,26 +3604,24 @@
     library.addCompileTimeError(message, charOffset, uri);
   }
 
-  void warningNotError(Message message, int charOffset) {
-    library.addWarning(message, charOffset, uri);
+  void addProblem(Message message, int charOffset) {
+    library.addProblem(message, charOffset, uri);
   }
 
   @override
-  void addWarning(Message message, int charOffset, int length,
+  void addProblemErrorIfConst(Message message, int charOffset, int length,
       {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.
     if (constantExpressionRequired) {
       addCompileTimeError(message, charOffset, length);
     } else {
-      library.addWarning(message, charOffset, uri, context: context);
+      library.addProblem(message, charOffset, uri, context: context);
     }
   }
 
   @override
-  void addNit(Message message, int charOffset) {
-    library.addNit(message, charOffset, uri);
-  }
-
-  @override
   void debugEvent(String name) {
     // printEvent('BodyBuilder: $name');
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 2dc4f3b..e76982b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -149,7 +149,7 @@
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError);
 
-  void addWarning(Message message, int charOffset, int length);
+  void addProblemErrorIfConst(Message message, int charOffset, int length);
 
   Message warnUnresolvedGet(Name name, int charOffset, {bool isSuper});
 
@@ -672,7 +672,7 @@
 
   Expression doInvocation(int offset, Arguments arguments) {
     return helper.buildMethodInvocation(
-        buildSimpleRead(), callName, arguments, offset,
+        buildSimpleRead(), callName, arguments, arguments.fileOffset,
         isImplicitCall: true);
   }
 
@@ -814,7 +814,7 @@
 
   Expression doInvocation(int offset, Arguments arguments) {
     if (arguments.positional.length > 0 || arguments.named.length > 0) {
-      helper.addWarning(
+      helper.addProblemErrorIfConst(
           messageLoadLibraryTakesNoArguments, offset, 'loadLibrary'.length);
     }
     return builder.createLoadLibrary(offset);
@@ -1043,7 +1043,7 @@
       int offset = offsetForToken(token);
       if (declaration is KernelInvalidTypeBuilder) {
         KernelInvalidTypeBuilder declaration = this.declaration;
-        helper.addWarning(
+        helper.addProblemErrorIfConst(
             declaration.message.messageObject, offset, token.length);
         super.expression = new Throw(
             new StringLiteral(declaration.message.message)
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 98a27ca..20555a2 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
@@ -66,6 +66,7 @@
         ProcedureBuilder,
         Scope,
         TypeVariableBuilder,
+        TypeBuilder,
         computeDefaultTypeArguments;
 
 import 'redirecting_factory_body.dart' show RedirectingFactoryBody;
@@ -74,6 +75,9 @@
     extends ClassBuilder<KernelTypeBuilder, InterfaceType> {
   KernelClassBuilder actualOrigin;
 
+  @override
+  List<TypeBuilder> calculatedBounds;
+
   KernelClassBuilder(
       List<MetadataBuilder> metadata,
       int modifiers,
@@ -120,6 +124,7 @@
 
   InterfaceType buildType(
       LibraryBuilder library, List<KernelTypeBuilder> arguments) {
+    arguments ??= calculatedBounds;
     List<DartType> typeArguments;
     if (arguments != null) {
       typeArguments = buildTypeArguments(library, arguments);
@@ -167,7 +172,7 @@
               if (builder.isConst) {
                 addCompileTimeError(message, builder.charOffset);
               } else {
-                addWarning(message, builder.charOffset);
+                addProblem(message, builder.charOffset);
               }
               // CoreTypes aren't computed yet, and this is the outline
               // phase. So we can't and shouldn't create a method body.
@@ -225,6 +230,16 @@
           checkMethodOverride(
               hierarchy, typeEnvironment, declaredMember, interfaceMember);
         }
+        if (declaredMember.kind == ProcedureKind.Getter &&
+            interfaceMember.kind == ProcedureKind.Getter) {
+          checkGetterOverride(
+              hierarchy, typeEnvironment, declaredMember, interfaceMember);
+        }
+        if (declaredMember.kind == ProcedureKind.Setter &&
+            interfaceMember.kind == ProcedureKind.Setter) {
+          checkSetterOverride(
+              hierarchy, typeEnvironment, declaredMember, interfaceMember);
+        }
       }
       // TODO(ahe): Handle other cases: accessors, operators, and fields.
     });
@@ -251,7 +266,7 @@
     }
     if (declaredFunction?.typeParameters?.length !=
         interfaceFunction?.typeParameters?.length) {
-      addWarning(
+      addProblem(
           templateOverrideTypeVariablesMismatch.withArguments(
               "$name::${declaredMember.name.name}",
               "${interfaceMember.enclosingClass.name}::"
@@ -364,7 +379,7 @@
             interfaceFunction.requiredParameterCount ||
         declaredFunction.positionalParameters.length <
             interfaceFunction.positionalParameters.length) {
-      addWarning(
+      addProblem(
           templateOverrideFewerPositionalArguments.withArguments(
               "$name::${declaredMember.name.name}",
               "${interfaceMember.enclosingClass.name}::"
@@ -377,7 +392,7 @@
     }
     if (interfaceFunction.requiredParameterCount <
         declaredFunction.requiredParameterCount) {
-      addWarning(
+      addProblem(
           templateOverrideMoreRequiredArguments.withArguments(
               "$name::${declaredMember.name.name}",
               "${interfaceMember.enclosingClass.name}::"
@@ -409,7 +424,7 @@
     }
     if (declaredFunction.namedParameters.length <
         interfaceFunction.namedParameters.length) {
-      addWarning(
+      addProblem(
           templateOverrideFewerNamedArguments.withArguments(
               "$name::${declaredMember.name.name}",
               "${interfaceMember.enclosingClass.name}::"
@@ -430,7 +445,7 @@
       while (declaredNamedParameters.current.name !=
           interfaceNamedParameters.current.name) {
         if (!declaredNamedParameters.moveNext()) {
-          addWarning(
+          addProblem(
               templateOverrideMismatchNamedParameter.withArguments(
                   "$name::${declaredMember.name.name}",
                   interfaceNamedParameters.current.name,
@@ -457,6 +472,51 @@
     }
   }
 
+  void checkGetterOverride(
+      ClassHierarchy hierarchy,
+      TypeEnvironment typeEnvironment,
+      Procedure declaredMember,
+      Procedure interfaceMember) {
+    if (declaredMember.enclosingClass != cls) {
+      // TODO(paulberry): Include these checks as well, but the message needs to
+      // explain that [declaredMember] is inherited.
+      return;
+    }
+    Substitution interfaceSubstitution = _computeInterfaceSubstitution(
+        hierarchy, declaredMember, interfaceMember, null, null);
+    var declaredType = declaredMember.getterType;
+    var interfaceType = interfaceMember.getterType;
+    _checkTypes(typeEnvironment, interfaceSubstitution, declaredMember,
+        interfaceMember, declaredType, interfaceType, false, null);
+  }
+
+  void checkSetterOverride(
+      ClassHierarchy hierarchy,
+      TypeEnvironment typeEnvironment,
+      Procedure declaredMember,
+      Procedure interfaceMember) {
+    if (declaredMember.enclosingClass != cls) {
+      // TODO(paulberry): Include these checks as well, but the message needs to
+      // explain that [declaredMember] is inherited.
+      return;
+    }
+    Substitution interfaceSubstitution = _computeInterfaceSubstitution(
+        hierarchy, declaredMember, interfaceMember, null, null);
+    var declaredType = declaredMember.setterType;
+    var interfaceType = interfaceMember.setterType;
+    var declaredParameter = declaredMember.function.positionalParameters[0];
+    bool isCovariant = declaredParameter.isCovariant;
+    _checkTypes(
+        typeEnvironment,
+        interfaceSubstitution,
+        declaredMember,
+        interfaceMember,
+        declaredType,
+        interfaceType,
+        isCovariant,
+        declaredParameter);
+  }
+
   String get fullNameForErrors {
     return isMixinApplication
         ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}"
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 263fef7..6cd24dd 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
@@ -26,6 +26,7 @@
         LibraryBuilder,
         MetadataBuilder,
         TypeVariableBuilder,
+        TypeBuilder,
         computeDefaultTypeArguments;
 
 class KernelFunctionTypeAliasBuilder
@@ -34,6 +35,9 @@
 
   DartType thisType;
 
+  @override
+  List<TypeBuilder> calculatedBounds;
+
   KernelFunctionTypeAliasBuilder(
       List<MetadataBuilder> metadata,
       String name,
@@ -96,6 +100,7 @@
   @override
   DartType buildType(
       LibraryBuilder library, List<KernelTypeBuilder> arguments) {
+    arguments ??= calculatedBounds;
     var thisType = buildThisType(library);
     if (thisType is DynamicType) return thisType;
     FunctionType result = thisType;
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 2784668..68c8f62 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
@@ -30,7 +30,7 @@
   /// [Arguments] have already been built.
   DartType buildTypesWithBuiltArguments(
       LibraryBuilder library, List<DartType> arguments) {
-    library.addWarning(message.messageObject, message.charOffset, message.uri);
+    library.addProblem(message.messageObject, message.charOffset, 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 0060ec9..22dcea1 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
@@ -20,7 +20,9 @@
         messageTypeVariableSameNameAsEnclosing,
         templateConflictsWithTypeVariable,
         templateDuplicatedExport,
+        templateDuplicatedExportInType,
         templateDuplicatedImport,
+        templateDuplicatedImportInType,
         templateExportHidesExport,
         templateIllegalMethodName,
         templateImportHidesImport,
@@ -75,7 +77,6 @@
         QualifiedName,
         Scope,
         TypeBuilder,
-        TypeDeclarationBuilder,
         TypeVariableBuilder,
         VoidTypeBuilder,
         compareProcedures,
@@ -924,14 +925,15 @@
         var template = isExport
             ? templateLocalDefinitionHidesExport
             : templateLocalDefinitionHidesImport;
-        addNit(template.withArguments(name, hiddenUri), charOffset, fileUri);
+        addProblem(
+            template.withArguments(name, hiddenUri), charOffset, fileUri);
       } else if (isLoadLibrary) {
-        addNit(templateLoadLibraryHidesMember.withArguments(preferredUri),
+        addProblem(templateLoadLibraryHidesMember.withArguments(preferredUri),
             charOffset, fileUri);
       } else {
         var template =
             isExport ? templateExportHidesExport : templateImportHidesImport;
-        addNit(template.withArguments(name, preferredUri, hiddenUri),
+        addProblem(template.withArguments(name, preferredUri, hiddenUri),
             charOffset, fileUri);
       }
       return preferred;
@@ -951,8 +953,12 @@
     var template =
         isExport ? templateDuplicatedExport : templateDuplicatedImport;
     Message message = template.withArguments(name, uri, otherUri);
-    addNit(message, charOffset, fileUri);
-    return new KernelInvalidTypeBuilder(name, charOffset, fileUri, message);
+    addProblem(message, charOffset, fileUri);
+    var builderTemplate = isExport
+        ? templateDuplicatedExportInType
+        : templateDuplicatedImportInType;
+    return new KernelInvalidTypeBuilder(name, charOffset, fileUri,
+        builderTemplate.withArguments(name, uri, otherUri));
   }
 
   int finishDeferredLoadTearoffs() {
@@ -1009,34 +1015,24 @@
     return count;
   }
 
-  /// Instantiates the type parameters in all raw generic types in [types] to
-  /// their bounds.  The list of types is cleared when done.
   int instantiateToBound(TypeBuilder dynamicType, ClassBuilder objectClass) {
     int count = 0;
 
-    for (var type in types) {
-      if (type.builder is! NamedTypeBuilder) {
-        continue;
-      }
-      NamedTypeBuilder typeBuilder = type.builder as NamedTypeBuilder;
-      TypeDeclarationBuilder typeDeclarationBuilder = typeBuilder.builder;
-      List<TypeVariableBuilder> typeParameters;
-
-      if (typeDeclarationBuilder is KernelClassBuilder) {
-        typeParameters = typeDeclarationBuilder.typeVariables;
-      } else if (typeDeclarationBuilder is KernelFunctionTypeAliasBuilder) {
-        typeParameters = typeDeclarationBuilder.typeVariables;
-      }
-
-      if (typeParameters != null &&
-          typeParameters.length > 0 &&
-          typeBuilder.arguments == null) {
-        typeBuilder.arguments =
-            calculateBounds(typeParameters, dynamicType, objectClass);
-        count += typeParameters.length;
+    for (var declarationBuilder in libraryDeclaration.members.values) {
+      if (declarationBuilder is KernelClassBuilder) {
+        if (declarationBuilder.typeVariables != null) {
+          declarationBuilder.calculatedBounds = calculateBounds(
+              declarationBuilder.typeVariables, dynamicType, objectClass);
+          count += declarationBuilder.calculatedBounds.length;
+        }
+      } else if (declarationBuilder is KernelFunctionTypeAliasBuilder) {
+        if (declarationBuilder.typeVariables != null) {
+          declarationBuilder.calculatedBounds = calculateBounds(
+              declarationBuilder.typeVariables, dynamicType, objectClass);
+          count += declarationBuilder.calculatedBounds.length;
+        }
       }
     }
-    types.clear();
 
     return count;
   }
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 c2ee7b3..b6c0c8d 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
@@ -184,7 +184,7 @@
               substitution[parameter] = const DynamicType();
             }
           }
-          library.addWarning(
+          library.addProblem(
               messageNonInstanceTypeVariableUse, charOffset, fileUri);
           return substitute(type, substitution);
         }
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 ab33cc1..beb24cf 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
@@ -17,6 +17,10 @@
 /// This means that in some cases multiple shadow classes may extend the same
 /// kernel class, because multiple constructs in Dart may desugar to a tree
 /// with the same kind of root node.
+
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import 'package:front_end/src/base/instrumentation.dart';
 import 'package:front_end/src/fasta/kernel/body_builder.dart';
 import 'package:front_end/src/fasta/kernel/fasta_accessors.dart';
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 3244bb5..1495999 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -342,6 +342,7 @@
           (LocatedMessage message) => new ExpressionStatement(new Throw(
               new StringLiteral(context.format(message, Severity.error)))))));
     }
+    loader.libraries.add(library.library);
     library.build(loader.coreLibrary);
     return link(<Library>[library.library]);
   }
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 0f1c5ac..867d27b 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
@@ -45,7 +45,7 @@
     if (arguments != null) {
       int charOffset = -1; // TODO(ahe): Provide these.
       Uri fileUri = null; // TODO(ahe): Provide these.
-      library.addWarning(
+      library.addProblem(
           templateTypeArgumentsOnTypeVariable.withArguments(name),
           charOffset,
           fileUri);
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 576e2a6..8c40e68 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -19,8 +19,11 @@
         SummaryTemplate,
         Template,
         messagePlatformPrivateLibraryAccess,
+        templateInternalProblemMissingSeverity,
         templateSourceBodySummary;
 
+import 'problems.dart' show internalProblem;
+
 import 'severity.dart' show Severity;
 
 import 'target_implementation.dart' show TargetImplementation;
@@ -191,22 +194,29 @@
   /// otherwise it is added to [unhandledErrors].
   void addCompileTimeError(Message message, int charOffset, Uri fileUri,
       {bool wasHandled: false, LocatedMessage context}) {
-    if (addMessage(message, charOffset, fileUri, Severity.error,
-        context: context)) {
-      (wasHandled ? handledErrors : unhandledErrors)
-          .add(message.withLocation(fileUri, charOffset));
+    addMessage(message, charOffset, 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, Uri fileUri,
+      {LocatedMessage context}) {
+    Severity severity = message.code.severity;
+    if (severity == null) {
+      addMessage(message, charOffset, fileUri, Severity.error,
+          context: context);
+      internalProblem(
+          templateInternalProblemMissingSeverity
+              .withArguments(message.code.name),
+          charOffset,
+          fileUri);
     }
-  }
-
-  void addWarning(Message message, int charOffset, Uri fileUri,
-      {LocatedMessage context}) {
-    addMessage(message, charOffset, fileUri, Severity.warning,
-        context: context);
-  }
-
-  void addNit(Message message, int charOffset, Uri fileUri,
-      {LocatedMessage context}) {
-    addMessage(message, charOffset, fileUri, Severity.nit, context: context);
+    if (severity == Severity.errorLegacyWarning) {
+      severity =
+          target.backendTarget.strongMode ? Severity.error : Severity.warning;
+    }
+    addMessage(message, charOffset, fileUri, severity, context: context);
   }
 
   /// All messages reported by the compiler (errors, warnings, etc.) are routed
@@ -217,7 +227,7 @@
   /// three times by `OutlineBuilder`, `DietListener`, and `BodyBuilder`.
   bool addMessage(
       Message message, int charOffset, Uri fileUri, Severity severity,
-      {LocatedMessage context}) {
+      {bool wasHandled: false, LocatedMessage context}) {
     String trace = """
 message: ${message.message}
 charOffset: $charOffset
@@ -230,6 +240,10 @@
       target.context.report(context, severity);
     }
     recordMessage(severity, message, charOffset, fileUri, context: context);
+    if (severity == Severity.error) {
+      (wasHandled ? handledErrors : unhandledErrors)
+          .add(message.withLocation(fileUri, charOffset));
+    }
     return true;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
index b371988..ad8d6e5 100644
--- a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
@@ -31,6 +31,50 @@
   return true;
 }
 
+/// Parse modifiers in the token stream, and return a context with information
+/// about what was parsed. [start] is the last token consumed by the parser
+/// prior to calling this method and [context.lastModifier] is the last token
+/// consumed by this method when this method returns. If no modifiers were
+/// parsed, then [context.lastModifier] will be the same as [start].
+///
+/// This method is used in most locations where modifiers can occur. However,
+/// it isn't used when parsing a class or when parsing the modifiers of a
+/// member function (non-local), but is used when parsing their formal
+/// parameters.
+///
+/// When parsing the formal parameters of any function, [parameterKind] is
+/// non-null.
+ModifierContext parseModifiersOpt(
+    Parser parser,
+    Token start,
+    MemberKind memberKind,
+    FormalParameterKind parameterKind,
+    bool isVarAllowed,
+    TypeContinuation typeContiunation) {
+  ModifierContext context = new ModifierContext(
+      parser, memberKind, parameterKind, isVarAllowed, typeContiunation);
+  Token token = context.parseOpt(start);
+
+  // If the next token is a modifier,
+  // then it's probably out of order and we need to recover from that.
+  if (isModifier(token.next)) {
+    // Recovery
+    context = new ModifierRecoveryContext(
+        parser, memberKind, parameterKind, isVarAllowed, typeContiunation);
+    token = context.parseOpt(start);
+  }
+
+  parser.listener.handleModifiers(context.modifierCount);
+
+  context.typeContinuation ??=
+      (isVarAllowed || context.memberKind == MemberKind.GeneralizedFunctionType)
+          ? TypeContinuation.Required
+          : TypeContinuation.Optional;
+  context.lastModifier = token;
+
+  return context;
+}
+
 class ModifierContext {
   final Parser parser;
   MemberKind memberKind;
@@ -38,6 +82,11 @@
   final bool isVarAllowed;
   TypeContinuation typeContinuation;
   int modifierCount = 0;
+  Token varFinalOrConst;
+
+  /// The last token consumed by the [parseOpt] method, or the same token
+  /// that was passed into the [parseOpt] method if no tokens were consumed.
+  Token lastModifier;
 
   ModifierContext(this.parser, this.memberKind, this.parameterKind,
       this.isVarAllowed, this.typeContinuation);
@@ -88,6 +137,7 @@
       // return token.next;
     }
     typeContinuation ??= TypeContinuation.Optional;
+    varFinalOrConst ??= next;
     modifierCount++;
     return parser.parseModifier(token);
   }
@@ -147,12 +197,14 @@
 
   Token parseFinal(Token token) {
     Token next = token.next;
+    assert(optional('final', next));
     if (!isVarAllowed && parameterKind == null) {
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateExtraneousModifier);
       return next;
     }
     typeContinuation ??= TypeContinuation.Optional;
+    varFinalOrConst ??= next;
     modifierCount++;
     return parser.parseModifier(token);
   }
@@ -188,8 +240,9 @@
   }
 
   Token parseVar(Token token) {
+    Token next = token.next;
+    assert(optional('var', next));
     if (!isVarAllowed && parameterKind == null) {
-      Token next = token.next;
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateExtraneousModifier);
       return next;
@@ -212,6 +265,7 @@
         typeContinuation = TypeContinuation.OptionalAfterVar;
         break;
     }
+    varFinalOrConst ??= next;
     modifierCount++;
     return parser.parseModifier(token);
   }
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 786d564..35a452c 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -79,9 +79,9 @@
         ClassMethodModifierContext,
         FactoryModifierContext,
         ModifierContext,
-        ModifierRecoveryContext,
         TopLevelMethodModifierContext,
-        isModifier;
+        isModifier,
+        parseModifiersOpt;
 
 import 'recovery_listeners.dart'
     show ClassHeaderRecoveryListener, ImportRecoveryListener;
@@ -1152,8 +1152,19 @@
       Token token, FormalParameterKind parameterKind, MemberKind memberKind) {
     token = parseMetadataStar(token);
     listener.beginFormalParameter(token.next, memberKind);
-    token = parseModifiers(token, memberKind, parameterKind: parameterKind);
-    return token;
+    ModifierContext modifierContext = parseModifiersOpt(
+        this,
+        token,
+        memberKind,
+        parameterKind,
+        false,
+        typeContiunationFromFormalParameterKind(parameterKind));
+    TypeContinuation typeContinuation = modifierContext.typeContinuation;
+    memberKind = modifierContext.memberKind;
+    token = modifierContext.lastModifier;
+    modifierContext = null;
+
+    return parseType(token, typeContinuation, null, memberKind);
   }
 
   /// ```
@@ -2525,11 +2536,18 @@
           token = token.next;
         } else if (!nameToken.isIdentifier) {
           if (optional('.', nameToken)) {
+            // Recovery:
             // Looks like a prefixed type, but missing the type and param names.
             // Set the nameToken so that a synthetic identifier is inserted
             // after the `.` token.
             beforeToken = beforeNameToken = nameToken;
             token = nameToken = nameToken.next;
+          } else if (context == IdentifierContext.prefixedTypeReference) {
+            // Recovery:
+            // Looks like a prefixed type, but missing the parameter name.
+            beforeToken = nameToken =
+                insertSyntheticIdentifier(beforeNameToken, nameContext);
+            token = beforeToken.next;
           } else {
             untyped = true;
             beforeNameToken = beforeBegin;
@@ -2700,7 +2718,7 @@
         // but missing a variable name.
         insertSyntheticIdentifier(
             token, IdentifierContext.topLevelVariableDeclaration);
-        return parseFields(beforeStart, const Link<Token>(), token, true);
+        return parseFields(beforeStart, token, true);
       } else {
         return reportInvalidTopLevelDeclaration(token);
       }
@@ -2761,27 +2779,27 @@
     Token afterModifiers =
         identifiers.isNotEmpty ? identifiers.head.next.next : beforeStart.next;
     return isField
-        ? parseFields(beforeStart, identifiers.reverse(), beforeName, true)
+        ? parseFields(beforeStart, beforeName, true)
         : parseTopLevelMethod(
             beforeStart, afterModifiers, beforeType, getOrSet, beforeName);
   }
 
-  Token parseFields(
-      Token start, Link<Token> modifiers, Token beforeName, bool isTopLevel) {
-    Token varFinalOrConst = null;
-    for (Token beforeModifier in modifiers) {
-      Token modifier = beforeModifier.next;
-      if (optional("var", modifier) ||
-          optional("final", modifier) ||
-          optional("const", modifier)) {
-        varFinalOrConst = modifier;
-        break;
-      }
-    }
-    Token token = parseModifiers(start,
-            isTopLevel ? MemberKind.TopLevelField : MemberKind.NonStaticField,
-            isVarAllowed: true)
-        .next;
+  Token parseFields(Token start, Token beforeName, bool isTopLevel) {
+    ModifierContext modifierContext = parseModifiersOpt(
+        this,
+        start,
+        isTopLevel ? MemberKind.TopLevelField : MemberKind.NonStaticField,
+        null,
+        true,
+        typeContiunationFromFormalParameterKind(null));
+    TypeContinuation typeContinuation = modifierContext.typeContinuation;
+    MemberKind memberKind = modifierContext.memberKind;
+    Token varFinalOrConst = modifierContext.varFinalOrConst;
+    Token token = modifierContext.lastModifier;
+    modifierContext = null;
+
+    token = parseType(token, typeContinuation, null, memberKind);
+    token = token.next;
 
     Token name = beforeName.next;
     if (token != name) {
@@ -3361,45 +3379,6 @@
     return token;
   }
 
-  /// This method is used in most locations where modifiers can occur. However,
-  /// it isn't used when parsing a class or when parsing the modifiers of a
-  /// member function (non-local), but is used when parsing their formal
-  /// parameters.
-  ///
-  /// When parsing the formal parameters of any function, [parameterKind] is
-  /// non-null.
-  Token parseModifiers(Token token, MemberKind memberKind,
-      {FormalParameterKind parameterKind, bool isVarAllowed: false}) {
-    ModifierContext context = new ModifierContext(
-        this,
-        memberKind,
-        parameterKind,
-        isVarAllowed,
-        typeContiunationFromFormalParameterKind(parameterKind));
-
-    Token previous = token;
-    token = context.parseOpt(token);
-
-    // If the next token is a modifier,
-    // then it's probably out of order and we need to recover from that.
-    if (isModifier(token.next)) {
-      // Recovery
-      context = new ModifierRecoveryContext(this, memberKind, parameterKind,
-          isVarAllowed, typeContiunationFromFormalParameterKind(parameterKind));
-      token = context.parseOpt(previous);
-    }
-    listener.handleModifiers(context.modifierCount);
-
-    memberKind = context.memberKind;
-    context.typeContinuation ??=
-        (isVarAllowed || memberKind == MemberKind.GeneralizedFunctionType)
-            ? TypeContinuation.Required
-            : TypeContinuation.Optional;
-
-    token = parseType(token, context.typeContinuation, null, memberKind);
-    return token;
-  }
-
   Token parseNativeClause(Token token) {
     Token nativeToken = token = token.next;
     assert(optional('native', nativeToken));
@@ -3571,7 +3550,7 @@
 
     Token lastModifier = identifiers.isNotEmpty ? identifiers.head.next : start;
     token = isField
-        ? parseFields(start, identifiers.reverse(), beforeName, false)
+        ? parseFields(start, beforeName, false)
         : parseMethod(start, lastModifier, beforeType, getOrSet, beforeName);
     listener.endMember();
     return token;
@@ -5348,7 +5327,14 @@
   Token parseVariablesDeclarationMaybeSemicolon(
       Token token, bool endWithSemicolon) {
     token = parseMetadataStar(token);
-    token = parseModifiers(token, MemberKind.Local, isVarAllowed: true);
+    ModifierContext modifierContext =
+        parseModifiersOpt(this, token, MemberKind.Local, null, true, null);
+    token = modifierContext.lastModifier;
+    TypeContinuation typeContinuation = modifierContext.typeContinuation;
+    MemberKind memberKind = modifierContext.memberKind;
+    modifierContext = null;
+
+    token = parseType(token, typeContinuation, null, memberKind);
     return parseVariablesDeclarationMaybeSemicolonRest(token, endWithSemicolon);
   }
 
@@ -6021,20 +6007,20 @@
           next.next, IdentifierContext.fieldDeclaration)) {
         // Looks like a field declaration but missing a field name.
         insertSyntheticIdentifier(next, IdentifierContext.fieldDeclaration);
-        return parseFields(start, const Link<Token>(), next, false);
+        return parseFields(start, next, false);
       } else if (next.next.isKeywordOrIdentifier &&
           isPostIdentifierForRecovery(
               next.next.next, IdentifierContext.fieldDeclaration)) {
         // Looks like a field declaration but missing a semicolon
         // which parseFields will insert.
-        return parseFields(start, const Link<Token>(), next, false);
+        return parseFields(start, next, false);
       }
     } else if (token != start &&
         isPostIdentifierForRecovery(next, IdentifierContext.fieldDeclaration)) {
       // If there is at least one modifier, then
       // looks like the start of a field but missing field name.
       insertSyntheticIdentifier(token, IdentifierContext.fieldDeclaration);
-      return parseFields(start, const Link<Token>(), token, false);
+      return parseFields(start, token, false);
     }
     return reportUnrecoverableErrorWithToken(
         start, fasta.templateExpectedClassMember);
diff --git a/pkg/front_end/lib/src/fasta/severity.dart b/pkg/front_end/lib/src/fasta/severity.dart
index 7147e33..b0c4add 100644
--- a/pkg/front_end/lib/src/fasta/severity.dart
+++ b/pkg/front_end/lib/src/fasta/severity.dart
@@ -9,4 +9,5 @@
   internalProblem,
   nit,
   warning,
+  errorLegacyWarning,
 }
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 607dc45..68e94df 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -788,14 +788,8 @@
     library.addCompileTimeError(message, charOffset, uri);
   }
 
-  @override
-  void addWarning(Message message, int charOffset, int length) {
-    library.addWarning(message, charOffset, uri);
-  }
-
-  @override
-  void addNit(Message message, int charOffset) {
-    library.addNit(message, charOffset, uri);
+  void addProblem(Message message, int charOffset, int length) {
+    library.addProblem(message, charOffset, uri);
   }
 
   @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 1bfbc7c..23c24c9 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1034,14 +1034,8 @@
     library.addCompileTimeError(message, charOffset, uri);
   }
 
-  @override
-  void addWarning(Message message, int charOffset, int length) {
-    library.addWarning(message, charOffset, uri);
-  }
-
-  @override
-  void addNit(Message message, int charOffset) {
-    library.addNit(message, charOffset, uri);
+  void addProblem(Message message, int charOffset, int length) {
+    library.addProblem(message, charOffset, uri);
   }
 
   /// Return the documentation comment for the entity that starts at the
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 161b0b4..76f5e9d 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
@@ -19,7 +19,9 @@
         templateConflictsWithConstructor,
         templateConflictsWithFactory,
         templateConflictsWithMember,
-        templateConflictsWithSetter;
+        templateConflictsWithMemberWarning,
+        templateConflictsWithSetter,
+        templateConflictsWithSetterWarning;
 
 import '../kernel/kernel_builder.dart'
     show
@@ -168,13 +170,17 @@
       Builder member = scopeBuilder[name];
       if (member == null || !member.isField || member.isFinal) return;
       // TODO(ahe): charOffset is missing.
-      var report = member.isInstanceMember != setter.isInstanceMember
-          ? addWarning
-          : addCompileTimeError;
-      report(
-          templateConflictsWithMember.withArguments(name), setter.charOffset);
-      report(
-          templateConflictsWithSetter.withArguments(name), member.charOffset);
+      if (member.isInstanceMember == setter.isInstanceMember) {
+        addProblem(
+            templateConflictsWithMember.withArguments(name), setter.charOffset);
+        addProblem(
+            templateConflictsWithSetter.withArguments(name), member.charOffset);
+      } else {
+        addProblem(templateConflictsWithMemberWarning.withArguments(name),
+            setter.charOffset);
+        addProblem(templateConflictsWithSetterWarning.withArguments(name),
+            member.charOffset);
+      }
     });
 
     cls.procedures.sort(compareProcedures);
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 e62a87d..a7765da 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
@@ -499,7 +499,7 @@
     if (part.partOfUri != null) {
       if (uriIsValid(part.partOfUri) && part.partOfUri != uri) {
         // This is a warning, but the part is still included.
-        addWarning(
+        addProblem(
             templatePartOfUriMismatch.withArguments(
                 part.fileUri, uri, part.partOfUri),
             -1,
@@ -509,7 +509,7 @@
       if (name != null) {
         if (part.partOfName != name) {
           // This is a warning, but the part is still included.
-          addWarning(
+          addProblem(
               templatePartOfLibraryNameMismatch.withArguments(
                   part.fileUri, name, part.partOfName),
               -1,
@@ -517,7 +517,7 @@
         }
       } else {
         // This is a warning, but the part is still included.
-        addWarning(
+        addProblem(
             templatePartOfUseUri.withArguments(
                 part.fileUri, fileUri, part.partOfName),
             -1,
@@ -582,13 +582,14 @@
     }
   }
 
-  /// Resolves all unresolved types in [types]. The list of types is retained
-  /// and is used in [KernelLibraryBuilder.instantiateToBound] later.
+  /// Resolves all unresolved types in [types]. The list of types is cleared
+  /// when done.
   int resolveTypes() {
     int typeCount = types.length;
     for (UnresolvedType<T> t in types) {
       t.resolveIn(scope);
     }
+    types.clear();
     return typeCount;
   }
 
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 c3a81e6..0a200c4 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -710,6 +710,12 @@
       case Severity.warning:
         severityString = "warning";
         break;
+
+      case Severity.errorLegacyWarning:
+        // Should have been resolved to either error or warning at this point.
+        // Use a property name expressing that, in case it slips through.
+        severityString = "unresolved severity";
+        break;
     }
     instrumentation.record(
         fileUri,
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 7586246..e9ff8ac 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -342,10 +342,6 @@
   }
 
   void addCompileTimeError(Message message, int charOffset, int length);
-
-  void addWarning(Message message, int charOffset, int length);
-
-  void addNit(Message message, int charOffset);
 }
 
 class Stack {
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 25f7ae3..5cdc260 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
@@ -411,6 +411,7 @@
     }
     function.body = new ReturnStatement(superCall)..parent = function;
     procedure.transformerFlags |= TransformerFlag.superCalls;
+    procedure.forwardingStubSuperTarget = superTarget.reference;
   }
 
   /// Creates a forwarding stub based on the given [target].
diff --git a/pkg/front_end/lib/src/incremental/unlinked_unit.dart b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
index 645349f..12bccce 100644
--- a/pkg/front_end/lib/src/incremental/unlinked_unit.dart
+++ b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
@@ -46,7 +46,9 @@
       continue;
     }
     // The token is outside of a function body, add it.
-    apiSignature.addString(token.lexeme);
+    if (token is! ErrorToken) {
+      apiSignature.addString(token.lexeme);
+    }
   }
 
   return new UnlinkedUnitBuilder(
diff --git a/pkg/front_end/lib/src/testing/hybrid_file_system.dart b/pkg/front_end/lib/src/testing/hybrid_file_system.dart
index 18a7558..ba2a2fe 100644
--- a/pkg/front_end/lib/src/testing/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/testing/hybrid_file_system.dart
@@ -10,13 +10,13 @@
 
 import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 
 /// A file system that mixes files from memory and a physical file system. All
 /// memory entities take priotity over file system entities.
 class HybridFileSystem implements FileSystem {
   final MemoryFileSystem memory;
-  final PhysicalFileSystem physical = PhysicalFileSystem.instance;
+  final StandardFileSystem physical = StandardFileSystem.instance;
 
   HybridFileSystem(this.memory);
 
@@ -37,7 +37,8 @@
   Future<FileSystemEntity> get delegate async {
     if (_delegate != null) return _delegate;
     FileSystemEntity entity = _fs.memory.entityForUri(uri);
-    if (uri.scheme != 'file' || await entity.exists()) {
+    if ((uri.scheme != 'file' && uri.scheme != 'data') ||
+        await entity.exists()) {
       _delegate = entity;
       return _delegate;
     }
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 62d7386..ebab622 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -237,6 +237,7 @@
 
 ExpectedIdentifier:
   template: "Expected an identifier, but got '#lexeme'."
+  severity: ERROR
   analyzerCode: MISSING_IDENTIFIER
   dart2jsCode: "*fatal*"
   script: "do() {} main() {}"
@@ -745,6 +746,7 @@
 
 BuiltInIdentifierInDeclaration:
   template: "Can't use '#lexeme' as a name here."
+  analyzerCode: BUILT_IN_IDENTIFIER_IN_DECLARATION
   dart2jsCode: GENERIC
 
 AwaitForNotAsync:
@@ -869,27 +871,34 @@
 
 ConstructorNotFound:
   template: "Couldn't find constructor '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 RedirectionTargetNotFound:
   template: "Redirection constructor target not found: '#name'"
+  severity: ERROR_LEGACY_WARNING
 
 CyclicTypedef:
   template: "The typedef '#name' has a reference to itself."
 
 TypeNotFound:
   template: "Type '#name' not found."
+  severity: ERROR_LEGACY_WARNING
 
 NonInstanceTypeVariableUse:
   template: "Can only use type variables in instance methods."
+  severity: ERROR_LEGACY_WARNING
 
 GetterNotFound:
   template: "Getter not found: '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 SetterNotFound:
   template: "Setter not found: '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 MethodNotFound:
   template: "Method not found: '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 CandidateFound:
   template: "Found this candidate, but the arguments don't match."
@@ -899,29 +908,37 @@
 
 AbstractClassInstantiation:
   template: "The class '#name' is abstract and can't be instantiated."
+  severity: ERROR_LEGACY_WARNING
 
 AbstractRedirectedClassInstantiation:
   template: "Factory redirects to class '#name', which is abstract and can't be instantiated."
+  severity: ERROR_LEGACY_WARNING
 
 ListLiteralTooManyTypeArguments:
   template: "Too many type arguments on List literal."
+  severity: ERROR_LEGACY_WARNING
 
 ListLiteralTypeArgumentMismatch:
   template: "Map literal requires two type arguments."
+  severity: ERROR_LEGACY_WARNING
 
 LoadLibraryTakesNoArguments:
   template: "'loadLibrary' takes no arguments."
+  severity: ERROR_LEGACY_WARNING
 
 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."
   tip: "Try to rename or hide the member."
+  severity: NIT
 
 TypeArgumentMismatch:
   # TODO(sigmund): #string should be a number instead.
   template: "'#name' expects #string type arguments."
+  severity: ERROR_LEGACY_WARNING
 
 NotAType:
   template: "'#name' isn't a type."
+  severity: ERROR_LEGACY_WARNING
   analyzerCode: NOT_A_TYPE
   dart2jsCode: "*ignored*"
 
@@ -1003,59 +1020,87 @@
 
 ReturnTypeFunctionExpression:
   template: "A function expression can't have a return type."
+  severity: ERROR_LEGACY_WARNING
   dart2jsCode: "*ignored*"
 
 InternalProblemUnhandled:
   template: "Unhandled #string in #string2."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemUnimplemented:
   template: "Unimplemented #string."
+  severity: INTERNAL_PROBLEM
+
+UnimplementedBoundsOnTypeVariables:
+  # Has its own message to make it just a warning.
+  # TODO(askesc): Remove when no longer needed.
+  template: "Unimplemented bounds on type variables."
+  severity: WARNING
 
 InternalProblemUnexpected:
   template: "Expected '#string', but got '#string2'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemUnsupported:
   template: "Unsupported operation: '#name'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemSuperclassNotFound:
   template: "Superclass not found '#name'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemNotFound:
   template: "Couldn't find '#name'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemNotFoundIn:
   template: "Couldn't find '#name' in '#name2'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemPrivateConstructorAccess:
   template: "Can't access private constructor '#name'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemConstructorNotFound:
   template: "No constructor named '#name' in '#uri'."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemExtendingUnmodifiableScope:
   template: "Can't extend an unmodifiable scope."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemPreviousTokenNotFound:
   template: "Couldn't find previous token."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemStackNotEmpty:
   template: "#name.stack isn't empty:\n  #string"
+  severity: INTERNAL_PROBLEM
 
 InternalProblemAlreadyInitialized:
   template: "Attempt to set initializer on field without initializer."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemBodyOnAbstractMethod:
   template: "Attempting to set body on abstract method."
+  severity: INTERNAL_PROBLEM
 
 InternalProblemMissingContext:
   template: "Compiler cannot run without a compiler context."
   tip: "Are calls to the compiler wrapped in CompilerContext.runInContext?"
+  severity: INTERNAL_PROBLEM
 
 InternalProblemProvidedBothCompileSdkAndSdkSummary:
   template: "The compileSdk and sdkSummary options are mutually exclusive"
+  severity: INTERNAL_PROBLEM
 
 InternalProblemUriMissingScheme:
   template: "The URI '#uri' has no scheme."
+  severity: INTERNAL_PROBLEM
+
+InternalProblemMissingSeverity:
+  template: "Message code missing severity: #string"
+  severity: INTERNAL_PROBLEM
 
 InternalVerificationError:
   template: |
@@ -1064,15 +1109,19 @@
 
 LocalDefinitionHidesExport:
   template: "Local definition of '#name' hides export from '#uri'."
+  severity: NIT
 
 LocalDefinitionHidesImport:
   template: "Local definition of '#name' hides import from '#uri'."
+  severity: NIT
 
 ExportHidesExport:
   template: "Export of '#name' (from '#uri') hides export from '#uri2'."
+  severity: NIT
 
 ImportHidesImport:
   template: "Import of '#name' (from '#uri') hides import from '#uri2'."
+  severity: NIT
 
 MissingPrefixInDeferredImport:
   template: "Deferred imports should have a prefix."
@@ -1106,9 +1155,21 @@
 
 DuplicatedExport:
   template: "'#name' is exported from both '#uri' and '#uri2'."
+  severity: NIT
+  analyzerCode: AMBIGUOUS_EXPORT
+  dart2jsCode: "*ignored*"
+
+DuplicatedExportInType:
+  template: "'#name' is exported from both '#uri' and '#uri2'."
+  severity: ERROR_LEGACY_WARNING
 
 DuplicatedImport:
   template: "'#name' is imported from both '#uri' and '#uri2'."
+  severity: NIT
+
+DuplicatedImportInType:
+  template: "'#name' is imported from both '#uri' and '#uri2'."
+  severity: ERROR_LEGACY_WARNING
 
 CyclicClassHierarchy:
   template: "'#name' is a supertype of itself via '#string'."
@@ -1118,6 +1179,8 @@
 
 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."
@@ -1130,42 +1193,61 @@
 
 ConflictsWithConstructor:
   template: "Conflicts with constructor '#name'."
+  severity: ERROR
 
 ConflictsWithFactory:
   template: "Conflicts with factory '#name'."
+  severity: ERROR
 
 ConflictsWithMember:
   template: "Conflicts with member '#name'."
+  severity: ERROR
+
+ConflictsWithMemberWarning:
+  template: "Conflicts with member '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 ConflictsWithSetter:
   template: "Conflicts with setter '#name'."
+  severity: ERROR
+
+ConflictsWithSetterWarning:
+  template: "Conflicts with setter '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 ConflictsWithTypeVariable:
   template: "Conflicts with type variable '#name'."
+  severity: ERROR
 
 ConflictsWithTypeVariableCause:
   template:  "This is the type variable."
+  severity: ERROR
 
 IllegalMixin:
   template: "The type '#name' can't be mixed in."
 
 OverrideTypeVariablesMismatch:
   template: "Declared type variables of '#name' doesn't match those on overridden method '#name2'."
+  severity: ERROR_LEGACY_WARNING
 
 OverriddenMethodCause:
   template: "This is the overriden method ('#name')."
 
 OverrideMismatchNamedParameter:
   template: "The method '#name' doesn't have the named parameter '#name2' of overriden method '#name3'."
+  severity: ERROR_LEGACY_WARNING
 
 OverrideFewerNamedArguments:
   template: "The method '#name' has fewer named arguments than those of overridden method '#name2'."
+  severity: ERROR_LEGACY_WARNING
 
 OverrideFewerPositionalArguments:
   template: "The method '#name' has fewer positional arguments than those of overridden method '#name2'."
+  severity: ERROR_LEGACY_WARNING
 
 OverrideMoreRequiredArguments:
   template: "The method '#name' has more required arguments than those of overridden method '#name2'."
+  severity: ERROR_LEGACY_WARNING
 
 OverrideTypeMismatchParameter:
   template: "The parameter '#name' of the method '#name2' has type #type, which does not match the corresponding type in the overridden method (#type2)."
@@ -1366,6 +1448,7 @@
 
 TypeArgumentsOnTypeVariable:
   template: "Can't use type arguments with type variable '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 DuplicatedDefinition:
   template: "Duplicated definition of '#name'."
@@ -1423,13 +1506,16 @@
 
 PartOfLibraryNameMismatch:
   template: "Using '#uri' as part of '#name' but its 'part of' declaration says '#name2'."
+  severity: ERROR_LEGACY_WARNING
 
 PartOfUseUri:
   template: "Using '#uri' as part of '#uri2' but its 'part of' declaration says '#name'."
   tip: "Try changing the 'part of' declaration to use a relative file name."
+  severity: ERROR_LEGACY_WARNING
 
 PartOfUriMismatch:
   template: "Using '#uri' as part of '#uri2' but its 'part of' declaration says '#uri3'."
+  severity: ERROR_LEGACY_WARNING
 
 MissingMain:
   template: "No 'main' method found."
@@ -1483,32 +1569,42 @@
 
 SwitchCaseFallThrough:
   template: "Switch case may fall through to the next case."
+  severity: ERROR_LEGACY_WARNING
 
 FinalInstanceVariableAlreadyInitialized:
   template: "'#name' is a final instance variable that has already been initialized."
+  severity: ERROR_LEGACY_WARNING
 
 FinalInstanceVariableAlreadyInitializedCause:
   template: "'#name' was initialized here."
+  severity: ERROR_LEGACY_WARNING
 
 TypeVariableInStaticContext:
   template: "Type variables can't be used in static members."
+  severity: ERROR_LEGACY_WARNING
 
 SuperclassMethodArgumentMismatch:
   template: "Superclass doesn't have a method named '#name' with matching arguments."
+  severity: ERROR_LEGACY_WARNING
 
 SuperclassHasNoGetter:
   template: "Superclass has no getter named '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 SuperclassHasNoSetter:
   template: "Superclass has no setter named '#name'."
+  severity: ERROR_LEGACY_WARNING
 
 SuperclassHasNoMethod:
   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."
@@ -1715,3 +1811,4 @@
 CantInferTypeDueToCircularity:
   template: "Can't infer the type of '#string': circularity found during type inference."
   tip: "Specify the type explicitly."
+  severity: ERROR
diff --git a/pkg/front_end/test/fasta/testing/analyzer_loader.dart b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
index 2d229b3..d73819d 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_loader.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
@@ -4,7 +4,7 @@
 
 library fasta.analyzer_loader;
 
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:kernel/ast.dart' show Program;
 
 import 'package:front_end/src/fasta/builder/builder.dart' show LibraryBuilder;
@@ -25,7 +25,7 @@
 
 class AnalyzerLoader<L> extends SourceLoader<L> {
   AnalyzerLoader(TargetImplementation target)
-      : super(PhysicalFileSystem.instance, false, target);
+      : super(StandardFileSystem.instance, false, target);
 
   @override
   void computeHierarchy(Program program) {
diff --git a/pkg/front_end/test/fasta/testing/analyzer_target.dart b/pkg/front_end/test/fasta/testing/analyzer_target.dart
index f3dc25e..45bda44 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_target.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_target.dart
@@ -4,7 +4,7 @@
 
 library fasta.analyzer_target;
 
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:kernel/ast.dart' show Library, Source;
 
 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
@@ -20,7 +20,7 @@
   AnalyzerTarget(
       DillTarget dillTarget, UriTranslator uriTranslator, bool strongMode,
       [Map<Uri, Source> uriToSource])
-      : super(PhysicalFileSystem.instance, false, dillTarget, uriTranslator,
+      : super(StandardFileSystem.instance, false, dillTarget, uriTranslator,
             uriToSource: uriToSource);
 
   @override
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index dc9da3d..21ea7b3 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -10,8 +10,8 @@
 
 import 'dart:convert' show JSON;
 
-import 'package:front_end/src/api_prototype/physical_file_system.dart'
-    show PhysicalFileSystem;
+import 'package:front_end/src/api_prototype/standard_file_system.dart'
+    show StandardFileSystem;
 
 import 'package:front_end/src/base/libraries_specification.dart'
     show TargetLibrariesSpecification;
@@ -242,7 +242,10 @@
     StdioProcess process;
     try {
       var args = ['--kernel-binaries=${context.platformBinaries.toFilePath()}'];
-      if (context.strongMode) args.add('--strong');
+      if (context.strongMode) {
+        args.add('--strong');
+        args.add('--reify-generic-functions');
+      }
       args.add(generated.path);
       process = await StdioProcess.run(context.vm.toFilePath(), args);
       print(process.output);
@@ -291,7 +294,7 @@
       KernelTarget sourceTarget = astKind == AstKind.Analyzer
           ? new AnalyzerTarget(dillTarget, uriTranslator, strongMode)
           : new KernelTarget(
-              PhysicalFileSystem.instance, false, dillTarget, uriTranslator);
+              StandardFileSystem.instance, false, dillTarget, uriTranslator);
 
       Program p;
       try {
diff --git a/pkg/front_end/test/physical_file_system_test.dart b/pkg/front_end/test/standard_file_system_test.dart
similarity index 79%
rename from pkg/front_end/test/physical_file_system_test.dart
rename to pkg/front_end/test/standard_file_system_test.dart
index 0b4438d..e78a3c7 100644
--- a/pkg/front_end/test/physical_file_system_test.dart
+++ b/pkg/front_end/test/standard_file_system_test.dart
@@ -3,23 +3,25 @@
 // BSD-style license that can be found in the LICENSE file.
 // SharedOptions=--supermixin
 
-library front_end.test.physical_file_system_test;
+library front_end.test.standard_file_system_test;
 
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io' as io;
+import 'dart:math' show Random;
 
 import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:path/path.dart' as p;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(PhysicalFileSystemTest);
+    defineReflectiveTests(StandardFileSystemTest);
     defineReflectiveTests(FileTest);
     defineReflectiveTests(DirectoryTest);
+    defineReflectiveTests(DataTest);
   });
 }
 
@@ -34,7 +36,7 @@
   setUp() {
     super.setUp();
     path = p.join(tempPath, 'dir');
-    dir = PhysicalFileSystem.instance.entityForUri(p.toUri(path));
+    dir = StandardFileSystem.instance.entityForUri(p.toUri(path));
   }
 
   test_equals_differentPaths() {
@@ -72,7 +74,7 @@
   setUp() {
     super.setUp();
     path = p.join(tempPath, 'file.txt');
-    file = PhysicalFileSystem.instance.entityForUri(p.toUri(path));
+    file = StandardFileSystem.instance.entityForUri(p.toUri(path));
   }
 
   test_equals_differentPaths() {
@@ -140,7 +142,7 @@
 }
 
 @reflectiveTest
-class PhysicalFileSystemTest extends _BaseTest {
+class StandardFileSystemTest extends _BaseTest {
   Uri tempUri;
 
   setUp() {
@@ -170,14 +172,14 @@
 
   test_entityForUri() {
     expect(
-        PhysicalFileSystem.instance
+        StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}file.txt'))
             .uri,
         p.toUri(p.join(tempPath, 'file.txt')));
   }
 
   test_entityForUri_bareUri_absolute() {
-    expect(PhysicalFileSystem.instance.entityForUri(Uri.parse('/file.txt')).uri,
+    expect(StandardFileSystem.instance.entityForUri(Uri.parse('/file.txt')).uri,
         Uri.parse('file:///file.txt'));
   }
 
@@ -194,7 +196,7 @@
       Uri.parse('file:///file.txt')
     ]) {
       if (!uri.path.startsWith('/')) {
-        expect(() => PhysicalFileSystem.instance.entityForUri(uri),
+        expect(() => StandardFileSystem.instance.entityForUri(uri),
             throwsA(new isInstanceOf<Error>()));
       }
     }
@@ -202,14 +204,14 @@
 
   test_entityForUri_nonFileUri() {
     expect(
-        () => PhysicalFileSystem.instance
+        () => StandardFileSystem.instance
             .entityForUri(Uri.parse('package:foo/bar.dart')),
         _throwsFileSystemException);
   }
 
   test_entityForUri_normalize_dot() {
     expect(
-        PhysicalFileSystem.instance
+        StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}./file.txt'))
             .uri,
         p.toUri(p.join(tempPath, 'file.txt')));
@@ -217,7 +219,7 @@
 
   test_entityForUri_normalize_dotDot() {
     expect(
-        PhysicalFileSystem.instance
+        StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}foo/../file.txt'))
             .uri,
         p.toUri(p.join(tempPath, 'file.txt')));
@@ -229,7 +231,7 @@
   String tempPath;
 
   FileSystemEntity entityForPath(String path) =>
-      PhysicalFileSystem.instance.entityForUri(p.toUri(path));
+      StandardFileSystem.instance.entityForUri(p.toUri(path));
 
   setUp() {
     tempDirectory = io.Directory.systemTemp.createTempSync('test_file_system');
@@ -248,3 +250,23 @@
     }
   }
 }
+
+@reflectiveTest
+class DataTest {
+  test_Data_URIs() async {
+    String string = "<{[DART]}>";
+    Uri string_uri = new Uri.dataFromString(string, base64: false);
+    Uri string_uri_base64 = new Uri.dataFromString(string, base64: true);
+
+    Random random = new Random(123);
+    List<int> bytes = new List.generate(1000, (index) => random.nextInt(256));
+    Uri bytes_uri = new Uri.dataFromBytes(bytes, percentEncoded: true);
+    Uri bytes_uri_base64 = new Uri.dataFromBytes(bytes, percentEncoded: false);
+
+    StandardFileSystem fs = StandardFileSystem.instance;
+    expect(string, await fs.entityForUri(string_uri).readAsString());
+    expect(string, await fs.entityForUri(string_uri_base64).readAsString());
+    expect(bytes, await fs.entityForUri(bytes_uri).readAsBytes());
+    expect(bytes, await fs.entityForUri(bytes_uri_base64).readAsBytes());
+  }
+}
diff --git a/pkg/front_end/testcases/accessors.dart.direct.expect b/pkg/front_end/testcases/accessors.dart.direct.expect
index 89faf22..7b53204 100644
--- a/pkg/front_end/testcases/accessors.dart.direct.expect
+++ b/pkg/front_end/testcases/accessors.dart.direct.expect
@@ -39,7 +39,7 @@
 }
 static method main() → dynamic {
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "No error thrown";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
index f165ac6..5d084af 100644
--- a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
+++ b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
@@ -4,6 +4,6 @@
 
 static method foo() → dynamic {}
 static method test() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, const <dynamic>[], <dynamic>[null].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, const <core::Type>[], <dynamic>[null].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index 33cc33c..8ce4a34 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -9,10 +9,10 @@
 annotation_top: Crash
 argument_mismatch: Crash
 bad_setter_abstract: Crash
-call: Crash
 cascade: Crash
 classes: Crash
 duplicated_named_args_3: Crash
+dynamic_and_void: Fail
 expressions: Crash
 function_type_is_check: Crash
 function_type_recovery: Crash
@@ -55,6 +55,7 @@
 inference/infer_correctly_on_multiple_variables_declared_together: Crash
 inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Crash
 inference/infer_local_function_referenced_before_declaration: Crash
+inference/infer_method_missing_params: Fail
 inference/infer_rethrow: Crash
 inference/instantiate_tearoff: Crash
 inference/instantiate_tearoff_after_contravariance_check: Crash
@@ -62,7 +63,6 @@
 inference/lambda_does_not_have_propagated_type_hint: Crash
 inference/super_initializer: Crash
 inference/super_initializer_substitution: Crash
-inference/switch_continue: Crash
 inference/top_level_return_and_yield: Fail
 inference/try_catch: Crash
 inference/try_catch_finally: Crash
@@ -71,22 +71,26 @@
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Crash
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
+inference_new/dependency_only_if_generic_method: Fail
+inference_new/for_each_identifier_downwards: Crash
 invalid_cast: Crash
 invocations: Crash
 metadata_enum: Crash
 metadata_named_mixin_application: Crash
 micro: Crash
 native_as_name: Crash
+override_check_accessor_after_inference: Fail
+override_check_accessor_basic: Fail
+override_check_accessor_with_covariant_modifier: Fail
 override_check_after_inference: Fail
 override_check_basic: Fail
+override_check_two_substitutions: Fail
 override_check_with_covariant_modifier: Fail
 qualified: Crash
 rasta/abstract_constructor: Crash
-rasta/bad_continue: Crash
 rasta/bad_default_constructor: Crash
 rasta/bad_interpolation: Crash
 rasta/bad_redirection: Crash
-rasta/breaking_bad: Crash
 rasta/class_hierarchy: Crash
 rasta/deferred_load: Crash
 rasta/generic_factory: Crash
@@ -98,7 +102,6 @@
 rasta/issue_000039: VerificationError
 rasta/issue_000042: Crash
 rasta/issue_000044: Crash
-rasta/issue_000045: Crash
 rasta/issue_000067: Crash
 rasta/issue_000068: Crash
 rasta/issue_000069: Crash
@@ -109,7 +112,6 @@
 rasta/static: Crash
 rasta/super_initializer: Crash
 rasta/supports_reflection: VerificationError
-rasta/try_label: Crash
 rasta/type_literals: Crash
 rasta/typedef: Crash
 rasta/unresolved: Crash
@@ -142,3 +144,4 @@
 super_call: Crash
 type_variable_as_super: Crash
 uninitialized_fields: Crash
+warn_unresolved_sends: Fail
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index bc2a67d..82533c2 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -20,7 +20,7 @@
   set d(dynamic #synthetic) → void
     let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^", "pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.\n    new B();\n        ^"]/* from null */;
 static set b(dynamic #synthetic) → void
   let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^";
 static set c(dynamic #synthetic) → void
diff --git a/pkg/front_end/testcases/expressions.dart.direct.expect b/pkg/front_end/testcases/expressions.dart.direct.expect
index d2e2cac..9e197a7 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.expect
@@ -69,7 +69,7 @@
   core::print(core::int);
   core::print(let final dynamic #t5 = core::int in let final dynamic #t6 = #t5.toString() in #t5);
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#toString, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "Shouldn't work";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
new file mode 100644
index 0000000..c2bd441
--- /dev/null
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -0,0 +1,80 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'toString'.\n    print(int?.toString());\n               ^"]/* from null */;
+static method foo({dynamic fisk = null}) → dynamic {
+  core::print(fisk);
+}
+static method caller(dynamic f) → dynamic {
+  f.call();
+}
+static method main() → dynamic {
+  core::int i = 0;
+  core::print(i.{core::num::==}(1) ?{core::String} "bad" : "good");
+  core::print("${i}");
+  core::print("'${i}'");
+  core::print(" '${i}' ");
+  core::print(" '${i}' '${i}'");
+  core::print(" '${i}' '${i}'");
+  core::print("foobar");
+  core::print(" '${i}' '${i}' '${i}' '${i}'");
+  try {
+    throw "fisk";
+  }
+  on core::String catch(final core::String e, final core::StackTrace s) {
+    core::print(e);
+    if(!s.{core::Object::==}(null))
+      core::print(s);
+  }
+  for (; false; ) {
+  }
+  core::List<core::String> list = <core::String>["Hello, World!"];
+  core::print(list.{core::List::[]}(i));
+  list.{core::List::[]=}(i, "Hello, Brave New World!");
+  core::print(list.{core::List::[]}(i));
+  i = 87;
+  core::print(i.{core::int::unary-}());
+  core::print(i.{core::int::~}());
+  core::print(!i.{core::num::==}(42));
+  core::print(i = i.{core::num::-}(1));
+  core::print(i = i.{core::num::+}(1));
+  core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::-}(1) in #t1);
+  core::print(let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1) in #t3);
+  core::print(new core::Object::•());
+  core::print(const core::Object::•());
+  core::print(core::List::_internal<core::String>(2).{core::Object::runtimeType});
+  self::foo(fisk: "Blorp gulp");
+  function f() → core::Null {
+    core::print("f was called");
+  }
+  self::caller(f);
+  self::caller(() → core::Null {
+    core::print("<anon> was called");
+  });
+  function g([dynamic message = null]) → core::Null {
+    core::print(message);
+  }
+  g.call("Hello, World");
+  self::caller(([dynamic x = null]) → core::Null {
+    core::print("<anon> was called with ${x}");
+  });
+  function h({dynamic message = null}) → core::Null {
+    core::print(message);
+  }
+  h.call(message: "Hello, World");
+  self::caller(({dynamic x = null}) → core::Null {
+    core::print("<anon> was called with ${x}");
+  });
+  core::print(core::int.{core::Object::toString}());
+  core::print(core::int);
+  core::print(let final core::Type #t5 = core::int in let final dynamic #t6 = #t5.{core::Object::toString}() in #t5);
+  try {
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    throw "Shouldn't work";
+  }
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
+    core::print("As expected: ${e}");
+  }
+  core::print(core::int::parse("42"));
+}
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 6382d87..c615c82 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
@@ -10,6 +10,7 @@
 }
 
 class D extends C {
+/*@error=OverrideTypeVariablesMismatch*/
 /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
           /*@topType=dynamic*/ x) =>
       x;
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 a111385..1091d40 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -16,7 +16,7 @@
   method m(dynamic x) → dynamic
     return x;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).\nChange to a subtype of test::C::m::T.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n                                                               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n                                                               ^", "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).\nChange to a subtype of test::C::m::T.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n                                                               ^"]/* from null */;
 static method main() → dynamic {
   core::int y = new self::D::•().{self::D::m}<core::int>(42) as{TypeError} core::int;
   core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
index df04cb8..b1f78be 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
@@ -11,8 +11,12 @@
 }
 
 class D extends C {
-  T m<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;
-  T g<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;
+  T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
+          T /*@error=OverrideTypeMismatchParameter*/ x) =>
+      x;
+  T /*@error=OverrideTypeVariablesMismatch*/ g<T>(
+          T /*@error=OverrideTypeMismatchParameter*/ x) =>
+      x;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index 5cd40dd..6cbf87b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -20,7 +20,7 @@
   method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
     return x;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:53: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).\nChange to a supertype of dynamic (or, for a covariant parameter, a subtype).\n  T m<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;\n                                                    ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:53: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).\nChange to a supertype of dart.core::int (or, for a covariant parameter, a subtype).\n  T g<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;\n                                                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n  T /*@error=OverrideTypeVariablesMismatch*/ m<T>(\n                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).\nChange to a supertype of dynamic (or, for a covariant parameter, a subtype).\n          T /*@error=OverrideTypeMismatchParameter*/ x) =>\n                                                     ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.\n  T /*@error=OverrideTypeVariablesMismatch*/ g<T>(\n                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).\nChange to a supertype of dart.core::int (or, for a covariant parameter, a subtype).\n          T /*@error=OverrideTypeMismatchParameter*/ x) =>\n                                                     ^"]/* from null */;
 static method main() → dynamic {
   core::int y = (new self::D::•() as self::C).{self::C::m}(42) as{TypeError} core::int;
   core::print(y);
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
index cd30187..9970876 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
@@ -16,8 +16,8 @@
     ;
 }
 static field dynamic a = new self::A::•();
-static field dynamic b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-static field dynamic c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))];
+static field dynamic b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field dynamic c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
 static field dynamic c2 = const <dynamic>[];
 static field dynamic d = <dynamic, dynamic>{"a": "b"};
 static field dynamic e = let final dynamic #t1 = new self::A::•() in let final dynamic #t2 = #t1.x = 3 in #t1;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 90366c9..26a46a1 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -16,8 +16,8 @@
     ;
 }
 static field self::A a = new self::A::•();
-static field self::B b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-static field core::List<dynamic> c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))];
+static field self::B b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field core::List<dynamic> c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
 static field core::List<dynamic> c2 = const <dynamic>[];
 static field core::Map<dynamic, dynamic> d = <dynamic, dynamic>{"a": "b"};
 static field self::A e = let final self::A #t1 = new self::A::•() in let final dynamic #t2 = #t1.{self::A::x} = 3 in #t1;
@@ -26,6 +26,7 @@
 static field self::B h = new self::A::•().{self::A::+}(3);
 static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.\nTry correcting the name to the name of an existing method, or defining a method named 'unary-'.\nvar /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();\n                                                                              ^";
 static field self::B j = null as self::B;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.\nvar /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations\n                                                            ^", "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.\n  /*error:UNDEFINED_IDENTIFIER*/ x\n                                 ^"]/* from null */;
 static method test1() → dynamic {
   self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
   self::a = new self::B::•(3);
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
index 6724aed..3d75d52 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
@@ -5,7 +5,7 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^"]/* from null */;
 static method test() → dynamic {
   function f() → dynamic
-    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^";
   dynamic v = f;
 }
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
index 748504a..292334d 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^", "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^"]/* from null */;
 static method test() → dynamic {
   function f() → dynamic
-    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^";
   () → dynamic v = f;
 }
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart b/pkg/front_end/testcases/inference/infer_method_missing_params.dart
index 57a5515..18bc5e3 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart
@@ -20,7 +20,7 @@
 }
 
 abstract class C implements A, B {
-  /*@topType=int*/ f(
+  /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
       /*@topType=int*/ x,
       /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
   /*@topType=int*/ g(/*@topType=int*/ x,
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
index c07237e..98d3037 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
@@ -26,5 +26,5 @@
   abstract method g(core::int x, [dynamic y = null]) → core::int;
   abstract method h(core::int x, {dynamic y = null}) → core::int;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);\n                                                                              ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});\n                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);\n                                                                               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);\n                                                                              ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});\n                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);\n                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.\n  /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(\n                                                            ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index a0f1707..0e26ccb 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -14,6 +14,7 @@
     dynamic v5 = let final core::int #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final void #t3 = super.[]=(#t1, #t2) in #t2;
   }
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.\n    var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.\n    var /*@type=dynamic*/ v2 = super.bar;\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.\n    var /*@type=dynamic*/ v3 = super[0];\n                                    ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.\n    var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.\n    var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();\n                                    ^"]/* from null */;
 static method f<T extends core::Object>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart
new file mode 100644
index 0000000..8b79005
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.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.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+T f<T>() => null;
+
+class A {}
+
+A aTopLevel;
+void set aTopLevelSetter(A value) {}
+
+class C {
+  A aField;
+  void set aSetter(A value) {}
+  void test() {
+    A aLocal;
+    for (aLocal in /*@typeArgs=Iterable<A>*/ f()) {}
+    // Note: "/*@target=C::aField*/" appears twice due to dartbug.com/31790.
+    for (/*@target=C::aField*/ /*@target=C::aField*/ aField
+        in /*@typeArgs=Iterable<A>*/ f()) {}
+    // Note: "/*@target=C::aSetter*/" appears twice due to dartbug.com/31790.
+    for (/*@target=C::aSetter*/ /*@target=C::aSetter*/ aSetter
+        in /*@typeArgs=Iterable<A>*/ f()) {}
+    for (aTopLevel in /*@typeArgs=Iterable<A>*/ f()) {}
+    for (aTopLevelSetter in /*@typeArgs=Iterable<A>*/ f()) {}
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
new file mode 100644
index 0000000..7e8a4d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field self::A aField = null;
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set aSetter(self::A value) → void {}
+  method test() → void {
+    self::A aLocal;
+    for (final dynamic #t1 in self::f<dynamic>()) {
+      aLocal = #t1;
+    }
+    for (final dynamic #t2 in self::f<dynamic>()) {
+      this.{self::C::aField} = #t2;
+    }
+    for (final dynamic #t3 in self::f<dynamic>()) {
+      this.{self::C::aSetter} = #t3;
+    }
+    for (final dynamic #t4 in self::f<dynamic>()) {
+      self::aTopLevel = #t4;
+    }
+    for (final dynamic #t5 in self::f<dynamic>()) {
+      self::aTopLevelSetter = #t5;
+    }
+  }
+}
+static field self::A aTopLevel;
+static method f<T extends core::Object>() → self::f::T
+  return null;
+static set aTopLevelSetter(self::A value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
new file mode 100644
index 0000000..5a371a8
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    ;
+}
+class C extends core::Object {
+  field self::A aField;
+  default constructor •() → void
+    ;
+  set aSetter(self::A value) → void
+    ;
+  method test() → void
+    ;
+}
+static field self::A aTopLevel;
+static method f<T extends core::Object>() → self::f::T
+  ;
+static set aTopLevelSetter(self::A value) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
new file mode 100644
index 0000000..d87176d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field self::A aField = null;
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set aSetter(self::A value) → void {}
+  method test() → void {
+    self::A aLocal;
+    for (final self::A #t1 in self::f<core::Iterable<self::A>>()) {
+      aLocal = #t1;
+    }
+    for (final self::A #t2 in self::f<core::Iterable<self::A>>()) {
+      this.{self::C::aField} = #t2;
+    }
+    for (final self::A #t3 in self::f<core::Iterable<self::A>>()) {
+      this.{self::C::aSetter} = #t3;
+    }
+    for (final self::A #t4 in self::f<core::Iterable<self::A>>()) {
+      self::aTopLevel = #t4;
+    }
+    for (final self::A #t5 in self::f<core::Iterable<self::A>>()) {
+      self::aTopLevelSetter = #t5;
+    }
+  }
+}
+static field self::A aTopLevel;
+static method f<T extends core::Object>() → self::f::T
+  return null;
+static set aTopLevelSetter(self::A value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart
new file mode 100644
index 0000000..93170b9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.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.
+
+// This test checks that instantiate to bound provides missing type arguments to
+// raw interface types that refer to classes imported from compiled dill files.
+
+import 'dart:collection';
+
+LinkedListEntry y;
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.strong.expect
new file mode 100644
index 0000000..2a54655
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.strong.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+import "dart:collection" as col;
+
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart
new file mode 100644
index 0000000..314743f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// interface types that are used in the module outline.
+
+class A<T extends num> {}
+
+class B {
+  foo(A a) => null;
+  A bar() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
new file mode 100644
index 0000000..d6193c5
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(self::A<core::num> a) → dynamic
+    return null;
+  method bar() → self::A<core::num>
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart
new file mode 100644
index 0000000..5d026c9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// interface types that are themselves used as type arguments of literal lists.
+
+class A<T extends num> {}
+
+var a = <A>[];
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
new file mode 100644
index 0000000..c620a46
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field core::List<self::A<core::num>> a = <self::A<core::num>>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart
new file mode 100644
index 0000000..ad3d94c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.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.
+
+// This test checks that instantiate to bound leaves interface types that have
+// their type arguments defined by the programmer intact in cases when those
+// interface types are used as type arguments of literal lists.
+
+class A<T> {}
+
+class B<S> {
+  final List<A<S>> foo = <A<S>>[];
+  final List<A<num>> bar = <A<num>>[];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
new file mode 100644
index 0000000..84a4ce2
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<S extends core::Object> extends core::Object {
+  final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
+  final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart
new file mode 100644
index 0000000..febfe6a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// interface types that are themselves used as type arguments of literal maps.
+
+class A<T extends num> {}
+
+var a = <A, A>{};
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
new file mode 100644
index 0000000..1b12e12
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart
new file mode 100644
index 0000000..09a8efa
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound provides `dynamic` as the type
+// argument for those positions in type argument lists of interface types that
+// have the bound omitted in the corresponding type parameter, regardless of
+// whether the classes that are referred to by the interface types are imported
+// from compiled dill libraries or are defined within the source files being
+// compiled.
+
+import 'dart:collection';
+
+class A<T> {}
+
+A a;
+DoubleLinkedQueue c;
+
+class C {
+  A foo() => null;
+  DoubleLinkedQueue baz() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
new file mode 100644
index 0000000..65538cb
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A<T extends core::Object> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → self::A<dynamic>
+    return null;
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    return null;
+}
+static field self::A<dynamic> a;
+static field col::DoubleLinkedQueue<dynamic> c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart
new file mode 100644
index 0000000..772113a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// interface types that are themselves used as bounds of type parameters.
+
+class A<T extends num> {}
+
+class B<T extends A> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
new file mode 100644
index 0000000..837cc64
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<T extends self::A<core::num>> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart
new file mode 100644
index 0000000..05f120a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.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.
+
+// This test checks that instantiate to bound produces correct super-bounded
+// types from raw interface types that refer to F-bounded classes.
+
+class A<T extends A<T>> {}
+
+A a;
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
new file mode 100644
index 0000000..d8c359c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T>> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::A<self::A<dynamic>> a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart
new file mode 100644
index 0000000..ae8725e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// typedef types that are used in the module outline.
+
+typedef A<T extends num>(T p);
+
+class B {
+  foo(A a) => null;
+  A bar() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
new file mode 100644
index 0000000..5f28d03
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo((core::num) → dynamic a) → dynamic
+    return null;
+  method bar() → (core::num) → dynamic
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart
new file mode 100644
index 0000000..fb2e07e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// typedef types that are themselves used as type arguments of literal lists.
+
+typedef A<T extends num>(T p);
+
+var a = <A>[];
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect
new file mode 100644
index 0000000..6194fc1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.strong.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart
new file mode 100644
index 0000000..222f8ed
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.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.
+
+// This test checks that instantiate to bound leaves typedef types that have
+// their arguments defined by the programmer intact in cases when those typedef
+// types are used as type arguments of literal lists.
+
+typedef A<T>(T p);
+
+class B<S> {
+  final List<A<S>> foo = <A<S>>[];
+  final List<A<num>> bar = <A<num>>[];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
new file mode 100644
index 0000000..c4e1521
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class B<S extends core::Object> extends core::Object {
+  generic-contravariant final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
+  final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart
new file mode 100644
index 0000000..f49c235
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// typedef types that are themselves used as type arguments of literal maps.
+
+typedef A<T extends num>(T p);
+
+var a = <A, A>{};
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect
new file mode 100644
index 0000000..c2e8007
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.strong.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart
new file mode 100644
index 0000000..cc7372b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound provides `dynamic` as the type
+// argument for those positions in type argument lists of typedef types that
+// have the bound omitted in the corresponding type parameter.
+
+typedef A<T>(T p);
+
+A a;
+
+class C {
+  A foo() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
new file mode 100644
index 0000000..451edbe
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → (dynamic) → dynamic
+    return null;
+}
+static field (dynamic) → dynamic a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart
new file mode 100644
index 0000000..9b32686
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.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.
+
+// This test checks that instantiate to bound provides type arguments to raw
+// typedef types that are themselves used as bounds of type parameters.
+
+typedef A<T extends num>(T p);
+
+class B<T extends A> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
new file mode 100644
index 0000000..875fc1a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart
new file mode 100644
index 0000000..e446ea4
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound produces correct super-bounded
+// types from raw typedef types that refer to F-bounded typedefs.
+
+typedef A<T>(T p);
+
+typedef B<S extends A<S>>(S p);
+
+B b;
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect
new file mode 100644
index 0000000..7f1e93d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.strong.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+typedef B<S extends (S) → dynamic> = (S) → dynamic;
+static field ((core::Null) → dynamic) → dynamic b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart b/pkg/front_end/testcases/override_check_accessor_after_inference.dart
new file mode 100644
index 0000000..94bf861
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+  void set x(A value) {}
+  B get y => null;
+}
+
+class D extends C {
+  void set x(value) {} // Inferred type: A
+  get y => null; // Inferred type: B
+}
+
+class E extends D {
+  void set x(A value) {} // Ok
+  B get y => null; // Ok
+}
+
+class F extends D {
+  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+  A get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect
new file mode 100644
index 0000000..84d7aaa
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect
@@ -0,0 +1,47 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return null;
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(dynamic value) → void {}
+  get y() → dynamic
+    return null;
+}
+class E extends self::D {
+  default constructor •() → void
+    : super self::D::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return null;
+}
+class F extends self::D {
+  default constructor •() → void
+    : super self::D::•()
+    ;
+  set x(self::B value) → void {}
+  get y() → self::A
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
new file mode 100644
index 0000000..ae273b2
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    ;
+  set x(self::A value) → void
+    ;
+  get y() → self::B
+    ;
+}
+class D extends self::C {
+  default constructor •() → void
+    ;
+  set x(dynamic value) → void
+    ;
+  get y() → dynamic
+    ;
+}
+class E extends self::D {
+  default constructor •() → void
+    ;
+  set x(self::A value) → void
+    ;
+  get y() → self::B
+    ;
+}
+class F extends self::D {
+  default constructor •() → void
+    ;
+  set x(self::B value) → void
+    ;
+  get y() → self::A
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
new file mode 100644
index 0000000..d8d285d
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return null;
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return null;
+}
+class E extends self::D {
+  default constructor •() → void
+    : super self::D::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return null;
+}
+class F extends self::D {
+  default constructor •() → void
+    : super self::D::•()
+    ;
+  set x(self::B value) → void {}
+  get y() → self::A
+    return null;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).\nChange to a subtype of #lib1::B.\n  A get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n                                                  ^", "pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                        ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart b/pkg/front_end/testcases/override_check_accessor_basic.dart
new file mode 100644
index 0000000..a5391b2
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+  void set x(A value) {}
+  A get y => null;
+}
+
+class D extends C {
+  void set x(Object value) {} // Ok
+  B get y => null; // Ok
+}
+
+class E extends C {
+  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+  Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect
new file mode 100644
index 0000000..f819e53
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::A
+    return null;
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(core::Object value) → void {}
+  get y() → self::B
+    return null;
+}
+class E extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(self::B value) → void {}
+  get y() → core::Object
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect
new file mode 100644
index 0000000..1e00014
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    ;
+  set x(self::A value) → void
+    ;
+  get y() → self::A
+    ;
+}
+class D extends self::C {
+  default constructor •() → void
+    ;
+  set x(core::Object value) → void
+    ;
+  get y() → self::B
+    ;
+}
+class E extends self::C {
+  default constructor •() → void
+    ;
+  set x(self::B value) → void
+    ;
+  get y() → core::Object
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
new file mode 100644
index 0000000..0a96296
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(self::A value) → void {}
+  get y() → self::A
+    return null;
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(core::Object value) → void {}
+  get y() → self::B
+    return null;
+}
+class E extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x(self::B value) → void {}
+  get y() → core::Object
+    return null;
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).\nChange to a subtype of #lib1::A.\n  Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n                                                       ^", "pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                        ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart
new file mode 100644
index 0000000..a679cb1
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+  void set x1(covariant A value) {}
+  void set x2(A value) {}
+  void set x3(covariant A value) {}
+  void set x4(A value) {}
+  void set x5(covariant A value) {}
+  void set x6(covariant B value) {}
+}
+
+class D extends C {
+  void set x1(B value) {} // Ok because covariant is inherited
+  void set x2(covariant B value) {} // Ok because covariant
+  void set x3(covariant B value) {} // Ok because covariant
+  void set x4(
+      B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant
+  void set x5(
+      covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}
+  void set x6(covariant A value) {} // Always ok
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect
new file mode 100644
index 0000000..bccda69
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x1(covariant self::A value) → void {}
+  set x2(self::A value) → void {}
+  set x3(covariant self::A value) → void {}
+  set x4(self::A value) → void {}
+  set x5(covariant self::A value) → void {}
+  set x6(covariant self::B value) → void {}
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x1(self::B value) → void {}
+  set x2(covariant self::B value) → void {}
+  set x3(covariant self::B value) → void {}
+  set x4(self::B value) → void {}
+  set x5(covariant core::String value) → void {}
+  set x6(covariant self::A value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
new file mode 100644
index 0000000..71f151e
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    ;
+  set x1(covariant self::A value) → void
+    ;
+  set x2(self::A value) → void
+    ;
+  set x3(covariant self::A value) → void
+    ;
+  set x4(self::A value) → void
+    ;
+  set x5(covariant self::A value) → void
+    ;
+  set x6(covariant self::B value) → void
+    ;
+}
+class D extends self::C {
+  default constructor •() → void
+    ;
+  set x1(self::B value) → void
+    ;
+  set x2(covariant self::B value) → void
+    ;
+  set x3(covariant self::B value) → void
+    ;
+  set x4(self::B value) → void
+    ;
+  set x5(covariant core::String value) → void
+    ;
+  set x6(covariant self::A value) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
new file mode 100644
index 0000000..09e0a0c
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  set x1(covariant self::A value) → void {}
+  set x2(self::A value) → void {}
+  set x3(covariant self::A value) → void {}
+  set x4(self::A value) → void {}
+  set x5(covariant self::A value) → void {}
+  set x6(covariant self::B value) → void {}
+}
+class D extends self::C {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  set x1(covariant self::B value) → void {}
+  set x2(covariant self::B value) → void {}
+  set x3(covariant self::B value) → void {}
+  set x4(self::B value) → void {}
+  set x5(covariant core::String value) → void {}
+  set x6(covariant self::A value) → void {}
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n      B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant\n                                                 ^", "pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n      covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                                ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index 8540a0d..a597b6f 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -25,7 +25,7 @@
   static factory b<T extends core::Object>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in invalid-expression;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.\n  lib.Missing method() {}\n  ^", "pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n      ^", "pkg/front_end/testcases/qualified.dart: Error: Couldn't find constructor 'WrongName'."]/* from null */;
 static method main() → dynamic {
   new self::C::•<core::String>();
   new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 394313b..6e09914 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -23,6 +23,7 @@
   method publicMethod() → dynamic
     return this.{self::Mixin::_privateMethod}();
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n  foo() => super.foo() + f();\n                 ^"]/* from null */;
 static method f() → dynamic
   return 2;
 static method V() → dynamic
diff --git a/pkg/front_end/testcases/rasta/static.dart.direct.expect b/pkg/front_end/testcases/rasta/static.dart.direct.expect
index cad665f..487ec3e 100644
--- a/pkg/front_end/testcases/rasta/static.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.direct.expect
@@ -27,28 +27,28 @@
     self::use(self::Foo::staticFunction);
     self::Foo::staticGetter;
     self::use(self::Foo::staticGetter);
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[#t1.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) in #t1);
+    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[#t1.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t1);
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(let final dynamic #t3 = self::Foo::staticField in let final dynamic #t4 = self::Foo::staticField = #t3.+(1) in #t3);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[#t5.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) in #t5);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[#t7.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) in #t7);
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).+(1);
-    self::use(let final dynamic #t9 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[#t5.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t5);
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[#t7.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t7);
+    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(let final dynamic #t9 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[self::Foo::staticConstant.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(self::Foo::staticField = self::Foo::staticField.+(1));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).+(1);
-    self::use(self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).+(1));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[self::Foo::staticFunction.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[self::Foo::staticGetter.+(1)].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1));
     self::Foo::staticConstant.call();
     self::use(self::Foo::staticConstant.call());
     self::Foo::staticField.call();
@@ -57,28 +57,28 @@
     self::use(self::Foo::staticFunction());
     self::Foo::staticGetter.call();
     self::use(self::Foo::staticGetter.call());
-    (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).call();
-    self::use((throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).call());
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call();
+    self::use((throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call());
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = 87;
     self::use(self::Foo::staticField = 87);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    self::Foo::staticConstant.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : null;
-    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : #t11);
+    self::Foo::staticConstant.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t11);
     self::Foo::staticField.==(null) ? self::Foo::staticField = 87 : null;
     self::use(let final dynamic #t12 = self::Foo::staticField in #t12.==(null) ? self::Foo::staticField = 87 : #t12);
-    self::Foo::staticFunction.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : null;
-    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : #t13);
-    self::Foo::staticGetter.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <dynamic>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) : #t14);
-    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
-    self::use(let final dynamic #t15 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
+    self::Foo::staticFunction.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t13);
+    self::Foo::staticGetter.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], <dynamic>[87].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t14);
+    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
+    self::use(let final dynamic #t15 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 5430f1d..d54ccec 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -253,7 +253,7 @@
     self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    use(super.n -= 42);\n                ^");
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\nTry removing '+'.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n    use(+super);\n        ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\nTry removing '+'.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n    use(+super);\n        ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: Getter not found: ''.\n    use(+super);\n        ^", "pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.\n    super.g;\n          ^", "pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.\n    use(super.g);\n              ^", "pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.\n    super.e++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.\n    use(super.e++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.\n    super.f++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.\n    use(super.f++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.\n    super.g++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.\n    use(super.g++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.\n    super.m++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.\n    use(super.m++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.\n    ++super.e;\n            ^", "pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.\n    use(++super.e);\n                ^", "pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.\n    ++super.f;\n            ^", "pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.\n    use(++super.f);\n                ^", "pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.\n    ++super.g;\n            ^", "pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.\n    use(++super.g);\n                ^", "pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.\n    ++super.m;\n            ^", "pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.\n    use(++super.m);\n                ^", "pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.\n    super.g();\n          ^", "pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.\n    use(super.g());\n              ^", "pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.\n    super.e = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.\n    use(super.e = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.\n    super.f = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.\n    use(super.f = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.\n    super.m = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.\n    use(super.m = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.\n    super.e ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.\n    use(super.e ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.\n    super.f ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.\n    use(super.f ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.\n    super.g ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.\n    use(super.g ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.\n    super.m ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.\n    use(super.m ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.\n    super.e += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.\n    use(super.e += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.\n    super.f += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.\n    use(super.f += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.\n    super.g += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.\n    use(super.g += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.\n    super.m += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.\n    use(super.m += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.\n    super.e -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.\n    use(super.e -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.\n    super.f -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.\n    use(super.f -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.\n    super.g -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.\n    use(super.g -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.\n    super.m -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.\n    use(super.m -= 42);\n              ^"]/* from null */;
 static method use(dynamic x) → dynamic {
   if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
     throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index f961b10..52fa5f8 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -41,6 +41,7 @@
   abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n  foo() => super.foo() + f();\n                 ^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
   core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index 6741aa0..469dce3 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -13,14 +13,14 @@
       core::print(this.key);
     }
     for (final dynamic #t2 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <dynamic>[], <dynamic>[#t2].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t2].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(self::Fisk);
     }
     for (final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n    for (collection in x) {\n         ^" in x) {
       core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
     }
     for (final dynamic #t4 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <dynamic>[], <dynamic>[#t4].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t4].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(() → void);
     }
     for (final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected lvalue, but got 1\n    for (1 in x) {\n         ^" in x) {
@@ -31,21 +31,21 @@
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   for (final dynamic #t6 in arguments) {
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <dynamic>[], <dynamic>[#t6].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <core::Type>[], <dynamic>[#t6].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
   for (final dynamic #t7 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <dynamic>[], <dynamic>[#t7].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t7].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(self::Fisk);
   }
   for (final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n  for (collection in arguments) {\n       ^" in arguments) {
     core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
   }
   for (final dynamic #t9 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <dynamic>[], <dynamic>[#t9].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t9].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(() → void);
   }
   for (final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected lvalue, but got 1\n  for (1 in arguments) {\n       ^" in arguments) {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
index 3c97f77..0e11a3b 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
@@ -2,6 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.\n  a.b c = null;\n  ^"]/* from null */;
 static method main() → dynamic {
   core::String a = "";
   invalid-type c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
index 186616b..6b2f5d7 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' isn't a type.\n  s.bool x = null;\n  ^"]/* from null */;
 static method main() → dynamic {
   invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
index 15d1958..7489747 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' isn't a type.\n  x.y z;\n  ^"]/* from null */;
 static method main() → dynamic {
   invalid-type z;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index dc9b4c9..563ed03 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -8,6 +8,7 @@
     : super core::Object::•()
     ;
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.\n  C<String, String> field;\n  ^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>());
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index 544ffb8..61cfc01 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -2,6 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.\n  return missing;\n         ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.\ng() sync* => dummy;\n             ^"]/* from null */;
 static method f() → dynamic sync* {
   invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n  return missing;\n  ^";
 }
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 6dd3ecf..ba78c35 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -1,7 +1,7 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n  for (int i = i;; false) {}\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.\n  for (int i = i;; false) {}\n               ^", "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n  for (int i = i;; false) {}\n               ^"]/* from null */;
 static method bad() → dynamic {
   for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n  for (int i = i;; false) {}\n           ^"; ; false) {
   }
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
index 3ffb8ac..822d218 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
@@ -4,6 +4,6 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n  \u55357\u56603\n  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^"]/* from null */;
 static method bad() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
index 3ffb8ac..02c3c1e4 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n  \u55357\u56603\n  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n  \u55357\u56603\n  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.\n  \u55357\u56603\n  ^"]/* from null */;
 static method bad() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
index 7175ccd..8ee7c79 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
 static method bad() → dynamic {
-  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).>(10); i = i.+(1)) {
+  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10); i = i.+(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index 0177011..f51f3b2 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
 static method bad() → dynamic {
-  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
+  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index 3886969..2b3bb2c 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -8,4 +8,5 @@
     : super core::Object::•()
     ;
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.\n  T<U> v;\n    ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.\n  T<U> v;\n  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index abc2724..6c33f11 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -8,7 +8,7 @@
 
 DeltaBlue: Fail
 accessors: Fail
-argument_mismatch: TypeCheckError
+argument_mismatch: Fail # Test assumes Dart 1.0 semantics
 async_function: Fail
 await: Fail
 bug21938: TypeCheckError
@@ -22,8 +22,8 @@
 covariant_generic: Fail
 cycles: Fail
 default_values: Fail
+dynamic_and_void: Fail # Test assumes Dart 1.0 semantics
 escape: Fail
-expressions: Fail
 external: Fail
 fallthrough: Fail
 fibonacci: Fail
@@ -41,6 +41,9 @@
 null_aware: Fail
 operators: Fail
 optional: Fail
+override_check_accessor_after_inference: TypeCheckError # Issue #31620
+override_check_accessor_basic: TypeCheckError # Issue #31620
+override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
 override_check_after_inference: TypeCheckError # Issue #31620
 override_check_basic: TypeCheckError # Issue #31620
 override_check_with_covariant_modifier: TypeCheckError # Issue #31620
@@ -63,10 +66,9 @@
 uninitialized_fields: Fail
 unused_methods: Fail
 void_methods: Fail
-warn_unresolved_sends: RuntimeError # Test assumes Dart 1.0 semantics
+warn_unresolved_sends: Fail # Test assumes Dart 1.0 semantics
 
 inference/abstract_class_instantiation: Fail # Issue #30040
-inference/block_bodied_lambdas_infer_bottom_async_star: RuntimeError
 inference/conflicts_can_happen: TypeCheckError
 inference/conflicts_can_happen2: TypeCheckError
 inference/constructors_infer_from_arguments_argument_not_assignable: TypeCheckError
@@ -99,7 +101,6 @@
 inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
 inference/generic_methods_infer_js_builtin: Fail # Issue #30029
 inference/generic_methods_nested_generic_instantiation: RuntimeError # Issue #31304
-inference/generic_methods_uses_greatest_lower_bound: RuntimeError
 inference/infer_field_override_multiple: TypeCheckError
 inference/infer_method_missing_params: TypeCheckError
 inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
@@ -118,6 +119,10 @@
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
 
+instantiate_to_bound/typedef_literal_map: Fail
+instantiate_to_bound/typedef_literal_list: Fail
+instantiate_to_bound/typedef_super_bounded_type: Fail
+
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
 rasta/bad_continue: Fail
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 3460d49..8ed214a 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -233,6 +233,7 @@
     self::use(super.m = let final dynamic #t66 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:232:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    use(super.m -= 42);\n                ^");
   }
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.\n    super.g;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:61:15: Error: Superclass has no getter named 'g'.\n    use(super.g);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:79:11: Error: Superclass has no setter named 'e'.\n    super.e++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:80:15: Error: Superclass has no setter named 'e'.\n    use(super.e++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:81:11: Error: Superclass has no setter named 'f'.\n    super.f++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:82:15: Error: Superclass has no setter named 'f'.\n    use(super.f++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:83:11: Error: Superclass has no getter named 'g'.\n    super.g++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:84:15: Error: Superclass has no getter named 'g'.\n    use(super.g++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:91:11: Error: Superclass has no setter named 'm'.\n    super.m++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:92:15: Error: Superclass has no setter named 'm'.\n    use(super.m++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:102:13: Error: Superclass has no setter named 'e'.\n    ++super.e;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:103:17: Error: Superclass has no setter named 'e'.\n    use(++super.e);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:104:13: Error: Superclass has no setter named 'f'.\n    ++super.f;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:105:17: Error: Superclass has no setter named 'f'.\n    use(++super.f);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:106:13: Error: Superclass has no getter named 'g'.\n    ++super.g;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:107:17: Error: Superclass has no getter named 'g'.\n    use(++super.g);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:114:13: Error: Superclass has no setter named 'm'.\n    ++super.m;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:115:17: Error: Superclass has no setter named 'm'.\n    use(++super.m);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:129:11: Error: Superclass has no method named 'g'.\n    super.g();\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:130:15: Error: Superclass has no method named 'g'.\n    use(super.g());\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:150:11: Error: Superclass has no setter named 'e'.\n    super.e = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:151:15: Error: Superclass has no setter named 'e'.\n    use(super.e = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:152:11: Error: Superclass has no setter named 'f'.\n    super.f = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:153:15: Error: Superclass has no setter named 'f'.\n    use(super.f = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:162:11: Error: Superclass has no setter named 'm'.\n    super.m = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:163:15: Error: Superclass has no setter named 'm'.\n    use(super.m = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:173:11: Error: Superclass has no setter named 'e'.\n    super.e ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:174:15: Error: Superclass has no setter named 'e'.\n    use(super.e ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:175:11: Error: Superclass has no setter named 'f'.\n    super.f ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:176:15: Error: Superclass has no setter named 'f'.\n    use(super.f ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:177:11: Error: Superclass has no getter named 'g'.\n    super.g ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:178:15: Error: Superclass has no getter named 'g'.\n    use(super.g ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:185:11: Error: Superclass has no setter named 'm'.\n    super.m ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:186:15: Error: Superclass has no setter named 'm'.\n    use(super.m ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:196:11: Error: Superclass has no setter named 'e'.\n    super.e += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:197:15: Error: Superclass has no setter named 'e'.\n    use(super.e += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:198:11: Error: Superclass has no setter named 'f'.\n    super.f += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:199:15: Error: Superclass has no setter named 'f'.\n    use(super.f += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:200:11: Error: Superclass has no getter named 'g'.\n    super.g += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:201:15: Error: Superclass has no getter named 'g'.\n    use(super.g += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:208:11: Error: Superclass has no setter named 'm'.\n    super.m += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:209:15: Error: Superclass has no setter named 'm'.\n    use(super.m += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:219:11: Error: Superclass has no setter named 'e'.\n    super.e -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:220:15: Error: Superclass has no setter named 'e'.\n    use(super.e -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:221:11: Error: Superclass has no setter named 'f'.\n    super.f -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:222:15: Error: Superclass has no setter named 'f'.\n    use(super.f -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:223:11: Error: Superclass has no getter named 'g'.\n    super.g -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:224:15: Error: Superclass has no getter named 'g'.\n    use(super.g -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:231:11: Error: Superclass has no setter named 'm'.\n    super.m -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:232:15: Error: Superclass has no setter named 'm'.\n    use(super.m -= 42);\n              ^"]/* from null */;
 static method use(dynamic x) → dynamic {
   if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
     throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 2d5d17c..e232826 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -9,6 +9,7 @@
   method method() → invalid-type
     return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.\nTry changing the type of the left hand side, or casting the right hand side to 'invalid-type'.\n  T.String method() => \"Hello, World!\";\n                       ^";
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.\n  T.String method() => \"Hello, World!\";\n  ^"]/* from null */;
 static method main() → dynamic {
   core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  T.String s = new C().method();\n                       ^";
   core::print(s);
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 5af82b0..baadc31 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -52,7 +52,8 @@
         "/testcases/.*_part[0-9]*\\.dart$",
         "/testcases/.*_lib[0-9]*\\.dart$",
         "/testcases/dartino/",
-        "/testcases/shaker/"
+        "/testcases/shaker/",
+        "/testcases/instantiate_to_bound/"
       ]
     },
 
@@ -69,7 +70,8 @@
         "/testcases/.*_part[0-9]*\\.dart$",
         "/testcases/.*_lib[0-9]*\\.dart$",
         "/testcases/dartino/",
-        "/testcases/shaker/"
+        "/testcases/shaker/",
+        "/testcases/instantiate_to_bound/"
       ]
     },
 
diff --git a/pkg/front_end/tool/_fasta/bulk_compile.dart b/pkg/front_end/tool/_fasta/bulk_compile.dart
index 30940de..6a8c52a 100644
--- a/pkg/front_end/tool/_fasta/bulk_compile.dart
+++ b/pkg/front_end/tool/_fasta/bulk_compile.dart
@@ -12,8 +12,8 @@
 import 'package:front_end/src/api_prototype/file_system.dart'
     show FileSystem, FileSystemEntity, FileSystemException;
 
-import 'package:front_end/src/api_prototype/physical_file_system.dart'
-    show PhysicalFileSystem;
+import 'package:front_end/src/api_prototype/standard_file_system.dart'
+    show StandardFileSystem;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
@@ -80,7 +80,7 @@
       }
       return entity;
     } else {
-      return PhysicalFileSystem.instance.entityForUri(uri);
+      return StandardFileSystem.instance.entityForUri(uri);
     }
   }
 }
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 93ffb3b..f7977c4 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -10,6 +10,14 @@
 
 import 'package:dart_style/dart_style.dart' show DartFormatter;
 
+Map<String, String> severityEnumNames = <String, String>{
+  'NIT': 'nit',
+  'WARNING': 'warning',
+  'ERROR': 'error',
+  'ERROR_LEGACY_WARNING': 'errorLegacyWarning',
+  'INTERNAL_PROBLEM': 'internalProblem',
+};
+
 main(List<String> arguments) async {
   var port = new ReceivePort();
   Uri messagesFile = Platform.script.resolve("../../messages.yaml");
@@ -40,7 +48,7 @@
       throw "No 'template:' in key $name.";
     }
     sb.writeln(compileTemplate(name, map['template'], map['tip'],
-        map['analyzerCode'], map['dart2jsCode']));
+        map['analyzerCode'], map['dart2jsCode'], map['severity']));
   }
 
   String dartfmtedText = new DartFormatter().format("$sb");
@@ -55,7 +63,7 @@
 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+");
 
 String compileTemplate(String name, String template, String tip,
-    String analyzerCode, String dart2jsCode) {
+    String analyzerCode, String dart2jsCode, String severity) {
   if (template == null) {
     print('Error: missing template for message: $name');
     exitCode = 1;
@@ -187,6 +195,13 @@
   if (dart2jsCode != null) {
     codeArguments.add('dart2jsCode: "$dart2jsCode"');
   }
+  if (severity != null) {
+    String severityEnumName = severityEnumNames[severity];
+    if (severityEnumName == null) {
+      throw "Unknown severity '$severity'";
+    }
+    codeArguments.add('severity: Severity.$severityEnumName');
+  }
 
   if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) {
     if (template != null) {
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 9584a54..dcb5c0b 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -53,7 +53,7 @@
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/byte_store/protected_file_byte_store.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
@@ -218,7 +218,7 @@
 class OverlayFileSystem implements FileSystem {
   final MemoryFileSystem memory =
       new MemoryFileSystem(Uri.parse('org-dartlang-overlay:///'));
-  final PhysicalFileSystem physical = PhysicalFileSystem.instance;
+  final StandardFileSystem physical = StandardFileSystem.instance;
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
diff --git a/pkg/kernel/bin/transform.dart b/pkg/kernel/bin/transform.dart
index acd2da2..06fbbd8 100755
--- a/pkg/kernel/bin/transform.dart
+++ b/pkg/kernel/bin/transform.dart
@@ -98,7 +98,11 @@
       program = coq.transformProgram(coreTypes, program);
       break;
     case 'constants':
-      final VmConstantsBackend backend = new VmConstantsBackend(coreTypes);
+      // We use the -D defines supplied to this VM instead of explicitly using a
+      // constructed map of constants.
+      final Map<String, String> defines = null;
+      final VmConstantsBackend backend =
+          new VmConstantsBackend(defines, coreTypes);
       program = constants.transformProgram(program, backend);
       break;
     case 'treeshake':
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 848fa2f..f307f05 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -354,6 +354,8 @@
   // An absolute path URI to the .dart file from which the class was created.
   UriReference fileUri;
   List<Expression> annotations;
+  // Only present if the 'isForwardingStub' flag is set.
+  Option<MemberReference> forwardingStubSuperTarget;
   // Can only be absent if abstract, but tag is there anyway.
   Option<FunctionNode> function;
 }
@@ -367,8 +369,8 @@
   Name name;
   UriReference fileUri;
   List<Expression> annotations;
-  List<DartType> typeArguments;
   MemberReference targetReference;
+  List<DartType> typeArguments;
   List<TypeParameter> typeParameters;
   UInt parameterCount; // positionalParameters.length + namedParameters.length.
   UInt requiredParameterCount;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index e655f93..89a1643 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1490,6 +1490,8 @@
   /// The uri of the source file this procedure was loaded from.
   Uri fileUri;
 
+  Reference forwardingStubSuperTarget;
+
   Procedure(Name name, this.kind, this.function,
       {bool isAbstract: false,
       bool isStatic: false,
@@ -1499,7 +1501,8 @@
       bool isForwardingSemiStub: false,
       int transformerFlags: 0,
       this.fileUri,
-      Reference reference})
+      Reference reference,
+      this.forwardingStubSuperTarget})
       : super(name, reference) {
     function?.parent = this;
     this.isAbstract = isAbstract;
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index be7788c..83c5af1 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.ast_from_binary;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
 import 'dart:convert';
 import 'dart:typed_data';
 
@@ -928,6 +930,8 @@
     bool readFunctionNodeNow =
         (kind == ProcedureKind.Factory && functionNodeSize <= 50) ||
             _disableLazyReading;
+    var forwardingStubSuperTarget =
+        readAndCheckOptionTag() ? readMemberReference() : null;
     var function = readFunctionNodeOption(!readFunctionNodeNow, endOffset);
     var transformerFlags = getAndResetTransformerFlags();
     assert(((_) => true)(debugPath.removeLast()));
@@ -942,6 +946,10 @@
       node.function = function;
       function?.parent = node;
       node.setTransformerFlagsWithoutLazyLoading(transformerFlags);
+      node.forwardingStubSuperTarget = forwardingStubSuperTarget;
+
+      assert((node.forwardingStubSuperTarget != null) ||
+          !(node.isForwardingStub && node.function.body != null));
     }
     _byteOffset = endOffset;
     return node;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 38fbba4..3d12707 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.ast_to_binary;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import '../ast.dart';
 import 'tag.dart';
 import 'dart:convert';
@@ -226,6 +229,15 @@
     }
   }
 
+  void writeOptionalReference(Reference ref) {
+    if (ref == null) {
+      writeByte(Tag.Nothing);
+    } else {
+      writeByte(Tag.Something);
+      writeReference(ref);
+    }
+  }
+
   void writeLinkTable(Program program) {
     _binaryOffsetForLinkTable = getBufferOffset();
     writeList(_canonicalNameList, writeCanonicalNameEntry);
@@ -753,8 +765,12 @@
     writeName(node.name ?? '');
     writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
+    writeOptionalReference(node.forwardingStubSuperTarget);
     writeOptionalNode(node.function);
     _variableIndexer = null;
+
+    assert((node.forwardingStubSuperTarget != null) ||
+        !(node.isForwardingStub && node.function.body != null));
   }
 
   visitField(Field node) {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 420a756..e461650 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.clone;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import 'ast.dart';
 import 'type_algebra.dart';
 
@@ -400,7 +403,8 @@
         isForwardingStub: node.isForwardingStub,
         isForwardingSemiStub: node.isForwardingSemiStub,
         transformerFlags: node.transformerFlags,
-        fileUri: node.fileUri)
+        fileUri: node.fileUri,
+        forwardingStubSuperTarget: node.forwardingStubSuperTarget)
       ..fileEndOffset = node.fileEndOffset
       ..isGenericContravariant = node.isGenericContravariant;
   }
diff --git a/pkg/kernel/lib/target/vm.dart b/pkg/kernel/lib/target/vm.dart
index 00fae71..eefe395 100644
--- a/pkg/kernel/lib/target/vm.dart
+++ b/pkg/kernel/lib/target/vm.dart
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.target.vm;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import '../ast.dart';
 import '../class_hierarchy.dart';
 import '../core_types.dart';
@@ -84,9 +87,11 @@
         new Arguments(<Expression>[
           new StringLiteral(name)..fileOffset = offset,
           _fixedLengthList(
+              coreTypes.typeClass.rawType,
               arguments.types.map((t) => new TypeLiteral(t)).toList(),
               arguments.fileOffset),
-          _fixedLengthList(arguments.positional, arguments.fileOffset),
+          _fixedLengthList(
+              const DynamicType(), arguments.positional, arguments.fileOffset),
           new StaticInvocation(
               coreTypes.mapUnmodifiable,
               new Arguments([
@@ -96,7 +101,7 @@
                       new SymbolLiteral(arg.name)..fileOffset = arg.fileOffset,
                       arg.value)
                     ..fileOffset = arg.fileOffset;
-                })))
+                })), keyType: coreTypes.symbolClass.rawType)
                   ..isConst = (arguments.named.length == 0)
                   ..fileOffset = arguments.fileOffset
               ]))
@@ -140,9 +145,11 @@
                 new SymbolLiteral(name)..fileOffset = offset,
                 new IntLiteral(type)..fileOffset = offset,
                 _fixedLengthList(
+                    coreTypes.typeClass.rawType,
                     arguments.types.map((t) => new TypeLiteral(t)).toList(),
                     arguments.fileOffset),
-                _fixedLengthList(arguments.positional, arguments.fileOffset),
+                _fixedLengthList(const DynamicType(), arguments.positional,
+                    arguments.fileOffset),
                 new StaticInvocation(
                     coreTypes.mapUnmodifiable,
                     new Arguments([
@@ -153,11 +160,11 @@
                               ..fileOffset = arg.fileOffset,
                             arg.value)
                           ..fileOffset = arg.fileOffset;
-                      })))
+                      })), keyType: coreTypes.symbolClass.rawType)
                         ..isConst = (arguments.named.length == 0)
                         ..fileOffset = arguments.fileOffset
                     ], types: [
-                      new DynamicType(),
+                      coreTypes.symbolClass.rawType,
                       new DynamicType()
                     ]))
                   ..fileOffset = offset
@@ -234,7 +241,8 @@
     return type;
   }
 
-  Expression _fixedLengthList(List<Expression> elements, int offset) {
+  Expression _fixedLengthList(
+      DartType typeArgument, List<Expression> elements, int offset) {
     // TODO(ahe): It's possible that it would be better to create a fixed-length
     // list first, and then populate it. That would create fewer objects. But as
     // this is currently only used in (statically resolved) no-such-method
@@ -242,11 +250,12 @@
 
     // The 0-element list must be exactly 'const[]'.
     if (elements.length == 0) {
-      return new ListLiteral([])..isConst = true;
+      return new ListLiteral([], typeArgument: typeArgument)..isConst = true;
     }
 
     return new MethodInvocation(
-        new ListLiteral(elements)..fileOffset = offset,
+        new ListLiteral(elements, typeArgument: typeArgument)
+          ..fileOffset = offset,
         new Name("toList"),
         new Arguments(<Expression>[], named: <NamedExpression>[
           new NamedExpression("growable", new BoolLiteral(false))
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 0218fe3..3578de3 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.ast_to_text;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import '../ast.dart';
 import '../import_table.dart';
 
diff --git a/pkg/kernel/lib/transformations/constants.dart b/pkg/kernel/lib/transformations/constants.dart
index 9a87069..aa5f0cf 100644
--- a/pkg/kernel/lib/transformations/constants.dart
+++ b/pkg/kernel/lib/transformations/constants.dart
@@ -2,23 +2,63 @@
 // for 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 library implements a kernel2kernel constant evaluation transformation.
+///
+/// Even though it is expected that the frontend does not emit kernel AST which
+/// contains compile-time errors, this transformation still performs some
+/// valiation and throws a [ConstantEvaluationError] if there was a compile-time
+/// errors.
+///
+/// Due to the lack information which is is only available in the front-end,
+/// this validation is incomplete (e.g. whether an integer literal used the
+/// hexadecimal syntax or not).
+///
+/// Furthermore due to the lowering of certain constructs in the front-end
+/// (e.g. '??') we need to support a super-set of the normal constant expression
+/// language.  Issue(http://dartbug.com/31799)
 library kernel.transformations.constants;
 
 import '../kernel.dart';
 import '../ast.dart';
+import '../core_types.dart';
 import '../type_algebra.dart';
+import '../type_environment.dart';
+import '../class_hierarchy.dart';
 import 'treeshaker.dart' show findNativeName;
 
 Program transformProgram(Program program, ConstantsBackend backend,
-    {bool keepFields: false}) {
-  transformLibraries(program.libraries, backend, keepFields: keepFields);
+    {bool keepFields: false,
+    bool strongMode: false,
+    bool enableAsserts: false,
+    CoreTypes coreTypes,
+    ClassHierarchy hierarchy}) {
+  coreTypes ??= new CoreTypes(program);
+  hierarchy ??= new ClosedWorldClassHierarchy(program);
+
+  final typeEnvironment =
+      new TypeEnvironment(coreTypes, hierarchy, strongMode: strongMode);
+
+  transformLibraries(program.libraries, backend, coreTypes, typeEnvironment,
+      keepFields: keepFields,
+      strongMode: strongMode,
+      enableAsserts: enableAsserts);
   return program;
 }
 
 void transformLibraries(List<Library> libraries, ConstantsBackend backend,
-    {bool keepFields: false, bool keepVariables: false}) {
-  final ConstantsTransformer constantsTransformer =
-      new ConstantsTransformer(backend, keepFields, keepVariables);
+    CoreTypes coreTypes, TypeEnvironment typeEnvironment,
+    {bool keepFields: false,
+    bool keepVariables: false,
+    bool strongMode: false,
+    bool enableAsserts: false}) {
+  final ConstantsTransformer constantsTransformer = new ConstantsTransformer(
+      backend,
+      keepFields,
+      keepVariables,
+      coreTypes,
+      typeEnvironment,
+      strongMode,
+      enableAsserts);
   for (final Library library in libraries) {
     for (final Field field in library.fields.toList()) {
       constantsTransformer.convertField(field);
@@ -39,19 +79,39 @@
         constantsTransformer.convertConstructor(constructor);
       }
     }
+    for (final Typedef td in library.typedefs) {
+      constantsTransformer.convertTypedef(td);
+    }
+
+    if (!keepFields) {
+      // The transformer API does not iterate over `Library.additionalExports`,
+      // so we manually delete the references to shaken nodes.
+      library.additionalExports.removeWhere((Reference reference) {
+        return reference.canonicalName == null;
+      });
+    }
   }
 }
 
 class ConstantsTransformer extends Transformer {
   final ConstantEvaluator constantEvaluator;
+  final CoreTypes coreTypes;
+  final TypeEnvironment typeEnvironment;
 
   /// Whether to preserve constant [Field]s.  All use-sites will be rewritten.
   final bool keepFields;
   final bool keepVariables;
 
   ConstantsTransformer(
-      ConstantsBackend backend, this.keepFields, this.keepVariables)
-      : constantEvaluator = new ConstantEvaluator(backend);
+      ConstantsBackend backend,
+      this.keepFields,
+      this.keepVariables,
+      this.coreTypes,
+      this.typeEnvironment,
+      bool strongMode,
+      bool enableAsserts)
+      : constantEvaluator = new ConstantEvaluator(
+            backend, typeEnvironment, coreTypes, strongMode, enableAsserts);
 
   // Transform the library/class members:
 
@@ -79,6 +139,13 @@
     });
   }
 
+  void convertTypedef(Typedef td) {
+    // A typedef can have annotations on variables which are constants.
+    constantEvaluator.withNewEnvironment(() {
+      td.accept(this);
+    });
+  }
+
   // Handle definition of constants:
 
   visitVariableDeclaration(VariableDeclaration node) {
@@ -166,6 +233,10 @@
 
 class ConstantEvaluator extends RecursiveVisitor {
   final ConstantsBackend backend;
+  final CoreTypes coreTypes;
+  final TypeEnvironment typeEnvironment;
+  final bool strongMode;
+  final bool enableAsserts;
 
   final Map<Constant, Constant> canonicalizationCache;
   final Map<Node, Constant> nodeCache;
@@ -177,7 +248,8 @@
   InstanceBuilder instanceBuilder;
   EvaluationEnvironment env;
 
-  ConstantEvaluator(this.backend)
+  ConstantEvaluator(this.backend, this.typeEnvironment, this.coreTypes,
+      this.strongMode, this.enableAsserts)
       : canonicalizationCache = <Constant, Constant>{},
         nodeCache = <Node, Constant>{};
 
@@ -204,6 +276,8 @@
   }
 
   visitIntLiteral(IntLiteral node) {
+    // The frontend will ensure the integer literals are in signed 64-bit range
+    // in strong mode.
     return canonicalize(new IntConstant(node.value));
   }
 
@@ -335,6 +409,21 @@
               typeArguments,
               evaluatePositionalArguments(init.arguments),
               evaluateNamedArguments(init.arguments));
+        } else if (init is AssertInitializer) {
+          if (enableAsserts) {
+            final Constant condition = init.statement.condition.accept(this);
+
+            if (condition is BoolConstant) {
+              if (!condition.value) {
+                final Constant message = init.statement.message?.accept(this);
+                throw new ConstantEvaluationError(
+                    'Assert initializer condition failed with message: $message.');
+              }
+            } else {
+              throw new ConstantEvaluationError(
+                  'Assert initializer did not evaluate to a boolean condition.');
+            }
+          }
         } else {
           throw new ConstantEvaluationError(
               'Cannot evaluate constant with [${init.runtimeType}].');
@@ -353,15 +442,19 @@
 
     // Handle == and != first (it's common between all types).
     if (arguments.length == 1 && node.name.name == '==') {
-      ensurePrimitiveConstant(receiver);
+      // TODO(http://dartbug.com/31799): Re-enable these checks.
+      //ensurePrimitiveConstant(receiver);
       final right = arguments[0];
-      ensurePrimitiveConstant(right);
+      // TODO(http://dartbug.com/31799): Re-enable these checks.
+      //ensurePrimitiveConstant(right);
       return receiver == right ? trueConstant : falseConstant;
     }
     if (arguments.length == 1 && node.name.name == '!=') {
-      ensurePrimitiveConstant(receiver);
+      // TODO(http://dartbug.com/31799): Re-enable these checks.
+      //ensurePrimitiveConstant(receiver);
       final right = arguments[0];
-      ensurePrimitiveConstant(right);
+      // TODO(http://dartbug.com/31799): Re-enable these checks.
+      //ensurePrimitiveConstant(right);
       return receiver != right ? trueConstant : falseConstant;
     }
 
@@ -498,12 +591,14 @@
   }
 
   visitConditionalExpression(ConditionalExpression node) {
-    final BoolConstant constant = evaluate(node.condition);
+    final Constant constant = evaluate(node.condition);
     if (constant == trueConstant) {
       return evaluate(node.then);
-    } else {
-      assert(constant == falseConstant);
+    } else if (constant == falseConstant) {
       return evaluate(node.otherwise);
+    } else {
+      throw new ConstantEvaluationError(
+          'Cannot use $constant as condition in a conditional expression.');
     }
   }
 
@@ -593,14 +688,19 @@
       } else if (target.name.name == 'identical') {
         // Ensure the "identical()" function comes from dart:core.
         final parent = target.parent;
-        if (parent is Library && parent.importUri == 'dart:core') {
+        if (parent is Library && parent == coreTypes.coreLibrary) {
           final positionalArguments =
               evaluatePositionalArguments(node.arguments);
-          final left = positionalArguments[0];
-          ensurePrimitiveConstant(left);
-          final right = positionalArguments[1];
-          ensurePrimitiveConstant(right);
-          return left == right ? trueConstant : falseConstant;
+          final Constant left = positionalArguments[0];
+          // TODO(http://dartbug.com/31799): Re-enable these checks.
+          //ensurePrimitiveConstant(left);
+          final Constant right = positionalArguments[1];
+          // TODO(http://dartbug.com/31799): Re-enable these checks.
+          //ensurePrimitiveConstant(right);
+          // Since we canonicalize constants during the evaluation, we can use
+          // identical here.
+          assert(left == right);
+          return identical(left, right) ? trueConstant : falseConstant;
         }
       }
     }
@@ -609,8 +709,63 @@
         'Calling "$target" during constant evaluation is disallowed.');
   }
 
+  visitAsExpression(AsExpression node) {
+    final Constant constant = node.operand.accept(this);
+    ensureIsSubtype(constant, evaluateDartType(node.type));
+    return constant;
+  }
+
+  visitNot(Not node) {
+    final Constant constant = node.operand.accept(this);
+    if (constant is BoolConstant) {
+      return constant == trueConstant ? falseConstant : trueConstant;
+    }
+    throw new ConstantEvaluationError(
+        'A not expression must have a boolean operand.');
+  }
+
+  visitSymbolLiteral(SymbolLiteral node) {
+    final value = canonicalize(new StringConstant(node.value));
+    return canonicalize(backend.buildSymbolConstant(value));
+  }
+
   // Helper methods:
 
+  void ensureIsSubtype(Constant constant, DartType type) {
+    DartType constantType;
+    if (constant is NullConstant) {
+      constantType = new InterfaceType(coreTypes.nullClass);
+    } else if (constant is BoolConstant) {
+      constantType = new InterfaceType(coreTypes.boolClass);
+    } else if (constant is IntConstant) {
+      constantType = new InterfaceType(coreTypes.intClass);
+    } else if (constant is DoubleConstant) {
+      constantType = new InterfaceType(coreTypes.doubleClass);
+    } else if (constant is StringConstant) {
+      constantType = new InterfaceType(coreTypes.stringClass);
+    } else if (constant is MapConstant) {
+      constantType = new InterfaceType(
+          coreTypes.mapClass, <DartType>[constant.keyType, constant.valueType]);
+    } else if (constant is ListConstant) {
+      constantType = new InterfaceType(
+          coreTypes.stringClass, <DartType>[constant.typeArgument]);
+    } else if (constant is InstanceConstant) {
+      constantType = new InterfaceType(constant.klass, constant.typeArguments);
+    } else if (constant is TearOffConstant) {
+      constantType = constant.procedure.function.functionType;
+    } else if (constant is TypeLiteralConstant) {
+      constantType = new InterfaceType(coreTypes.typeClass);
+    } else {
+      throw new ConstantEvaluationError(
+          'No support for obtaining the type of $constant.');
+    }
+
+    if (!typeEnvironment.isSubtypeOf(constantType, type)) {
+      throw new ConstantEvaluationError(
+          'Constant $constant is not a subtype of ${type}.');
+    }
+  }
+
   List<DartType> evaluateTypeArguments(Arguments arguments) {
     return evaluateDartTypes(arguments.types);
   }
@@ -686,7 +841,7 @@
         result = a - b;
         break;
       case '*':
-        result = a - b;
+        result = a * b;
         break;
       case '/':
         result = a / b;
@@ -695,13 +850,13 @@
         result = a ~/ b;
         break;
       case '%':
-        result = a ~/ b;
+        result = a % b;
         break;
     }
 
     if (result != null) {
       return canonicalize(result is int
-          ? new IntConstant(result)
+          ? new IntConstant(_wrapAroundInteger(result))
           : new DoubleConstant(result as double));
     }
 
@@ -719,6 +874,16 @@
     throw new ConstantEvaluationError(
         'Binary operation "$op" on num is disallowed.');
   }
+
+  int _wrapAroundInteger(int value) {
+    if (strongMode) {
+      return value.toSigned(64);
+    }
+    return value;
+  }
+
+  static const kMaxInt64 = (1 << 63) - 1;
+  static const kMinInt64 = -(1 << 63);
 }
 
 /// Holds the necessary information for a constant object, namely
@@ -798,6 +963,7 @@
       List<DartType> typeArguments,
       List<Constant> positionalArguments,
       Map<String, Constant> namedArguments);
+  Constant buildSymbolConstant(StringConstant value);
 
   Constant lowerListConstant(ListConstant constant);
   Constant lowerMapConstant(MapConstant constant);
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index bfbf8f9..0eb36d1 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 library kernel.ast.visitor;
 
+// ignore: UNDEFINED_HIDDEN_NAME
+import 'dart:core' hide MapEntry;
+
 import 'ast.dart';
 
 abstract class ExpressionVisitor<R> {
diff --git a/pkg/kernel/lib/vm/constants_native_effects.dart b/pkg/kernel/lib/vm/constants_native_effects.dart
index b49184a..dd9078b 100644
--- a/pkg/kernel/lib/vm/constants_native_effects.dart
+++ b/pkg/kernel/lib/vm/constants_native_effects.dart
@@ -9,16 +9,34 @@
 import '../core_types.dart';
 
 class VmConstantsBackend implements ConstantsBackend {
+  final Map<String, String> defines;
+
   final Class immutableMapClass;
+  final Class internalSymbolClass;
+  final Field symbolNameField;
 
-  VmConstantsBackend._(this.immutableMapClass);
+  VmConstantsBackend._(this.defines, this.immutableMapClass,
+      this.internalSymbolClass, this.symbolNameField);
 
-  factory VmConstantsBackend(CoreTypes coreTypes) {
+  /// If [defines] is not `null` it will be used for handling
+  /// `const {bool,...}.fromEnvironment()` otherwise the current VM's values
+  /// will be used.
+  factory VmConstantsBackend(Map<String, String> defines, CoreTypes coreTypes) {
     final Library coreLibrary = coreTypes.coreLibrary;
     final Class immutableMapClass = coreLibrary.classes
         .firstWhere((Class klass) => klass.name == '_ImmutableMap');
     assert(immutableMapClass != null);
-    return new VmConstantsBackend._(immutableMapClass);
+
+    final Class internalSymbolClass = coreTypes.internalSymbolClass;
+    assert(internalSymbolClass != null);
+
+    final Field symbolNameField =
+        internalSymbolClass.fields.where((Field field) {
+      return field.isInstanceMember && field.name.name == '_name';
+    }).single;
+
+    return new VmConstantsBackend._(
+        defines, immutableMapClass, internalSymbolClass, symbolNameField);
   }
 
   Constant buildConstantForNative(
@@ -29,31 +47,54 @@
     switch (nativeName) {
       case 'Bool_fromEnvironment':
         final String name = (positionalArguments[0] as StringConstant).value;
-        final Constant constant = namedArguments['defaultValue'];
-        final bool defaultValue =
-            constant is BoolConstant ? constant.value : false;
-        return new BoolConstant(
-            new bool.fromEnvironment(name, defaultValue: defaultValue));
+        final BoolConstant constant = namedArguments['defaultValue'];
+        final bool defaultValue = constant != null ? constant.value : false;
+        bool value;
+        if (defines != null) {
+          value = defines[name] == 'true'
+              ? true
+              : (defines[name] == 'false' ? false : defaultValue);
+        } else {
+          value = new bool.fromEnvironment(name, defaultValue: defaultValue);
+        }
+        return new BoolConstant(value);
       case 'Integer_fromEnvironment':
         final String name = (positionalArguments[0] as StringConstant).value;
         final Constant constant = namedArguments['defaultValue'];
         final int defaultValue =
             constant is IntConstant ? constant.value : null;
-        final int value =
-            new int.fromEnvironment(name, defaultValue: defaultValue);
+        int value;
+        if (defines != null) {
+          value = defines.containsKey(name)
+              ? int.parse(defines[name], onError: (_) => defaultValue)
+              : defaultValue;
+        } else {
+          value = new int.fromEnvironment(name, defaultValue: defaultValue);
+        }
         return value != null ? new IntConstant(value) : new NullConstant();
       case 'String_fromEnvironment':
         final String name = (positionalArguments[0] as StringConstant).value;
         final Constant constant = namedArguments['defaultValue'];
         final String defaultValue =
             constant is StringConstant ? constant.value : null;
-        final String value =
-            new String.fromEnvironment(name, defaultValue: defaultValue);
+        String value;
+        if (defines != null) {
+          value = defines[name] ?? defaultValue;
+        } else {
+          value = new String.fromEnvironment(name, defaultValue: defaultValue);
+        }
         return value == null ? new NullConstant() : new StringConstant(value);
     }
     throw 'No native effect registered for constant evaluation: $nativeName';
   }
 
+  Constant buildSymbolConstant(StringConstant value) {
+    return new InstanceConstant(
+        internalSymbolClass.reference,
+        const <DartType>[],
+        <Reference, Constant>{symbolNameField.reference: value});
+  }
+
   Constant lowerMapConstant(MapConstant constant) {
     // The _ImmutableMap class is implemented via one field pointing to a list
     // of key/value pairs -- see runtime/lib/immutable_map.dart!
diff --git a/pkg/pkg.status b/pkg/pkg.status
index b210ee2..c39de25 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -36,6 +36,11 @@
 
 # Skip dev_compiler codegen tests
 dev_compiler/test/codegen/*: Skip
+dev_compiler/test/codegen_test: Skip
+dev_compiler/test/options/*: Skip
+dev_compiler/test/sourcemap/*: SkipByDesign
+dev_compiler/test/sourcemap/testfiles/*: SkipByDesign
+dev_compiler/test/worker/*: Skip
 dev_compiler/gen/*: SkipByDesign
 
 # Anything in rasta is input to fasta unit tests and shouldn't be run as tests.
@@ -79,11 +84,11 @@
 [ $compiler == dart2analyzer && $builder_tag == strong ]
 *: Skip # Issue 28649
 
-# Analyze dev_compiler but don't run its tests
-[ $compiler != dart2analyzer ]
+# Analyze dev_compiler but only run its tests on the vm
+[ $compiler != dart2analyzer && $runtime != vm ]
 dev_compiler/test/*: Skip
 
-[ $compiler == dart2analyzer ]
+[ $compiler == dart2analyzer || $runtime != vm ]
 dev_compiler/test/options/*: SkipByDesign
 
 [ $compiler == none && $runtime == drt ]
@@ -95,9 +100,15 @@
 analysis_server/test/completion_test: Pass, Slow
 analysis_server/test/integration/completion: Pass, Slow
 analysis_server/test/integration/search/find_top_level_declarations_test: Pass, RuntimeError # 31571
+analysis_server/test/integration/edit/format_test: Pass, Slow
+analysis_server/test/integration/analysis/error_test: Pass, Slow
+analysis_server/test/integration/analysis/lint_test: Pass, Slow
+analysis_server/test/integration/edit/import_elements_test: Pass, Slow
+analysis_server/test/integration/edit/organize_directives_test: Pass, Slow
 
 [ $runtime == vm && $checked ]
 analysis_server/test/completion_test: Pass, Slow
+analysis_server/test/integration/edit/sort_members_test: Pass, Slow
 analysis_server/test/services/correction/fix_test: Pass, Slow
 analysis_server/test/socket_server_test: Skip # Pass, Slow
 analyzer/test/generated/non_error_resolver_kernel_test: Skip # Timing out even with Pass, Slow: Issue 30796
@@ -117,9 +128,6 @@
 front_end/test/src/incremental/hot_reload_e2e_test: Skip # Issue 28629
 kernel/test/metadata_test: Skip # Issue 28629
 
-[ $runtime == vm && ! $use_sdk ]
-front_end/tool/perf_test: Skip # Issue 28698
-
 [ $runtime == vm && $use_sdk ]
 front_end/tool/fasta_perf_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
 front_end/test/kernel_generator_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
@@ -152,7 +160,7 @@
 front_end/test/incremental_resolved_ast_generator_test: SkipByDesign # Uses dart:io
 front_end/test/memory_file_system_test: CompileTimeError # Issue 23773
 front_end/test/dependency_grapher_test: SkipByDesign # Uses dart:io
-front_end/test/physical_file_system_test: SkipByDesign # Uses dart:io
+front_end/test/standard_file_system_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/file_repository_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/libraries_reader_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/processed_options_test: SkipByDesign # Uses dart:io
@@ -219,7 +227,7 @@
 [ $browser || $jscl ]
 kernel/test/*: SkipByDesign # Uses dart:io and bigints.
 
-[ $runtime == vm && ($arch == simarm64 || $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == armv6 || $arch == armv5te) ]
+[ $runtime == vm && ($arch == simarm64 || $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == armv6 || $arch == armv5te || $arch == simdbc64) ]
 # Timeout. These are not unit tests. They do not run efficiently on our
 # simulator or low-end devices.
 *: Skip
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 13be81e..46a4c7c 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -29,7 +29,7 @@
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/api_prototype/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart'
     show computePlatformBinariesLocation;
 import 'package:front_end/src/fasta/kernel/utils.dart';
@@ -72,6 +72,7 @@
           (message, Severity severity, String formatted, int line, int column) {
         switch (severity) {
           case Severity.error:
+          case Severity.errorLegacyWarning:
           case Severity.internalProblem:
             // TODO(sigmund): support emitting code with errors as long as they
             // are handled in the generated code (issue #30194).
@@ -156,7 +157,7 @@
     }
   } else {
     final FileSystem fileSystem = sourceFiles == null
-        ? PhysicalFileSystem.instance
+        ? StandardFileSystem.instance
         : _buildFileSystem(sourceFiles);
 
     // TODO(aam): IncrementalCompiler instance created below have to be
@@ -203,7 +204,7 @@
         suppressWarnings: suppressWarnings);
   } else {
     final FileSystem fileSystem = sourceFiles == null
-        ? PhysicalFileSystem.instance
+        ? StandardFileSystem.instance
         : _buildFileSystem(sourceFiles);
     compiler = new SingleShotCompiler(fileSystem, platformKernel,
         requireMain: sourceFiles == null,
@@ -256,7 +257,7 @@
 /// The [namedSources] list interleaves file name string and
 /// raw file content Uint8List.
 ///
-/// The result can be used instead of PhysicalFileSystem.instance by the
+/// The result can be used instead of StandardFileSystem.instance by the
 /// frontend.
 FileSystem _buildFileSystem(List namedSources) {
   MemoryFileSystem fileSystem = new MemoryFileSystem(Uri.parse('file:///'));
diff --git a/pkg/vm/lib/transformations/devirtualization.dart b/pkg/vm/lib/transformations/devirtualization.dart
index 9d8685b..7cca514 100644
--- a/pkg/vm/lib/transformations/devirtualization.dart
+++ b/pkg/vm/lib/transformations/devirtualization.dart
@@ -65,6 +65,10 @@
     return true;
   }
 
+  bool hasExtraTargetForNull(DirectCallMetadata directCall) =>
+      directCall.checkReceiverForNull &&
+      _objectMemberNames.contains(directCall.target.name);
+
   DirectCallMetadata getDirectCall(TreeNode node, Member target,
       {bool setter = false});
 
@@ -90,15 +94,14 @@
     super.visitMethodInvocation(node);
 
     Member target = node.interfaceTarget;
-    if ((target != null) &&
-        isMethod(target) &&
-        !_objectMemberNames.contains(target.name)) {
+    if ((target != null) && isMethod(target)) {
       DirectCallMetadata directCall = getDirectCall(node, target);
       // TODO(dartbug.com/30480): Convert _isLegalTargetForMethodInvocation()
       // check into an assertion once front-end implements override checks.
       if ((directCall != null) &&
           isMethod(directCall.target) &&
-          isLegalTargetForMethodInvocation(directCall.target, node.arguments)) {
+          isLegalTargetForMethodInvocation(directCall.target, node.arguments) &&
+          !hasExtraTargetForNull(directCall)) {
         makeDirectCall(node, target, directCall);
       }
     }
@@ -109,11 +112,11 @@
     super.visitPropertyGet(node);
 
     Member target = node.interfaceTarget;
-    if ((target != null) &&
-        isFieldOrGetter(target) &&
-        !_objectMemberNames.contains(target.name)) {
+    if ((target != null) && isFieldOrGetter(target)) {
       DirectCallMetadata directCall = getDirectCall(node, target);
-      if ((directCall != null) && isFieldOrGetter(directCall.target)) {
+      if ((directCall != null) &&
+          isFieldOrGetter(directCall.target) &&
+          !hasExtraTargetForNull(directCall)) {
         makeDirectCall(node, target, directCall);
       }
     }
diff --git a/pkg/vm/tool/dart2.bat b/pkg/vm/tool/dart2.bat
new file mode 100644
index 0000000..739671a
--- /dev/null
+++ b/pkg/vm/tool/dart2.bat
@@ -0,0 +1,36 @@
+@echo off
+REM Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+REM for details. All rights reserved. Use of this source code is governed by a
+REM BSD-style license that can be found in the LICENSE file.
+
+REM Script for running JIT mode VM with Dart 2 pipeline: using Fasta in DFE
+REM isolate and strong mode semantics.
+
+set SCRIPTPATH=%~dp0
+
+REM Does the path have a trailing slash? If so, remove it.
+if %SCRIPTPATH:~-1%==\ set SCRIPTPATH=%SCRIPTPATH:~0,-1%
+
+set OUT_DIR=%SCRIPTPATH%/../../../out/
+
+REM Remove trailing spaces
+set DART_CONFIGURATION=%DART_CONFIGURATION: =%
+
+if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseX64
+if "%DART_USE_SDK%"=="" set DART_USE_SDK=0
+set BUILD_DIR=%OUT_DIR%%DART_CONFIGURATION%
+
+if not "_%DART_VM_OPTIONS%_" == "__" (
+  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% %DART_VM_OPTIONS%
+)
+
+if "%DART_USE_SDK%"=="1" (
+  set DART_BINARY=%BUILD_DIR%/dart-sdk/bin/dart
+  set KERNEL_BINARIES_DIR=%BUILD_DIR%/dart-sdk/lib/_internal
+) else (
+  set DART_BINARY=%BUILD_DIR%/dart
+  set KERNEL_BINARIES_DIR=%BUILD_DIR%
+)
+set KERNEL_SERVICE_SNAPSHOT=%BUILD_DIR%/gen/kernel-service.dart.snapshot
+
+"%DART_BINARY%" --strong --reify-generic-functions --limit-ints-to-64-bits --dfe="%KERNEL_SERVICE_SNAPSHOT%" --kernel-binaries="%KERNEL_BINARIES_DIR%" %*
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index 4be5a13..d6dbafa 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -339,4 +339,7 @@
     "--input",
     rebase_path("vm/version_in.cc", root_build_dir),
   ]
+  if (!dart_version_git_info) {
+    args += [ "--ignore_svn_revision" ]
+  }
 }
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 56139f95..f5e48a8 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -1226,7 +1226,7 @@
   Dart_Handle result;
 
   // Precompile with specified embedder entry points
-  result = Dart_Precompile(standalone_entry_points, NULL, 0);
+  result = Dart_Precompile(standalone_entry_points);
   CHECK_RESULT(result);
 
   // Create a precompiled snapshot.
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index c030a71..f50e9ccd 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -803,27 +803,7 @@
     }
 
     if (Options::gen_snapshot_kind() == kAppAOT) {
-      uint8_t* feedback_buffer = NULL;
-      intptr_t feedback_length = 0;
-      if (Options::load_feedback_filename() != NULL) {
-        File* file =
-            File::Open(NULL, Options::load_feedback_filename(), File::kRead);
-        if (file == NULL) {
-          ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n");
-        }
-        feedback_length = file->Length();
-        feedback_buffer = reinterpret_cast<uint8_t*>(malloc(feedback_length));
-        if (!file->ReadFully(feedback_buffer, feedback_length)) {
-          ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n");
-        }
-        file->Release();
-      }
-
-      result = Dart_Precompile(standalone_entry_points, feedback_buffer,
-                               feedback_length);
-      if (feedback_buffer != NULL) {
-        free(feedback_buffer);
-      }
+      result = Dart_Precompile(standalone_entry_points);
       CHECK_RESULT(result);
 
       if (Options::obfuscate() &&
@@ -893,14 +873,6 @@
       }
       CHECK_RESULT(result);
 
-      if (Options::save_feedback_filename() != NULL) {
-        uint8_t* buffer = NULL;
-        intptr_t size = 0;
-        result = Dart_SaveJITFeedback(&buffer, &size);
-        CHECK_RESULT(result);
-        WriteFile(Options::save_feedback_filename(), buffer, size);
-      }
-
       if (Options::save_compilation_trace_filename() != NULL) {
         uint8_t* buffer = NULL;
         intptr_t size = 0;
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index 142e636..793d3d8 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -24,8 +24,6 @@
   V(save_obfuscation_map, obfuscation_map_filename)                            \
   V(save_compilation_trace, save_compilation_trace_filename)                   \
   V(load_compilation_trace, load_compilation_trace_filename)                   \
-  V(save_feedback, save_feedback_filename)                                     \
-  V(load_feedback, load_feedback_filename)                                     \
   V(root_certs_file, root_certs_file)                                          \
   V(root_certs_cache, root_certs_cache)                                        \
   V(namespace, namespc)
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index c5e0999..5cc3992 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3186,44 +3186,17 @@
  */
 
 /**
- * Saves a serialized version of the information collected for use by the
- * optimizing compiler, such as type feedback and usage counters. When this
- * information is passed to Dart_Precompile, the AOT compiler may use it to
- * produce faster and smaller code. The feedback is only used if the JIT that
- * created it and the AOT compiler consuming it
- *   - are running the same Dart program
- *   - are built from the same version of the VM
- *   - agree on whether type checks and assertions are enabled
- *
- * \return Returns an error handler if the VM was built in a mode that does not
- * support saving JIT feedback.
- */
-DART_EXPORT Dart_Handle Dart_SaveJITFeedback(uint8_t** buffer,
-                                             intptr_t* buffer_length);
-
-/**
  * Compiles all functions reachable from the provided entry points and marks
  * the isolate to disallow future compilation.
  *
  * \param entry_points A list of functions that may be invoked through the
  * embedding API, e.g. Dart_Invoke/GetField/SetField/New/InvokeClosure.
  *
- * \param reset_fields Controls whether static fields are reset. Fields without
- * an initializer will be set to null, and fields with an initializer will have
- * their initializer run the next time they are accessed.
- *
- * reset_fields is true when we are about to create a precompilated snapshot.
- * Some fields are already been initialized as part of the loading logic, and
- * we want them to be reinitialized in the new process that will load the
- * snapshot.
- *
  * \return An error handle if a compilation error or runtime error running const
  * constructors was encountered.
  */
 DART_EXPORT Dart_Handle
-Dart_Precompile(Dart_QualifiedFunctionName entry_points[],
-                uint8_t* jit_feedback,
-                intptr_t jit_feedback_length);
+Dart_Precompile(Dart_QualifiedFunctionName entry_points[]);
 
 /**
  *  Creates a precompiled snapshot.
diff --git a/runtime/lib/developer.dart b/runtime/lib/developer.dart
index 6d47e33..f9ef541 100644
--- a/runtime/lib/developer.dart
+++ b/runtime/lib/developer.dart
@@ -76,7 +76,7 @@
     SendPort replyPort,
     Object id,
     bool trace_service) {
-  var parameters = {};
+  var parameters = <String, String>{};
   for (var i = 0; i < parameterKeys.length; i++) {
     parameters[parameterKeys[i]] = parameterValues[i];
   }
diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
index 39dc5b5..e89d074 100644
--- a/runtime/observatory/lib/object_graph.dart
+++ b/runtime/observatory/lib/object_graph.dart
@@ -279,7 +279,7 @@
     var doms = _graph._doms;
 
     var parentId = _id;
-    var domChildren = [];
+    var domChildren = <ObjectVertex>[];
 
     for (var childId = ROOT; childId <= N; childId++) {
       if (doms[childId] == parentId) {
diff --git a/runtime/observatory/lib/src/debugger/debugger_location.dart b/runtime/observatory/lib/src/debugger/debugger_location.dart
index ba05ed5..9ba4bac 100644
--- a/runtime/observatory/lib/src/debugger/debugger_location.dart
+++ b/runtime/observatory/lib/src/debugger/debugger_location.dart
@@ -113,14 +113,14 @@
 
   static Future<List<Script>> _lookupScript(Isolate isolate, String name,
       {bool allowPrefix: false}) {
-    var pending = [];
+    var pending = <Future>[];
     for (var lib in isolate.libraries) {
       if (!lib.loaded) {
         pending.add(lib.load());
       }
     }
     return Future.wait(pending).then((_) {
-      List matches = [];
+      var matches = <Script>[];
       for (var lib in isolate.libraries) {
         for (var script in lib.scripts) {
           if (allowPrefix) {
@@ -140,7 +140,7 @@
 
   static List<ServiceFunction> _lookupFunction(Isolate isolate, String name,
       {bool allowPrefix: false}) {
-    var matches = [];
+    var matches = <ServiceFunction>[];
     for (var lib in isolate.libraries) {
       assert(lib.loaded);
       for (var function in lib.functions) {
@@ -163,7 +163,7 @@
     if (isolate == null) {
       return [];
     }
-    var pending = [];
+    var pending = <Future>[];
     for (var lib in isolate.libraries) {
       assert(lib.loaded);
       for (var cls in lib.classes) {
@@ -173,7 +173,7 @@
       }
     }
     await Future.wait(pending);
-    var matches = [];
+    var matches = <Class>[];
     for (var lib in isolate.libraries) {
       for (var cls in lib.classes) {
         if (allowPrefix) {
@@ -260,7 +260,7 @@
 
   /// Completes a partial source location description.
   static Future<List<String>> complete(Debugger debugger, String locDesc) {
-    List<Future<List<String>>> pending = [];
+    var pending = <Future<List<String>>>[];
     var match = partialFunctionMatcher.firstMatch(locDesc);
     if (match != null) {
       pending.add(_completeFunction(debugger, match));
@@ -272,7 +272,7 @@
     }
 
     return Future.wait(pending).then((List<List<String>> responses) {
-      var completions = [];
+      var completions = <String>[];
       for (var response in responses) {
         completions.addAll(response);
       }
@@ -289,7 +289,7 @@
 
     if (qualifier == null) {
       return _lookupClass(isolate, base, allowPrefix: true).then((classes) {
-        var completions = [];
+        var completions = <String>[];
 
         // Complete top-level function names.
         var functions = _lookupFunction(isolate, base, allowPrefix: true);
@@ -306,7 +306,7 @@
       });
     } else {
       return _lookupClass(isolate, base, allowPrefix: false).then((classes) {
-        var completions = [];
+        var completions = <String>[];
         for (var cls in classes) {
           for (var function in cls.functions) {
             if (function.kind == M.FunctionKind.constructor) {
@@ -375,7 +375,7 @@
       // The script name is incomplete.  Complete it.
       var scripts =
           await _lookupScript(debugger.isolate, scriptName, allowPrefix: true);
-      List completions = [];
+      var completions = <String>[];
       for (var script in scripts) {
         completions.add(script.name + ':');
       }
@@ -393,7 +393,7 @@
       if (!lineStrComplete) {
         // Complete the line.
         var sharedPrefix = '${script.name}:';
-        List completions = [];
+        var completions = <String>[];
         var report = await script.isolate
             .getSourceReport([Isolate.kPossibleBreakpointsReport], script);
         Set<int> possibleBpts = getPossibleBreakpointLines(report, script);
@@ -410,7 +410,7 @@
         int lineNum = int.parse(lineStr);
         var scriptLine = script.getLine(lineNum);
         var sharedPrefix = '${script.name}:${lineStr}:';
-        List completions = [];
+        var completions = <String>[];
         int maxCol = scriptLine.text.trimRight().runes.length;
         for (int i = 1; i <= maxCol; i++) {
           var currentColStr = i.toString();
diff --git a/runtime/observatory/lib/src/heap_snapshot/heap_snapshot.dart b/runtime/observatory/lib/src/heap_snapshot/heap_snapshot.dart
index 7e56fd9..c14bff7b 100644
--- a/runtime/observatory/lib/src/heap_snapshot/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/heap_snapshot/heap_snapshot.dart
@@ -49,7 +49,7 @@
 
   Future<List<MergedVertex>> buildMergedVertices(
       S.Isolate isolate, ObjectGraph graph, signal) async {
-    final cidToMergedVertex = {};
+    final cidToMergedVertex = <int, MergedVertex>{};
 
     int count = 0;
     final Stopwatch watch = new Stopwatch();
@@ -104,7 +104,7 @@
 
   buildOwnershipClasses(S.Isolate isolate, ObjectGraph graph) {
     var numCids = graph.numCids;
-    var classes = new List();
+    var classes = new List<HeapSnapshotOwnershipClass>();
     for (var cid = 0; cid < numCids; cid++) {
       var size = graph.getOwnedByCid(cid);
       if (size != 0) {
@@ -144,8 +144,8 @@
     if (_preloaded != null) {
       return new Future.value(_preloaded);
     } else {
-      return isolate.getObjectByAddress(v.address).then((S.HeapObject obj) {
-        return _preloaded = obj;
+      return isolate.getObjectByAddress(v.address).then((S.ServiceObject obj) {
+        return _preloaded = obj as S.HeapObject;
       });
     }
   }
diff --git a/runtime/observatory/lib/src/models/objects/instance.dart b/runtime/observatory/lib/src/models/objects/instance.dart
index e85e861f..982d6d8 100644
--- a/runtime/observatory/lib/src/models/objects/instance.dart
+++ b/runtime/observatory/lib/src/models/objects/instance.dart
@@ -323,7 +323,7 @@
   ///   Int32x4List
   ///   Float32x4List
   ///   Float64x2List
-  Iterable<dynamic> get typedElements;
+  List<dynamic> get typedElements;
 
   /// [optional] The native fields of this Instance.
   Iterable<NativeField> get nativeFields;
diff --git a/runtime/observatory/lib/src/sample_profile/sample_profile.dart b/runtime/observatory/lib/src/sample_profile/sample_profile.dart
index db9c060..a116563 100644
--- a/runtime/observatory/lib/src/sample_profile/sample_profile.dart
+++ b/runtime/observatory/lib/src/sample_profile/sample_profile.dart
@@ -134,7 +134,7 @@
   FunctionCallTreeNodeCode(this.code, this.ticks);
 }
 
-class FunctionCallTreeNode extends CallTreeNode {
+class FunctionCallTreeNode extends CallTreeNode<FunctionCallTreeNode> {
   final ProfileFunction profileFunction;
   final codes = new List<FunctionCallTreeNodeCode>();
   int _totalCodeTicks = 0;
@@ -210,7 +210,7 @@
 typedef bool CallTreeNodeFilter(CallTreeNode node);
 
 /// Build a filter version of a FunctionCallTree.
-abstract class _FilteredCallTreeBuilder {
+abstract class _FilteredCallTreeBuilder<NodeT extends CallTreeNode> {
   /// The filter.
   final CallTreeNodeFilter filter;
 
@@ -235,14 +235,15 @@
 
   CallTreeNode _findInChildren(CallTreeNode current, CallTreeNode needle) {
     for (var child in current.children) {
-      if (child.profileData == needle.profileData) {
+      if ((child as CallTreeNode).profileData ==
+          (needle as CallTreeNode).profileData) {
         return child;
       }
     }
     return null;
   }
 
-  CallTreeNode _copyNode(CallTreeNode node);
+  NodeT _copyNode(NodeT node);
 
   /// Add all nodes in [_currentPath].
   FunctionCallTreeNode _addCurrentPath() {
@@ -320,7 +321,8 @@
   }
 }
 
-class _FilteredFunctionCallTreeBuilder extends _FilteredCallTreeBuilder {
+class _FilteredFunctionCallTreeBuilder
+    extends _FilteredCallTreeBuilder<FunctionCallTreeNode> {
   _FilteredFunctionCallTreeBuilder(
       CallTreeNodeFilter filter, FunctionCallTree tree)
       : super(
@@ -329,8 +331,8 @@
             new FunctionCallTree(
                 tree.inclusive,
                 new FunctionCallTreeNode(
-                    tree.root.profileData,
-                    tree.root.count,
+                    (tree.root as CallTreeNode).profileData,
+                    (tree.root as CallTreeNode).count,
                     tree.root.inclusiveNativeAllocations,
                     tree.root.exclusiveNativeAllocations)));
 
@@ -340,7 +342,8 @@
   }
 }
 
-class _FilteredCodeCallTreeBuilder extends _FilteredCallTreeBuilder {
+class _FilteredCodeCallTreeBuilder
+    extends _FilteredCallTreeBuilder<CodeCallTreeNode> {
   _FilteredCodeCallTreeBuilder(CallTreeNodeFilter filter, CodeCallTree tree)
       : super(
             filter,
@@ -359,7 +362,8 @@
   }
 }
 
-class FunctionCallTree extends CallTree implements M.FunctionCallTree {
+class FunctionCallTree extends CallTree<FunctionCallTreeNode>
+    implements M.FunctionCallTree {
   FunctionCallTree(bool inclusive, FunctionCallTreeNode root)
       : super(inclusive, root) {
     if ((root.inclusiveNativeAllocations != null) &&
@@ -439,7 +443,7 @@
 
   _markFunctionCalls() {
     for (var child in root.children) {
-      _markFunctionCallsInner(null, child);
+      _markFunctionCallsInner(null, child as FunctionCallTreeNode);
     }
   }
 }
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 5379315..1b9159b 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -108,7 +108,8 @@
     return o1.name.compareTo(o2.name);
   }
 
-  List removeDuplicatesAndSortLexical(List<ServiceObject> list) {
+  List<T> removeDuplicatesAndSortLexical<T extends ServiceObject>(
+      List<T> list) {
     return list.toSet().toList()..sort(LexicalSortName);
   }
 
@@ -451,7 +452,7 @@
   /// be [loaded].
   ServiceObject getFromMap(Map map);
 
-  Future<M.Object> invokeRpc(String method, Map params);
+  Future<ServiceObject> invokeRpc(String method, Map params);
 }
 
 abstract class Location implements M.Location {
@@ -821,7 +822,7 @@
   Future<Map> invokeRpcRaw(String method, Map params);
 
   Future<Map> invokeRpcNoUpgrade(String method, Map params) {
-    return invokeRpcRaw(method, params).then((Map response) {
+    return invokeRpcRaw(method, params).then<Map>((Map response) {
       var map = response;
       if (Tracer.current != null) {
         Tracer.current
@@ -832,15 +833,16 @@
             "Response is missing the 'type' field", map);
         return new Future.error(exception);
       }
-      return new Future.value(map);
+      return new Future<Map>.value(map);
     }).catchError((e) {
       // Errors pass through.
-      return new Future.error(e);
+      return new Future<Map>.error(e);
     });
   }
 
-  Future<dynamic> invokeRpc(String method, Map params) {
-    return invokeRpcNoUpgrade(method, params).then((Map response) {
+  Future<ServiceObject> invokeRpc(String method, Map params) {
+    return invokeRpcNoUpgrade(method, params)
+        .then<ServiceObject>((Map response) {
       var obj = new ServiceObject._fromMap(this, response);
       if ((obj != null) && obj.canCache) {
         String objId = obj.id;
@@ -848,7 +850,7 @@
       }
       return obj;
     }).catchError((e) {
-      return new Future.error(e);
+      return new Future<ServiceObject>.error(e);
     });
   }
 
@@ -994,7 +996,7 @@
 
   // Reload all isolates.
   Future reloadIsolates() {
-    var reloads = [];
+    var reloads = <Future>[];
     for (var isolate in isolates) {
       var reload = isolate.reload().catchError((e) {
         Logger.root.info('Bulk reloading of isolates failed: $e');
@@ -1362,7 +1364,7 @@
 
   Future<ServiceMap> getSourceReport(List<String> report_kinds,
       [Script script, int startPos, int endPos]) {
-    var params = {'reports': report_kinds};
+    var params = <String, dynamic>{'reports': report_kinds};
     if (script != null) {
       params['scriptId'] = script.id;
     }
@@ -1389,7 +1391,7 @@
     }
     return invokeRpc('reloadSources', params).then((result) {
       _cache.clear();
-      return result;
+      return result as ServiceMap;
     });
   }
 
@@ -1405,10 +1407,10 @@
 
   /// Fetches and builds the class hierarchy for this isolate. Returns the
   /// Object class object.
-  Future<Class> getClassHierarchy() {
-    return invokeRpc('getClassList', {})
-        .then(_loadClasses)
-        .then(_buildClassHierarchy);
+  Future<Class> getClassHierarchy() async {
+    var classRefs = await invokeRpc('getClassList', {});
+    var classes = await _loadClasses(classRefs);
+    return _buildClassHierarchy(classes);
   }
 
   Future<ServiceObject> getPorts() {
@@ -1422,7 +1424,7 @@
   Future<List<Class>> getClassRefs() async {
     ServiceMap classList = await invokeRpc('getClassList', {});
     assert(classList.type == 'ClassList');
-    var classRefs = [];
+    var classRefs = <Class>[];
     for (var cls in classList['classes']) {
       // Skip over non-class classes.
       if (cls is Class) {
@@ -1436,7 +1438,7 @@
   /// Given the class list, loads each class.
   Future<List<Class>> _loadClasses(ServiceMap classList) {
     assert(classList.type == 'ClassList');
-    var futureClasses = [];
+    var futureClasses = <Future<Class>>[];
     for (var cls in classList['classes']) {
       // Skip over non-class classes.
       if (cls is Class) {
@@ -1495,7 +1497,7 @@
     return vm.invokeRpcNoUpgrade(method, params);
   }
 
-  Future<dynamic> invokeRpc(String method, Map params) {
+  Future<ServiceObject> invokeRpc(String method, Map params) {
     return invokeRpcNoUpgrade(method, params).then((Map response) {
       return getFromMap(response);
     });
@@ -1671,7 +1673,7 @@
     error = map['error'];
 
     libraries.clear();
-    libraries.addAll(map['libraries']);
+    for (Library l in map['libraries']) libraries.add(l);
     libraries.sort(ServiceObject.LexicalSortName);
     if (savedStartTime == null) {
       vm._buildIsolateList();
@@ -1679,12 +1681,12 @@
 
     extensionRPCs.clear();
     if (map['extensionRPCs'] != null) {
-      extensionRPCs.addAll(map['extensionRPCs']);
+      for (String e in map['extensionRPCs']) extensionRPCs.add(e);
     }
 
     threads.clear();
     if (map['_threads'] != null) {
-      threads.addAll(map['_threads']);
+      for (Thread t in map['_threads']) threads.add(t);
     }
 
     int currentZoneHighWatermark = 0;
@@ -1792,7 +1794,7 @@
     }
   }
 
-  Future<ServiceObject> addBreakpoint(Script script, int line, [int col]) {
+  Future<Breakpoint> addBreakpoint(Script script, int line, [int col]) {
     Map params = {
       'scriptId': script.id,
       'line': line,
@@ -1800,11 +1802,11 @@
     if (col != null) {
       params['column'] = col;
     }
-    return invokeRpc('addBreakpoint', params);
+    return invokeRpc('addBreakpoint', params)
+        .then((result) => result as Breakpoint);
   }
 
-  Future<ServiceObject> addBreakpointByScriptUri(String uri, int line,
-      [int col]) {
+  Future<Breakpoint> addBreakpointByScriptUri(String uri, int line, [int col]) {
     Map params = {
       'scriptUri': uri,
       'line': line.toString(),
@@ -1812,15 +1814,18 @@
     if (col != null) {
       params['column'] = col.toString();
     }
-    return invokeRpc('addBreakpointWithScriptUri', params);
+    return invokeRpc('addBreakpointWithScriptUri', params)
+        .then((result) => result as Breakpoint);
   }
 
-  Future<ServiceObject> addBreakpointAtEntry(ServiceFunction function) {
-    return invokeRpc('addBreakpointAtEntry', {'functionId': function.id});
+  Future<Breakpoint> addBreakpointAtEntry(ServiceFunction function) {
+    return invokeRpc('addBreakpointAtEntry', {'functionId': function.id})
+        .then((result) => result as Breakpoint);
   }
 
-  Future<ServiceObject> addBreakOnActivation(Instance closure) {
-    return invokeRpc('_addBreakpointAtActivation', {'objectId': closure.id});
+  Future<Breakpoint> addBreakOnActivation(Instance closure) {
+    return invokeRpc('_addBreakpointAtActivation', {'objectId': closure.id})
+        .then((result) => result as Breakpoint);
   }
 
   Future removeBreakpoint(Breakpoint bpt) {
@@ -1864,7 +1869,7 @@
   }
 
   Future<ServiceMap> getStack() {
-    return invokeRpc('getStack', {});
+    return invokeRpc('getStack', {}).then((response) => response as ServiceMap);
   }
 
   Future<ObjectStore> getObjectStore() {
@@ -1952,12 +1957,13 @@
     return invokeRpc('_getInstances', params);
   }
 
-  Future<ServiceObject> getObjectByAddress(String address, [bool ref = true]) {
+  Future<HeapObject> getObjectByAddress(String address, [bool ref = true]) {
     Map params = {
       'address': address,
       'ref': ref,
     };
-    return invokeRpc('_getObjectByAddress', params);
+    return invokeRpc('_getObjectByAddress', params)
+        .then((result) => result as HeapObject);
   }
 
   final Map<String, ServiceMetric> dartMetrics = <String, ServiceMetric>{};
@@ -1967,7 +1973,7 @@
   Future<Map<String, ServiceMetric>> _refreshMetrics(
       String metricType, Map<String, ServiceMetric> metricsMap) {
     return invokeRpc('_getIsolateMetricList', {'type': metricType})
-        .then((result) {
+        .then((dynamic result) {
       // Clear metrics map.
       metricsMap.clear();
       // Repopulate metrics map.
@@ -2206,7 +2212,7 @@
       breakpoint = map['breakpoint'];
     }
     if (map['pauseBreakpoints'] != null) {
-      pauseBreakpoints = map['pauseBreakpoints'];
+      pauseBreakpoints = new List<Breakpoint>.from(map['pauseBreakpoints']);
       if (pauseBreakpoints.length > 0) {
         breakpoint = pauseBreakpoints[0];
       }
@@ -2389,11 +2395,11 @@
 
 class Library extends HeapObject implements M.Library {
   String uri;
-  final dependencies = <LibraryDependency>[];
-  final scripts = <Script>[];
-  final classes = <Class>[];
-  final variables = <Field>[];
-  final functions = <ServiceFunction>[];
+  final List<LibraryDependency> dependencies = <LibraryDependency>[];
+  final List<Script> scripts = <Script>[];
+  final List<Class> classes = <Class>[];
+  final List<Field> variables = <Field>[];
+  final List<ServiceFunction> functions = <ServiceFunction>[];
   bool _debuggable;
   bool get debuggable => _debuggable;
   bool get immutable => false;
@@ -2425,17 +2431,20 @@
     _loaded = true;
     _debuggable = map['debuggable'];
     dependencies.clear();
-    dependencies.addAll(map["dependencies"].map(LibraryDependency._fromMap));
+    for (var dependency in map["dependencies"]) {
+      dependencies.add(LibraryDependency._fromMap(dependency));
+    }
     scripts.clear();
-    scripts.addAll(removeDuplicatesAndSortLexical(map['scripts']));
+    scripts.addAll(
+        removeDuplicatesAndSortLexical(new List<Script>.from(map['scripts'])));
     classes.clear();
-    classes.addAll(map['classes']);
+    for (Class c in map['classes']) classes.add(c);
     classes.sort(ServiceObject.LexicalSortName);
     variables.clear();
-    variables.addAll(map['variables']);
+    for (Field v in map['variables']) variables.add(v);
     variables.sort(ServiceObject.LexicalSortName);
     functions.clear();
-    functions.addAll(map['functions']);
+    for (ServiceFunction f in map['functions']) functions.add(f);
     functions.sort(ServiceObject.LexicalSortName);
   }
 
@@ -2520,12 +2529,12 @@
   bool get hasAllocations => newSpace.notEmpty || oldSpace.notEmpty;
   bool get hasNoAllocations => newSpace.empty && oldSpace.empty;
   bool traceAllocations = false;
-  final fields = <Field>[];
-  final functions = <ServiceFunction>[];
+  final List<Field> fields = <Field>[];
+  final List<ServiceFunction> functions = <ServiceFunction>[];
 
   Class superclass;
-  final interfaces = <Instance>[];
-  final subclasses = <Class>[];
+  final List<Instance> interfaces = <Instance>[];
+  final List<Class> subclasses = <Class>[];
 
   Instance superType;
   Instance mixin;
@@ -2572,19 +2581,19 @@
     isImplemented = map['_implemented'];
 
     subclasses.clear();
-    subclasses.addAll(map['subclasses']);
+    for (Class c in map['subclasses']) subclasses.add(c);
     subclasses.sort(ServiceObject.LexicalSortName);
 
     interfaces.clear();
-    interfaces.addAll(map['interfaces']);
+    for (Instance i in map['interfaces']) interfaces.add(i);
     interfaces.sort(ServiceObject.LexicalSortName);
 
     fields.clear();
-    fields.addAll(map['fields']);
+    for (Field f in map['fields']) fields.add(f);
     fields.sort(ServiceObject.LexicalSortName);
 
     functions.clear();
-    functions.addAll(map['functions']);
+    for (ServiceFunction f in map['functions']) functions.add(f);
     functions.sort(ServiceObject.LexicalSortName);
 
     superclass = map['super'];
@@ -2711,7 +2720,7 @@
   throw new FallThroughError();
 }
 
-class Guarded<T> implements M.Guarded<T> {
+class Guarded<T extends ServiceObject> implements M.Guarded<T> {
   bool get isValue => asValue != null;
   bool get isSentinel => asSentinel != null;
   final Sentinel asSentinel;
@@ -2772,7 +2781,7 @@
   var nativeFields;
   Iterable<Guarded<HeapObject>> elements; // If a List.
   Iterable<MapAssociation> associations; // If a Map.
-  Iterable<dynamic> typedElements; // If a TypedData.
+  List<dynamic> typedElements; // If a TypedData.
   HeapObject referent; // If a MirrorReference.
   Instance key; // If a WeakProperty.
   Instance value; // If a WeakProperty.
@@ -2874,9 +2883,11 @@
     twoByteBytecode = map['_twoByteBytecode'];
 
     if (map['fields'] != null) {
-      fields = map['fields']
-          .map((f) => new BoundField(f['decl'], f['value']))
-          .toList();
+      var fields = new List<BoundField>();
+      for (var f in map['fields']) {
+        fields.add(new BoundField(f['decl'], f['value']));
+      }
+      this.fields = fields;
     } else {
       fields = null;
     }
@@ -2890,8 +2901,11 @@
       // Should be:
       // elements = map['elements'].map((e) => new Guarded<Instance>(e)).toList();
       // some times we obtain object that are not InstanceRef
-      elements =
-          map['elements'].map((e) => new Guarded<ServiceObject>(e)).toList();
+      var localElements = new List<Guarded<HeapObject>>();
+      for (var element in map['elements']) {
+        localElements.add(new Guarded<HeapObject>(element));
+      }
+      elements = localElements;
     } else {
       elements = null;
     }
@@ -3003,8 +3017,15 @@
       return;
     }
 
-    variables = (map['variables'] ?? const [])
-        .map((element) => new ContextElement(element));
+    if (map['variables'] == null) {
+      variables = <ContextElement>[];
+    } else {
+      var localVariables = new List<ContextElement>();
+      for (var element in map['variables']) {
+        localVariables.add(new ContextElement(element));
+      }
+      variables = localVariables;
+    }
 
     // We are fully loaded.
     _loaded = true;
@@ -4043,7 +4064,7 @@
     if (mapIsRef) {
       return;
     }
-    types = map['types'];
+    types = new List<Instance>.from(map['types']);
   }
 }
 
@@ -4566,7 +4587,11 @@
     this.function = map['function'];
     this.location = map['location'];
     this.code = map['code'];
-    this.variables = map['vars'] ?? [];
+    if (map['vars'] == null) {
+      this.variables = <ServiceMap>[];
+    } else {
+      this.variables = new List<ServiceMap>.from(map['vars']);
+    }
   }
 
   M.FrameKind _fromString(String frameKind) {
diff --git a/runtime/observatory/tests/service/allocations_test.dart b/runtime/observatory/tests/service/allocations_test.dart
index e36bc97..c6975dc 100644
--- a/runtime/observatory/tests/service/allocations_test.dart
+++ b/runtime/observatory/tests/service/allocations_test.dart
@@ -18,17 +18,17 @@
 }
 
 var tests = <IsolateTest>[
-  (Isolate isolate) => isolate.rootLibrary.load().then((Library lib) {
-        expect(lib.uri.endsWith('allocations_test.dart'), isTrue);
-        expect(lib.classes.length, equals(1));
-        return lib.classes.first.load().then((Class fooClass) {
-          expect(fooClass.name, equals('Foo'));
-          expect(
-              fooClass.newSpace.current.instances +
-                  fooClass.oldSpace.current.instances,
-              equals(3));
-        });
-      }),
+  (Isolate isolate) async {
+    Library lib = await isolate.rootLibrary.load();
+    expect(lib.uri.endsWith('allocations_test.dart'), isTrue);
+    expect(lib.classes.length, equals(1));
+    Class fooClass = await lib.classes.first.load();
+    expect(fooClass.name, equals('Foo'));
+    expect(
+        fooClass.newSpace.current.instances +
+            fooClass.oldSpace.current.instances,
+        equals(3));
+  },
 ];
 
 main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory/tests/service/async_scope_test.dart b/runtime/observatory/tests/service/async_scope_test.dart
index 0a2f816..faf02b4 100644
--- a/runtime/observatory/tests/service/async_scope_test.dart
+++ b/runtime/observatory/tests/service/async_scope_test.dart
@@ -3,14 +3,15 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--error_on_bad_type --error_on_bad_override
 
+import 'dart:async';
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
 import 'package:unittest/unittest.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
-const int LINE_A = 19;
-const int LINE_B = 25;
+const int LINE_A = 20;
+const int LINE_B = 26;
 
 foo() {}
 
@@ -34,7 +35,7 @@
   });
 }
 
-checkAsyncVarDescriptors(Isolate isolate) async {
+Future checkAsyncVarDescriptors(Isolate isolate) async {
   ServiceMap stack = await isolate.getStack();
   expect(stack.type, equals('Stack'));
   expect(stack['frames'].length, greaterThanOrEqualTo(1));
@@ -43,7 +44,7 @@
   expect(vars, equals('param1 local1')); // no :async_op et al
 }
 
-checkAsyncStarVarDescriptors(Isolate isolate) async {
+Future checkAsyncStarVarDescriptors(Isolate isolate) async {
   ServiceMap stack = await isolate.getStack();
   expect(stack.type, equals('Stack'));
   expect(stack['frames'].length, greaterThanOrEqualTo(1));
diff --git a/runtime/observatory/tests/service/break_on_activation_test.dart b/runtime/observatory/tests/service/break_on_activation_test.dart
index 4cc8503..904ce63 100644
--- a/runtime/observatory/tests/service/break_on_activation_test.dart
+++ b/runtime/observatory/tests/service/break_on_activation_test.dart
@@ -49,7 +49,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var rootLib = await isolate.rootLibrary.load();
+    Library rootLib = await isolate.rootLibrary.load();
 
     var breaksHit = 0;
 
@@ -93,7 +93,7 @@
     await cancelFutureSubscription(subscriptionFuture);
   },
   (Isolate isolate) async {
-    var rootLib = await isolate.rootLibrary.load();
+    Library rootLib = await isolate.rootLibrary.load();
 
     var breaksHit = 0;
 
@@ -137,7 +137,7 @@
     await cancelFutureSubscription(subscriptionFuture);
   },
   (Isolate isolate) async {
-    var rootLib = await isolate.rootLibrary.load();
+    Library rootLib = await isolate.rootLibrary.load();
 
     var breaksHit = 0;
 
diff --git a/runtime/observatory/tests/service/break_on_function_test.dart b/runtime/observatory/tests/service/break_on_function_test.dart
index 3886aef..6367906 100644
--- a/runtime/observatory/tests/service/break_on_function_test.dart
+++ b/runtime/observatory/tests/service/break_on_function_test.dart
@@ -32,7 +32,7 @@
 
 // Add breakpoint
   (Isolate isolate) async {
-    var rootLib = await isolate.rootLibrary.load();
+    Library rootLib = await isolate.rootLibrary.load();
     var function =
         rootLib.functions.singleWhere((f) => f.name == 'testFunction');
 
diff --git a/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart b/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
index 52e452c..5979085 100644
--- a/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
+++ b/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
@@ -33,7 +33,7 @@
 
 // Add breakpoints.
   (Isolate isolate) async {
-    var rootLib = await isolate.rootLibrary.load();
+    Library rootLib = await isolate.rootLibrary.load();
     var script = rootLib.scripts[0];
 
     var bpt1 = await isolate.addBreakpoint(script, LINE_A);
diff --git a/runtime/observatory/tests/service/contexts_test.dart b/runtime/observatory/tests/service/contexts_test.dart
index 680d8a4..07ebb09 100644
--- a/runtime/observatory/tests/service/contexts_test.dart
+++ b/runtime/observatory/tests/service/contexts_test.dart
@@ -50,72 +50,61 @@
 }
 
 var tests = <IsolateTest>[
-  (Isolate isolate) => isolate.rootLibrary.load().then((Library lib) {
-        Field field = lib.variables.singleWhere((v) => v.name == 'cleanBlock');
-        return field.load().then((_) {
-          return field.staticValue.load().then((Instance block) {
-            expect(block.isClosure, isTrue);
-            expect(block.closureContext, isNull);
-          });
-        });
-      }),
-  (Isolate isolate) => isolate.rootLibrary.load().then((Library lib) {
-        Field field =
-            lib.variables.singleWhere((v) => v.name == 'copyingBlock');
-        return field.load().then((_) {
-          return field.staticValue.load().then((Instance block) {
-            expect(block.isClosure, isTrue);
-            expect(block.closureContext.isContext, isTrue);
-            expect(block.closureContext.length, equals(1));
-            return block.closureContext.load().then((Context ctxt) {
-              expect(ctxt.variables.single.value.asValue.isString, isTrue);
-              expect(ctxt.variables.single.value.asValue.valueAsString,
-                  equals('I could be copied into the block'));
-              expect(ctxt.parentContext, isNull);
-            });
-          });
-        });
-      }),
-  (Isolate isolate) => isolate.rootLibrary.load().then((Library lib) {
-        Field field = lib.variables.singleWhere((v) => v.name == 'fullBlock');
-        return field.load().then((_) {
-          return field.staticValue.load().then((Instance block) {
-            expect(block.isClosure, isTrue);
-            expect(block.closureContext.isContext, isTrue);
-            expect(block.closureContext.length, equals(1));
-            return block.closureContext.load().then((Context ctxt) {
-              expect(ctxt.variables.single.value.asValue.isInt, isTrue);
-              expect(ctxt.variables.single.value.asValue.valueAsString,
-                  equals('43'));
-              expect(ctxt.parentContext, isNull);
-            });
-          });
-        });
-      }),
-  (Isolate isolate) => isolate.rootLibrary.load().then((Library lib) {
-        Field field =
-            lib.variables.singleWhere((v) => v.name == 'fullBlockWithChain');
-        return field.load().then((_) {
-          return field.staticValue.load().then((Instance block) {
-            expect(block.isClosure, isTrue);
-            expect(block.closureContext.isContext, isTrue);
-            expect(block.closureContext.length, equals(1));
-            return block.closureContext.load().then((Context ctxt) {
-              expect(ctxt.variables.single.value.asValue.isInt, isTrue);
-              expect(ctxt.variables.single.value.asValue.valueAsString,
-                  equals('4201'));
-              expect(ctxt.parentContext.isContext, isTrue);
-              expect(ctxt.parentContext.length, equals(1));
-              return ctxt.parentContext.load().then((Context outerCtxt) {
-                expect(outerCtxt.variables.single.value.asValue.isInt, isTrue);
-                expect(outerCtxt.variables.single.value.asValue.valueAsString,
-                    equals('421'));
-                expect(outerCtxt.parentContext, isNull);
-              });
-            });
-          });
-        });
-      }),
+  (Isolate isolate) async {
+    Library lib = await isolate.rootLibrary.load();
+    Field field = lib.variables.singleWhere((v) => v.name == 'cleanBlock');
+    await field.load();
+    Instance block = await field.staticValue.load();
+    expect(block.isClosure, isTrue);
+    expect(block.closureContext, isNull);
+  },
+  (Isolate isolate) async {
+    Library lib = await isolate.rootLibrary.load();
+    Field field = lib.variables.singleWhere((v) => v.name == 'copyingBlock');
+    await field.load();
+    Instance block = await field.staticValue.load();
+    expect(block.isClosure, isTrue);
+    expect(block.closureContext.isContext, isTrue);
+    expect(block.closureContext.length, equals(1));
+    Context ctxt = await block.closureContext.load();
+    expect(ctxt.variables.single.value.asValue.isString, isTrue);
+    expect(ctxt.variables.single.value.asValue.valueAsString,
+        equals('I could be copied into the block'));
+    expect(ctxt.parentContext, isNull);
+  },
+  (Isolate isolate) async {
+    Library lib = await isolate.rootLibrary.load();
+    Field field = lib.variables.singleWhere((v) => v.name == 'fullBlock');
+    await field.load();
+    Instance block = await field.staticValue.load();
+    expect(block.isClosure, isTrue);
+    expect(block.closureContext.isContext, isTrue);
+    expect(block.closureContext.length, equals(1));
+    Context ctxt = await block.closureContext.load();
+    expect(ctxt.variables.single.value.asValue.isInt, isTrue);
+    expect(ctxt.variables.single.value.asValue.valueAsString, equals('43'));
+    expect(ctxt.parentContext, isNull);
+  },
+  (Isolate isolate) async {
+    Library lib = await isolate.rootLibrary.load();
+    Field field =
+        lib.variables.singleWhere((v) => v.name == 'fullBlockWithChain');
+    await field.load();
+    Instance block = await field.staticValue.load();
+    expect(block.isClosure, isTrue);
+    expect(block.closureContext.isContext, isTrue);
+    expect(block.closureContext.length, equals(1));
+    Context ctxt = await block.closureContext.load();
+    expect(ctxt.variables.single.value.asValue.isInt, isTrue);
+    expect(ctxt.variables.single.value.asValue.valueAsString, equals('4201'));
+    expect(ctxt.parentContext.isContext, isTrue);
+    expect(ctxt.parentContext.length, equals(1));
+    Context outerCtxt = await ctxt.parentContext.load();
+    expect(outerCtxt.variables.single.value.asValue.isInt, isTrue);
+    expect(
+        outerCtxt.variables.single.value.asValue.valueAsString, equals('421'));
+    expect(outerCtxt.parentContext, isNull);
+  },
 ];
 
 main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory/tests/service/dominator_tree_user_test.dart b/runtime/observatory/tests/service/dominator_tree_user_test.dart
index b0a4f35..186b983 100644
--- a/runtime/observatory/tests/service/dominator_tree_user_test.dart
+++ b/runtime/observatory/tests/service/dominator_tree_user_test.dart
@@ -113,7 +113,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    final rootLib = await isolate.rootLibrary.load();
+    final Library rootLib = await isolate.rootLibrary.load();
     final raw =
         await isolate.fetchHeapSnapshot(M.HeapSnapshotRoots.user, false).last;
     final snapshot = new HeapSnapshot();
diff --git a/runtime/observatory/tests/service/dominator_tree_vm_test.dart b/runtime/observatory/tests/service/dominator_tree_vm_test.dart
index 1c59f2a..0ea9ad5 100644
--- a/runtime/observatory/tests/service/dominator_tree_vm_test.dart
+++ b/runtime/observatory/tests/service/dominator_tree_vm_test.dart
@@ -113,7 +113,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    final rootLib = await isolate.rootLibrary.load();
+    final Library rootLib = await isolate.rootLibrary.load();
     final raw =
         await isolate.fetchHeapSnapshot(M.HeapSnapshotRoots.vm, false).last;
     final snapshot = new HeapSnapshot();
diff --git a/runtime/observatory/tests/service/eval_test.dart b/runtime/observatory/tests/service/eval_test.dart
index 77e48b2f..7753d04 100644
--- a/runtime/observatory/tests/service/eval_test.dart
+++ b/runtime/observatory/tests/service/eval_test.dart
@@ -33,42 +33,39 @@
   hasStoppedAtBreakpoint,
 
 // Evaluate against library, class, and instance.
-  (Isolate isolate) {
-    return isolate.getStack().then((ServiceMap stack) {
-      // Make sure we are in the right place.
-      expect(stack.type, equals('Stack'));
-      expect(stack['frames'].length, greaterThanOrEqualTo(2));
-      expect(stack['frames'][0].function.name, equals('method'));
-      expect(stack['frames'][0].function.dartOwner.name, equals('MyClass'));
+  (Isolate isolate) async {
+    ServiceMap stack = await isolate.getStack();
 
-      var lib = isolate.rootLibrary;
-      var cls = stack['frames'][0].function.dartOwner;
-      var instance = stack['frames'][0].variables[0]['value'];
+    // Make sure we are in the right place.
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(2));
+    expect(stack['frames'][0].function.name, equals('method'));
+    expect(stack['frames'][0].function.dartOwner.name, equals('MyClass'));
 
-      List evals = [];
-      evals.add(lib.evaluate('globalVar + 5').then((result) {
-        print(result);
-        expect(result.valueAsString, equals('105'));
-      }));
-      evals.add(lib.evaluate('globalVar + staticVar + 5').then((result) {
-        expect(result.type, equals('Error'));
-      }));
-      evals.add(cls.evaluate('globalVar + staticVar + 5').then((result) {
-        print(result);
-        expect(result.valueAsString, equals('1105'));
-      }));
-      evals.add(cls.evaluate('this + 5').then((result) {
-        expect(result.type, equals('Error'));
-      }));
-      evals.add(instance.evaluate('this + 5').then((result) {
-        print(result);
-        expect(result.valueAsString, equals('10005'));
-      }));
-      evals.add(instance.evaluate('this + frog').then((result) {
-        expect(result.type, equals('Error'));
-      }));
-      return Future.wait(evals);
-    });
+    var lib = isolate.rootLibrary;
+    var cls = stack['frames'][0].function.dartOwner;
+    var instance = stack['frames'][0].variables[0]['value'];
+
+    dynamic result = await lib.evaluate('globalVar + 5');
+    print(result);
+    expect(result.valueAsString, equals('105'));
+
+    result = await lib.evaluate('globalVar + staticVar + 5');
+    expect(result.type, equals('Error'));
+
+    result = await cls.evaluate('globalVar + staticVar + 5');
+    print(result);
+    expect(result.valueAsString, equals('1105'));
+
+    result = await cls.evaluate('this + 5');
+    expect(result.type, equals('Error'));
+
+    result = await instance.evaluate('this + 5');
+    print(result);
+    expect(result.valueAsString, equals('10005'));
+
+    result = await instance.evaluate('this + frog');
+    expect(result.type, equals('Error'));
   },
 ];
 
diff --git a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
index 3b8c7ce..4c7e9b0 100644
--- a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
@@ -35,14 +35,14 @@
     expect(stack['frames'].length, greaterThanOrEqualTo(1));
     expect(stack['frames'][0].function.name, equals('foo'));
 
-    var lib = await isolate.rootLibrary.load();
-    var thing1 =
-        (await lib.variables.singleWhere((v) => v.name == "thing1").load())
-            .staticValue;
+    Library lib = await isolate.rootLibrary.load();
+    Field thing1Field =
+        await lib.variables.singleWhere((v) => v.name == "thing1").load();
+    var thing1 = thing1Field.staticValue;
     print(thing1);
-    var thing2 =
-        (await lib.variables.singleWhere((v) => v.name == "thing2").load())
-            .staticValue;
+    Field thing2Field =
+        await lib.variables.singleWhere((v) => v.name == "thing2").load();
+    var thing2 = thing2Field.staticValue;
     print(thing2);
 
     var result = await isolate
diff --git a/runtime/observatory/tests/service/evaluate_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
index 702cb66..c2d8aff 100644
--- a/runtime/observatory/tests/service/evaluate_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
@@ -17,14 +17,14 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.load();
-    var thing1 =
-        (await lib.variables.singleWhere((v) => v.name == "thing1").load())
-            .staticValue;
+    Library lib = await isolate.rootLibrary.load();
+    Field thing1Field =
+        await lib.variables.singleWhere((v) => v.name == "thing1").load();
+    var thing1 = thing1Field.staticValue;
     print(thing1);
-    var thing2 =
-        (await lib.variables.singleWhere((v) => v.name == "thing2").load())
-            .staticValue;
+    Field thing2Field =
+        await lib.variables.singleWhere((v) => v.name == "thing2").load();
+    var thing2 = thing2Field.staticValue;
     print(thing2);
 
     var result = await lib.evaluate("x + y", scope: {"x": thing1, "y": thing2});
diff --git a/runtime/observatory/tests/service/get_allocation_samples_test.dart b/runtime/observatory/tests/service/get_allocation_samples_test.dart
index 26da1e1..62522a4 100644
--- a/runtime/observatory/tests/service/get_allocation_samples_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_samples_test.dart
@@ -55,7 +55,7 @@
     var fooClass = await getClassFromRootLib(isolate, 'Foo');
     await fooClass.reload();
     expect(fooClass.traceAllocations, isTrue);
-    var profileResponse = await fooClass.getAllocationSamples();
+    dynamic profileResponse = await fooClass.getAllocationSamples();
     expect(profileResponse, isNotNull);
     expect(profileResponse['type'], equals('_CpuProfile'));
     await fooClass.setTraceAllocations(false);
diff --git a/runtime/observatory/tests/service/get_ports_rpc_test.dart b/runtime/observatory/tests/service/get_ports_rpc_test.dart
index 36685b8..ca8eff5 100644
--- a/runtime/observatory/tests/service/get_ports_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_ports_rpc_test.dart
@@ -39,7 +39,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var result = await isolate.invokeRpc('_getPorts', {});
+    dynamic result = await isolate.invokeRpc('_getPorts', {});
     expect(result['type'], equals('_Ports'));
     expect(result['ports'], isList);
     var ports = result['ports'];
diff --git a/runtime/observatory/tests/service/get_stack_rpc_test.dart b/runtime/observatory/tests/service/get_stack_rpc_test.dart
index 297b219..5efdb1b 100644
--- a/runtime/observatory/tests/service/get_stack_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_stack_rpc_test.dart
@@ -85,7 +85,7 @@
     expect(msgHandlerObjectId, isNotNull);
 
     // Get object.
-    var object = await isolate.getObject(msgHandlerObjectId);
+    Instance object = await isolate.getObject(msgHandlerObjectId);
     expect(object.valueAsString, equals('34'));
   }
 ];
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index 8ffb61b..58c4596 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -27,11 +27,11 @@
   Timeline.finishSync();
 }
 
-List<Map> filterForDartEvents(List<Map> events) {
+List filterForDartEvents(List events) {
   return events.where((event) => event['cat'] == 'Dart').toList();
 }
 
-bool eventsContains(List<Map> events, String phase, String name) {
+bool eventsContains(List events, String phase, String name) {
   for (Map event in events) {
     if ((event['ph'] == phase) && (event['name'] == name)) {
       return true;
@@ -40,7 +40,7 @@
   return false;
 }
 
-int timeOrigin(List<Map> events) {
+int timeOrigin(List events) {
   if (events.length == 0) {
     return 0;
   }
@@ -54,7 +54,7 @@
   return smallest;
 }
 
-int timeDuration(List<Map> events, int timeOrigin) {
+int timeDuration(List events, int timeOrigin) {
   if (events.length == 0) {
     return 0;
   }
@@ -69,7 +69,7 @@
   return biggestDuration;
 }
 
-void allEventsHaveIsolateNumber(List<Map> events) {
+void allEventsHaveIsolateNumber(List events) {
   for (Map event in events) {
     if (event['ph'] == 'M') {
       // Skip meta-data events.
@@ -99,7 +99,7 @@
     expect(result['type'], equals('_Timeline'));
     expect(result['traceEvents'], new isInstanceOf<List>());
     final int numEvents = result['traceEvents'].length;
-    List<Map> dartEvents = filterForDartEvents(result['traceEvents']);
+    List dartEvents = filterForDartEvents(result['traceEvents']);
     expect(dartEvents.length, equals(11));
     allEventsHaveIsolateNumber(dartEvents);
     allEventsHaveIsolateNumber(result['traceEvents']);
@@ -121,7 +121,7 @@
     // Verify that we received fewer events than before.
     expect(result['traceEvents'].length, lessThan(numEvents));
     // Verify that we have the same number of Dart events.
-    List<Map> dartEvents2 = filterForDartEvents(result['traceEvents']);
+    List dartEvents2 = filterForDartEvents(result['traceEvents']);
     expect(dartEvents2.length, dartEvents.length);
   },
 ];
diff --git a/runtime/observatory/tests/service/implicit_getter_setter_test.dart b/runtime/observatory/tests/service/implicit_getter_setter_test.dart
index f3b8d8c..25423e3 100644
--- a/runtime/observatory/tests/service/implicit_getter_setter_test.dart
+++ b/runtime/observatory/tests/service/implicit_getter_setter_test.dart
@@ -4,6 +4,7 @@
 
 library implicit_getter_setter_test;
 
+import 'dart:async';
 import 'package:observatory/service_io.dart';
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
@@ -18,7 +19,7 @@
   }
 }
 
-testGetter(Isolate isolate) async {
+Future testGetter(Isolate isolate) async {
   Library rootLibrary = await isolate.rootLibrary.load();
   expect(rootLibrary.classes.length, equals(1));
   Class classA = await rootLibrary.classes[0].load();
@@ -40,7 +41,7 @@
   expect(classDouble.name, equals('_Double'));
 }
 
-testSetter(Isolate isolate) async {
+Future testSetter(Isolate isolate) async {
   Library rootLibrary = await isolate.rootLibrary.load();
   expect(rootLibrary.classes.length, equals(1));
   Class classA = await rootLibrary.classes[0].load();
diff --git a/runtime/observatory/tests/service/inbound_references_test.dart b/runtime/observatory/tests/service/inbound_references_test.dart
index 2df380f..af310c0 100644
--- a/runtime/observatory/tests/service/inbound_references_test.dart
+++ b/runtime/observatory/tests/service/inbound_references_test.dart
@@ -28,8 +28,8 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.load();
-    var field = lib.variables.where((v) => v.name == 'e').single;
+    Library lib = await isolate.rootLibrary.load();
+    Field field = lib.variables.where((v) => v.name == 'e').single;
     await field.load();
     Instance e = field.staticValue;
     ServiceMap response = await isolate.getInboundReferences(e, 100);
diff --git a/runtime/observatory/tests/service/library_dependency_test.dart b/runtime/observatory/tests/service/library_dependency_test.dart
index 1998ef1..2e5d2fa 100644
--- a/runtime/observatory/tests/service/library_dependency_test.dart
+++ b/runtime/observatory/tests/service/library_dependency_test.dart
@@ -13,7 +13,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.load();
+    Library lib = await isolate.rootLibrary.load();
     // Use mirrors to shutup the analyzer.
     mirrors.currentMirrorSystem();
     importOf(String uri) {
diff --git a/runtime/observatory/tests/service/mirror_references_test.dart b/runtime/observatory/tests/service/mirror_references_test.dart
index 9b9b155..a7fc685 100644
--- a/runtime/observatory/tests/service/mirror_references_test.dart
+++ b/runtime/observatory/tests/service/mirror_references_test.dart
@@ -27,7 +27,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.load();
+    Library lib = await isolate.rootLibrary.load();
     Field fooField = lib.variables.singleWhere((v) => v.name == 'foo');
     await fooField.load();
     Instance foo = fooField.staticValue;
@@ -38,7 +38,7 @@
     expect(foo.isMirrorReference, isFalse);
     expect(ref.isMirrorReference, isTrue);
     expect(ref.referent, isNull);
-    var loadedRef = await ref.load();
+    Instance loadedRef = await ref.load();
     expect(loadedRef.referent, isNotNull);
     expect(loadedRef.referent.name, equals('Foo'));
     expect(loadedRef.referent, equals(foo.clazz));
diff --git a/runtime/observatory/tests/service/next_through_implicit_call_test.dart b/runtime/observatory/tests/service/next_through_implicit_call_test.dart
new file mode 100644
index 0000000..35762fa
--- /dev/null
+++ b/runtime/observatory/tests/service/next_through_implicit_call_test.dart
@@ -0,0 +1,60 @@
+// 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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE = 18;
+const String file = "next_through_implicit_call_test.dart";
+
+int _fooCallNumber = 0;
+foo() {
+  ++_fooCallNumber;
+  print("Foo call #$_fooCallNumber!");
+}
+
+code() {
+  foo();
+  (foo)();
+  var a = [foo];
+  a[0]();
+  (a[0])();
+  var b = [
+    [foo, foo]
+  ];
+  b[0][1]();
+  (b[0][1])();
+}
+
+List<String> stops = [];
+List<String> expected = [
+  "$file:${LINE+0}:3", // on 'foo'
+  "$file:${LINE+1}:8", // on '(' (in '()')
+  "$file:${LINE+2}:11", // on '['
+  "$file:${LINE+3}:4", // on '['
+  "$file:${LINE+3}:7", // on '('
+  "$file:${LINE+4}:5", // on '['
+  "$file:${LINE+4}:9", // on '(' (in '()')
+  "$file:${LINE+6}:5", // on '[' (inner one)
+  "$file:${LINE+5}:11", // on '[' (outer one)
+  "$file:${LINE+8}:4", // on first '['
+  "$file:${LINE+8}:7", // on second '['
+  "$file:${LINE+8}:10", // on '('
+  "$file:${LINE+9}:5", // on first '['
+  "$file:${LINE+9}:8", // on second '['
+  "$file:${LINE+9}:12", // on '(' (in '()')
+  "$file:${LINE+10}:1", // on ending '}'
+];
+
+var tests = <IsolateTest>[
+  hasPausedAtStart,
+  setBreakpointAtLine(LINE),
+  runStepThroughProgramRecordingStops(stops),
+  checkRecordedStops(stops, expected)
+];
+
+main(args) {
+  runIsolateTestsSynchronous(args, tests,
+      testeeConcurrent: code, pause_on_start: true, pause_on_exit: true);
+}
diff --git a/runtime/observatory/tests/service/object_graph_stack_reference_test.dart b/runtime/observatory/tests/service/object_graph_stack_reference_test.dart
index 44828c9..aaf24eb 100644
--- a/runtime/observatory/tests/service/object_graph_stack_reference_test.dart
+++ b/runtime/observatory/tests/service/object_graph_stack_reference_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--error_on_bad_type --error_on_bad_override
 
+import 'dart:async';
 import 'dart:developer';
 
 import 'test_helper.dart';
@@ -23,7 +24,7 @@
   print(stackSlot); // Prevent optimizing away the stack slot.
 }
 
-checkForStackReferent(Isolate isolate) async {
+Future checkForStackReferent(Isolate isolate) async {
   Library corelib =
       isolate.libraries.singleWhere((lib) => lib.uri == 'dart:core');
   await corelib.load();
diff --git a/runtime/observatory/tests/service/pause_on_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
index 34bc53b..5089a99 100644
--- a/runtime/observatory/tests/service/pause_on_exceptions_test.dart
+++ b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
@@ -26,7 +26,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.reload();
+    Library lib = await isolate.rootLibrary.reload();
 
     var onPaused = null;
     var onResume = null;
@@ -75,7 +75,7 @@
         await t.future;
       }
 
-      var res = await fres;
+      dynamic res = await fres;
       print(res);
       if (shouldBeCaught) {
         expect(res.isInstance, isTrue);
diff --git a/runtime/observatory/tests/service/process_service_test.dart b/runtime/observatory/tests/service/process_service_test.dart
index 233e4b0..8a22291 100644
--- a/runtime/observatory/tests/service/process_service_test.dart
+++ b/runtime/observatory/tests/service/process_service_test.dart
@@ -64,12 +64,12 @@
     return new Future.value(new ServiceExtensionResponse.result(result));
   }
 
-  Future<ServiceExtensionResponse> closeStdin(ignored_a, ignored_b) async {
+  Future<ServiceExtensionResponse> closeStdin(ignored_a, ignored_b) {
     process3.stdin.close();
-    var result = JSON.encode({'type': 'foobar'});
-    var returnValue =
-        new Future.value(new ServiceExtensionResponse.result(result));
-    return process3.exitCode.then((int exit) => returnValue);
+    return process3.exitCode.then<ServiceExtensionResponse>((int exit) {
+      var result = JSON.encode({'type': 'foobar'});
+      return new ServiceExtensionResponse.result(result);
+    });
   }
 
   registerExtension('ext.dart.io.cleanup', cleanup);
diff --git a/runtime/observatory/tests/service/reachable_size_test.dart b/runtime/observatory/tests/service/reachable_size_test.dart
index b53a1fb..67c3bf7 100644
--- a/runtime/observatory/tests/service/reachable_size_test.dart
+++ b/runtime/observatory/tests/service/reachable_size_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--error_on_bad_type --error_on_bad_override
 
+import 'dart:async';
 import 'package:observatory/service_io.dart';
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
@@ -27,16 +28,14 @@
   p1.y = p2.y = new List();
 }
 
-getReachableSize(ServiceObject obj) {
-  return obj.isolate.getReachableSize(obj).then((Instance obj) {
-    return int.parse(obj.valueAsString);
-  });
+Future<int> getReachableSize(ServiceObject obj) async {
+  Instance size = await obj.isolate.getReachableSize(obj);
+  return int.parse(size.valueAsString);
 }
 
-getRetainedSize(ServiceObject obj) {
-  return obj.isolate.getRetainedSize(obj).then((Instance obj) {
-    return int.parse(obj.valueAsString);
-  });
+Future<int> getRetainedSize(ServiceObject obj) async {
+  Instance size = await obj.isolate.getRetainedSize(obj);
+  return int.parse(size.valueAsString);
 }
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/rewind_optimized_out_test.dart b/runtime/observatory/tests/service/rewind_optimized_out_test.dart
index d41a09d..b2b8e74 100644
--- a/runtime/observatory/tests/service/rewind_optimized_out_test.dart
+++ b/runtime/observatory/tests/service/rewind_optimized_out_test.dart
@@ -53,7 +53,7 @@
   stoppedAtLine(LINE_A),
   (Isolate isolate) async {
     // We are at our breakpoint with global=100.
-    var result = await isolate.rootLibrary.evaluate('global');
+    Instance result = await isolate.rootLibrary.evaluate('global');
     print('global is $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('100'));
diff --git a/runtime/observatory/tests/service/rewind_test.dart b/runtime/observatory/tests/service/rewind_test.dart
index 812febd..7f0d590 100644
--- a/runtime/observatory/tests/service/rewind_test.dart
+++ b/runtime/observatory/tests/service/rewind_test.dart
@@ -79,14 +79,14 @@
   },
   (Isolate isolate) async {
     // We are at our breakpoint with global=100.
-    var result = await isolate.rootLibrary.evaluate('global');
+    Instance result = await isolate.rootLibrary.evaluate('global');
     print('global is $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('100'));
 
     // Rewind the top stack frame.
-    result = await isolate.rewind(1);
-    expect(result['type'], equals('Success'));
+    var result2 = await isolate.rewind(1);
+    expect(result2['type'], equals('Success'));
   },
   hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_B),
@@ -98,52 +98,52 @@
   stoppedAtLine(LINE_A),
   (Isolate isolate) async {
     // global still is equal to 100.  We did not execute "global++".
-    var result = await isolate.rootLibrary.evaluate('global');
+    Instance result = await isolate.rootLibrary.evaluate('global');
     print('global is $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('100'));
 
     // Resume again, for fun.
-    result = await isolate.resume();
-    expect(result['type'], equals('Success'));
+    var result2 = await isolate.resume();
+    expect(result2['type'], equals('Success'));
   },
   hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_A),
   (Isolate isolate) async {
     // global is now 101.
-    var result = await isolate.rootLibrary.evaluate('global');
+    Instance result = await isolate.rootLibrary.evaluate('global');
     print('global is $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('101'));
 
     // Rewind up to 'test'/
-    result = await isolate.rewind(3);
-    expect(result['type'], equals('Success'));
+    var result2 = await isolate.rewind(3);
+    expect(result2['type'], equals('Success'));
   },
   hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_D),
   (Isolate isolate) async {
     // Reset global to 0 and start again.
-    var result = await isolate.rootLibrary.evaluate('global=0');
+    Instance result = await isolate.rootLibrary.evaluate('global=0');
     print('set global to $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('0'));
 
-    result = await isolate.resume();
-    expect(result['type'], equals('Success'));
+    var result2 = await isolate.resume();
+    expect(result2['type'], equals('Success'));
   },
   hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_A),
   (Isolate isolate) async {
     // We are at our breakpoint with global=100.
-    var result = await isolate.rootLibrary.evaluate('global');
+    Instance result = await isolate.rootLibrary.evaluate('global');
     print('global is $result');
     expect(result.type, equals('Instance'));
     expect(result.valueAsString, equals('100'));
 
     // Rewind the top 2 stack frames.
-    result = await isolate.rewind(2);
-    expect(result['type'], equals('Success'));
+    var result2 = await isolate.rewind(2);
+    expect(result2['type'], equals('Success'));
   },
   hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_C),
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 48773d6..b7b125ce 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -23,6 +23,7 @@
 next_through_closure_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 next_through_create_list_and_map_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 next_through_for_each_loop_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
+next_through_implicit_call_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 pause_on_unhandled_async_exceptions2_test: Pass, RuntimeError, Timeout, Crash # Issue 29178
 set_name_rpc_test: RuntimeError # Issue 27806
 step_through_constructor_calls_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
@@ -66,6 +67,7 @@
 # batch mode.
 [ $arch == simdbc64 && $compiler == dartk ]
 coverage_optimized_function_test: Crash # Please triage
+get_cpu_profile_timeline_rpc_test: Pass, RuntimeError # http://dartbug.com/31794
 
 [ $arch == simdbc64 && $compiler == dartk && $mode == debug ]
 eval_test: Pass, Slow
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 6bcca69..903a5a5 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -45,165 +45,81 @@
 # Issue 31587
 [ $compiler == dartk && $strong ]
 add_breakpoint_rpc_kernel_test: CompileTimeError
-allocations_test: CompileTimeError
-async_next_test: CompileTimeError
-async_scope_test: CompileTimeError
-async_single_step_exception_test: CompileTimeError
-async_single_step_into_test: CompileTimeError
-async_single_step_out_test: CompileTimeError
-async_star_single_step_into_test: CompileTimeError
-async_star_step_out_test: CompileTimeError
-async_step_out_test: CompileTimeError
-auth_token1_test: CompileTimeError
-auth_token_test: CompileTimeError
-awaiter_async_stack_contents_test: CompileTimeError
+async_next_test: RuntimeError
+async_scope_test: RuntimeError
+async_single_step_exception_test: RuntimeError
+async_single_step_into_test: RuntimeError
+awaiter_async_stack_contents_test: RuntimeError
 bad_web_socket_address_test: CompileTimeError
-break_on_activation_test: CompileTimeError
-break_on_function_test: CompileTimeError
-breakpoint_in_parts_class_test: CompileTimeError
+break_on_function_test: RuntimeError
+breakpoint_in_parts_class_test: RuntimeError
 breakpoint_two_args_checked_test: CompileTimeError
-caching_test: CompileTimeError
-causal_async_stack_contents_test: CompileTimeError
-causal_async_stack_presence_test: CompileTimeError
-causal_async_star_stack_contents_test: CompileTimeError
-causal_async_star_stack_presence_test: CompileTimeError
-code_test: CompileTimeError
-collect_all_garbage_test: CompileTimeError
+caching_test: RuntimeError
+causal_async_stack_contents_test: RuntimeError
+causal_async_stack_presence_test: RuntimeError
+causal_async_star_stack_contents_test: RuntimeError
+causal_async_star_stack_presence_test: RuntimeError
+code_test: RuntimeError
 command_test: CompileTimeError
-contexts_test: CompileTimeError
-coverage_leaf_function_test: CompileTimeError
-coverage_optimized_function_test: CompileTimeError
-crash_dump_test: CompileTimeError
-debugger_inspect_test: CompileTimeError
-debugger_location_second_test: CompileTimeError
-debugger_location_test: CompileTimeError
-debugging_inlined_finally_test: CompileTimeError
-debugging_test: CompileTimeError
-dev_fs_http_put_test: CompileTimeError
-dev_fs_http_put_weird_char_test: CompileTimeError
-dev_fs_spawn_test: CompileTimeError
-dev_fs_test: CompileTimeError
-dev_fs_uri_test: CompileTimeError
-dev_fs_weird_char_test: CompileTimeError
-developer_server_control_test: CompileTimeError
-developer_service_get_isolate_id_test: CompileTimeError
-dominator_tree_user_test: CompileTimeError
-dominator_tree_vm_test: CompileTimeError
-echo_test: CompileTimeError
-eval_test: CompileTimeError
+debugger_location_second_test: RuntimeError
+debugger_location_test: RuntimeError
+debugging_inlined_finally_test: RuntimeError
+debugging_test: RuntimeError
+dev_fs_spawn_test: RuntimeError
+developer_service_get_isolate_id_test: RuntimeError
 external_service_asynchronous_invocation_test: CompileTimeError
 external_service_disappear_test: CompileTimeError
 external_service_notification_invocation_test: CompileTimeError
 external_service_registration_test: CompileTimeError
 external_service_registration_via_notification_test: CompileTimeError
 external_service_synchronous_invocation_test: CompileTimeError
-field_script_test: CompileTimeError
-file_service_test: CompileTimeError
-gc_test: CompileTimeError
-get_allocation_profile_rpc_test: CompileTimeError
-get_allocation_samples_test: CompileTimeError
-get_cpu_profile_timeline_rpc_test: CompileTimeError
-get_flag_list_rpc_test: CompileTimeError
-get_heap_map_rpc_test: CompileTimeError
-get_instances_rpc_test: CompileTimeError
-get_isolate_after_async_error_test: CompileTimeError
-get_isolate_after_stack_overflow_error_test: CompileTimeError
-get_isolate_after_sync_error_test: CompileTimeError
-get_isolate_rpc_test: CompileTimeError
-get_object_rpc_test: CompileTimeError
-get_object_store_rpc_test: CompileTimeError
-get_ports_rpc_test: CompileTimeError
-get_retained_size_rpc_test: CompileTimeError
-get_retaining_path_rpc_test: CompileTimeError
-get_source_report_test: CompileTimeError
-get_stack_rpc_test: CompileTimeError
-get_user_level_retaining_path_rpc_test: CompileTimeError
-get_version_rpc_test: CompileTimeError
-get_vm_rpc_test: CompileTimeError
-get_vm_timeline_rpc_test: CompileTimeError
-get_zone_memory_info_rpc_test: CompileTimeError
-implicit_getter_setter_test: CompileTimeError
-inbound_references_test: CompileTimeError
-instance_field_order_rpc_test: CompileTimeError
-isolate_lifecycle_test: CompileTimeError
+get_object_rpc_test: RuntimeError
+get_object_store_rpc_test: RuntimeError
+get_stack_rpc_test: RuntimeError
 issue_25465_test: CompileTimeError
-issue_27238_test: CompileTimeError
-issue_27287_test: CompileTimeError
-issue_30555_test: CompileTimeError
-local_variable_declaration_test: CompileTimeError
-logging_test: CompileTimeError
-malformed_test: CompileTimeError
-metrics_test: CompileTimeError
-mirror_references_test: CompileTimeError
-mixin_break_test: CompileTimeError
-native_metrics_test: CompileTimeError
-next_through_assign_call_test: CompileTimeError
-next_through_assign_int_test: CompileTimeError
-next_through_call_on_field_in_class_test: CompileTimeError
-next_through_call_on_field_test: CompileTimeError
-next_through_call_on_static_field_in_class_test: CompileTimeError
-next_through_catch_test: CompileTimeError
-next_through_closure_test: CompileTimeError
-next_through_create_list_and_map_test: CompileTimeError
-next_through_for_each_loop_test: CompileTimeError
-next_through_for_loop_with_break_and_continue_test: CompileTimeError
-next_through_function_expression_test: CompileTimeError
-next_through_is_and_as_test: CompileTimeError
-next_through_multi_catch_test: CompileTimeError
-next_through_new_test: CompileTimeError
-next_through_operator_bracket_on_super_test: CompileTimeError
-next_through_operator_bracket_on_this_test: CompileTimeError
-next_through_operator_bracket_test: CompileTimeError
-next_through_simple_async_with_returns_test: CompileTimeError
-next_through_simple_linear_2_test: CompileTimeError
-next_through_simple_linear_test: CompileTimeError
-object_graph_stack_reference_test: CompileTimeError
-object_graph_user_test: CompileTimeError
-object_graph_vm_test: CompileTimeError
-observatory_assets_test: CompileTimeError
-parameters_in_scope_at_entry_test: CompileTimeError
-pause_idle_isolate_test: CompileTimeError
-pause_on_exceptions_test: CompileTimeError
-pause_on_start_and_exit_test: CompileTimeError
-pause_on_start_then_step_test: CompileTimeError
-pause_on_unhandled_async_exceptions2_test: CompileTimeError
-pause_on_unhandled_async_exceptions_test: CompileTimeError
-pause_on_unhandled_exceptions_test: CompileTimeError
-positive_token_pos_test: CompileTimeError
-process_service_test: CompileTimeError
-reachable_size_test: CompileTimeError
-regexp_function_test: CompileTimeError
-regress_28443_test: CompileTimeError
-regress_28980_test: CompileTimeError
-reload_sources_test: CompileTimeError
-rewind_optimized_out_test: CompileTimeError
-rewind_test: CompileTimeError
-set_library_debuggable_rpc_test: CompileTimeError
-set_library_debuggable_test: CompileTimeError
-set_name_rpc_test: CompileTimeError
-set_vm_name_rpc_test: CompileTimeError
-steal_breakpoint_test: CompileTimeError
-step_into_async_no_await_test: CompileTimeError
-step_over_await_test: CompileTimeError
-step_test: CompileTimeError
-step_through_arithmetic_test: CompileTimeError
-step_through_constructor_calls_test: CompileTimeError
-step_through_function_2_test: CompileTimeError
-step_through_function_test: CompileTimeError
-step_through_getter_test: CompileTimeError
-step_through_property_get_test: CompileTimeError
-step_through_property_set_test: CompileTimeError
-step_through_setter_test: CompileTimeError
-step_through_switch_test: CompileTimeError
-step_through_switch_with_continue_test: CompileTimeError
-string_escaping_test: CompileTimeError
-tcp_socket_closing_service_test: CompileTimeError
-tcp_socket_service_test: CompileTimeError
-type_arguments_test: CompileTimeError
-typed_data_test: CompileTimeError
-udp_socket_service_test: CompileTimeError
-vm_test: CompileTimeError
-vm_timeline_events_test: CompileTimeError
-vm_timeline_flags_test: CompileTimeError
-weak_properties_test: CompileTimeError
-
+issue_27238_test: RuntimeError
+issue_27287_test: RuntimeError
+local_variable_declaration_test: RuntimeError
+mixin_break_test: RuntimeError
+next_through_assign_call_test: RuntimeError
+next_through_assign_int_test: RuntimeError
+next_through_call_on_field_in_class_test: RuntimeError
+next_through_call_on_field_test: RuntimeError
+next_through_call_on_static_field_in_class_test: RuntimeError
+next_through_catch_test: RuntimeError
+next_through_closure_test: RuntimeError
+next_through_create_list_and_map_test: RuntimeError
+next_through_for_each_loop_test: RuntimeError
+next_through_for_loop_with_break_and_continue_test: RuntimeError
+next_through_function_expression_test: RuntimeError
+next_through_implicit_call_test: RuntimeError
+next_through_is_and_as_test: RuntimeError
+next_through_multi_catch_test: RuntimeError
+next_through_new_test: RuntimeError
+next_through_operator_bracket_on_super_test: RuntimeError
+next_through_operator_bracket_on_this_test: RuntimeError
+next_through_operator_bracket_test: RuntimeError
+next_through_simple_async_with_returns_test: RuntimeError
+next_through_simple_linear_2_test: RuntimeError
+next_through_simple_linear_test: RuntimeError
+parameters_in_scope_at_entry_test: RuntimeError
+positive_token_pos_test: RuntimeError
+regress_28443_test: RuntimeError
+regress_28980_test: RuntimeError
+rewind_optimized_out_test: RuntimeError
+rewind_test: RuntimeError
+set_library_debuggable_test: RuntimeError
+steal_breakpoint_test: RuntimeError
+step_into_async_no_await_test: RuntimeError
+step_over_await_test: RuntimeError
+step_through_arithmetic_test: RuntimeError
+step_through_constructor_calls_test: RuntimeError
+step_through_constructor_test: RuntimeError
+step_through_function_2_test: RuntimeError
+step_through_function_test: RuntimeError
+step_through_getter_test: RuntimeError
+step_through_property_get_test: RuntimeError
+step_through_property_set_test: RuntimeError
+step_through_setter_test: RuntimeError
+step_through_switch_test: RuntimeError
+step_through_switch_with_continue_test: RuntimeError
diff --git a/runtime/observatory/tests/service/service_test_common.dart b/runtime/observatory/tests/service/service_test_common.dart
index 4a739e5..254ee14 100644
--- a/runtime/observatory/tests/service/service_test_common.dart
+++ b/runtime/observatory/tests/service/service_test_common.dart
@@ -269,7 +269,7 @@
     ServiceMap stack = await isolate.getStack();
     expect(stack.type, equals('Stack'));
 
-    List<Frame> frames = stack['frames'];
+    List/*<Frame>*/ frames = stack['frames'];
     expect(frames.length, greaterThanOrEqualTo(1));
 
     Frame top = frames[0];
@@ -297,7 +297,7 @@
     ServiceMap stack = await isolate.getStack();
     expect(stack.type, equals('Stack'));
 
-    List<Frame> frames = stack['frames'];
+    List/*<Frame>*/ frames = stack['frames'];
     expect(frames.length, greaterThanOrEqualTo(1));
 
     Frame topFrame = stack['frames'][0];
@@ -387,8 +387,7 @@
 
 Future<Class> getClassFromRootLib(Isolate isolate, String className) async {
   Library rootLib = await isolate.rootLibrary.load();
-  for (var i = 0; i < rootLib.classes.length; i++) {
-    Class cls = rootLib.classes[i];
+  for (Class cls in rootLib.classes) {
     if (cls.name == className) {
       return cls;
     }
@@ -445,7 +444,7 @@
         // We are paused: Resume after recording.
         ServiceMap stack = await isolate.getStack();
         expect(stack.type, equals('Stack'));
-        List<Frame> frames = stack['frames'];
+        List/*<Frame>*/ frames = stack['frames'];
         expect(frames.length, greaterThanOrEqualTo(2));
         Frame frame = frames[0];
         String brokeAt = await frame.location.toUserString();
diff --git a/runtime/observatory/tests/service/type_arguments_test.dart b/runtime/observatory/tests/service/type_arguments_test.dart
index d8ce2c9..c97d680 100644
--- a/runtime/observatory/tests/service/type_arguments_test.dart
+++ b/runtime/observatory/tests/service/type_arguments_test.dart
@@ -9,7 +9,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) =>
-      isolate.getTypeArgumentsList(false).then((ServiceMap allTypeArgs) {
+      isolate.getTypeArgumentsList(false).then((dynamic allTypeArgs) {
         var allTypeArgsTableSize =
             allTypeArgs['canonicalTypeArgumentsTableSize'];
         var allTypeArgsTableUsed =
@@ -21,22 +21,23 @@
             allTypeArgsTableSize, greaterThanOrEqualTo(allTypeArgsTableUsed));
         return isolate
             .getTypeArgumentsList(true)
-            .then((ServiceMap instantiatedTypeARgs) {
+            .then((dynamic instantiatedTypeArgs) {
           var instantiatedTypeArgsTableSize =
-              instantiatedTypeARgs['canonicalTypeArgumentsTableSize'];
+              instantiatedTypeArgs['canonicalTypeArgumentsTableSize'];
           var instantiatedTypeArgsTableUsed =
-              instantiatedTypeARgs['canonicalTypeArgumentsTableUsed'];
+              instantiatedTypeArgs['canonicalTypeArgumentsTableUsed'];
           // Check size >= used.
           expect(instantiatedTypeArgsTableSize,
               greaterThanOrEqualTo(instantiatedTypeArgsTableUsed));
           // Check that |instantiated| <= |all|
-          var instantiatedTypeArgsList = instantiatedTypeARgs['typeArguments'];
+          var instantiatedTypeArgsList = instantiatedTypeArgs['typeArguments'];
           expect(instantiatedTypeArgsList, isNotNull);
           expect(allTypeArgsList.length,
               greaterThanOrEqualTo(instantiatedTypeArgsList.length));
           // Check that we can 'get' this object again.
           var firstType = allTypeArgsList[0];
-          return isolate.getObject(firstType.id).then((TypeArguments type) {
+          return isolate.getObject(firstType.id).then((ServiceObject object) {
+            TypeArguments type = object;
             expect(firstType.name, type.name);
           });
         });
diff --git a/runtime/observatory/tests/service/typed_data_test.dart b/runtime/observatory/tests/service/typed_data_test.dart
index 2265045..7c34f32 100644
--- a/runtime/observatory/tests/service/typed_data_test.dart
+++ b/runtime/observatory/tests/service/typed_data_test.dart
@@ -79,7 +79,7 @@
 var tests = <IsolateTest>[
   (Isolate isolate) async {
     script();
-    var lib = await isolate.rootLibrary.load();
+    Library lib = await isolate.rootLibrary.load();
 
     // Pre-load all the fields so we don't use await below and get better
     // stacktraces.
diff --git a/runtime/observatory/tests/service/vm_timeline_events_test.dart b/runtime/observatory/tests/service/vm_timeline_events_test.dart
index ffe6368..d6eec71 100644
--- a/runtime/observatory/tests/service/vm_timeline_events_test.dart
+++ b/runtime/observatory/tests/service/vm_timeline_events_test.dart
@@ -17,9 +17,9 @@
   }
 }
 
-bool isDart(Map event) => event['cat'] == 'Dart';
+bool isDart(event) => event['cat'] == 'Dart';
 
-List<Map> filterEvents(List<Map> events, filter) {
+List filterEvents(List events, filter) {
   return events.where(filter).toList();
 }
 
diff --git a/runtime/observatory/tests/service/vm_timeline_flags_test.dart b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
index 0d93ac7..d32c291 100644
--- a/runtime/observatory/tests/service/vm_timeline_flags_test.dart
+++ b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
@@ -17,12 +17,12 @@
   }
 }
 
-bool isDart(Map event) => event['cat'] == 'Dart';
-bool isMetaData(Map event) => event['ph'] == 'M';
-bool isNotMetaData(Map event) => !isMetaData(event);
-bool isNotDartAndMetaData(Map event) => !isDart(event) && !isMetaData(event);
+bool isDart(event) => event['cat'] == 'Dart';
+bool isMetaData(event) => event['ph'] == 'M';
+bool isNotMetaData(event) => !isMetaData(event);
+bool isNotDartAndMetaData(event) => !isDart(event) && !isMetaData(event);
 
-List<Map> filterEvents(List<Map> events, filter) {
+List filterEvents(List events, filter) {
   return events.where(filter).toList();
 }
 
diff --git a/runtime/observatory/tests/service/weak_properties_test.dart b/runtime/observatory/tests/service/weak_properties_test.dart
index 2bd9c95..4114aeb 100644
--- a/runtime/observatory/tests/service/weak_properties_test.dart
+++ b/runtime/observatory/tests/service/weak_properties_test.dart
@@ -37,7 +37,7 @@
 
 var tests = <IsolateTest>[
   (Isolate isolate) async {
-    var lib = await isolate.rootLibrary.load();
+    Library lib = await isolate.rootLibrary.load();
     Field keyField = lib.variables.singleWhere((v) => v.name == 'key');
     await keyField.load();
     Instance key = keyField.staticValue;
diff --git a/runtime/runtime_args.gni b/runtime/runtime_args.gni
index 44c705f..23a8c5e2 100644
--- a/runtime/runtime_args.gni
+++ b/runtime/runtime_args.gni
@@ -52,4 +52,8 @@
   # core-jit snapshot breaks the ability to change various flags that affect
   # code generation.
   dart_core_snapshot_kind = "core"
+
+  # Whether the Dart binary version string should include the git hash and
+  # git commit time.
+  dart_version_git_info = true
 }
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 9b7d730..d2ec7b8 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -296,12 +296,7 @@
 cc/SourceReport_PossibleBreakpoints_Simple: Fail
 cc/StackTraceFormat: Fail
 cc/UseDartApi: Fail
-dart/data_uri_import_test/base64: CompileTimeError
-dart/data_uri_import_test/nocharset: CompileTimeError
-dart/data_uri_import_test/nomime: CompileTimeError
-dart/data_uri_import_test/percentencoded: Fail
-dart/data_uri_import_test/wrongmime: CompileTimeError
-dart/data_uri_spawn_test: RuntimeError
+dart/data_uri_import_test/utf16: MissingRuntimeError # UTF-16 data URIs work in dartk
 dart/redirection_type_shuffling_test/00: Crash
 dart/redirection_type_shuffling_test/none: Crash
 dart/spawn_shutdown_test: SkipSlow
@@ -335,24 +330,22 @@
 dart/optimized_stacktrace_line_and_column_test: CompileTimeError # Issue 31586
 dart/optimized_stacktrace_line_test: CompileTimeError # Issue 31586
 
+[ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
+dart/spawn_infinite_loop_test: RuntimeError
+
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
 dart/data_uri_spawn_test: Skip # Please triage.
 dart/snapshot_version_test: RuntimeError # Please triage.
-dart/spawn_infinite_loop_test: Crash # Please triage.
+dart/spawn_infinite_loop_test: Crash
 
 [ $compiler == dartkp && !$strong ]
 dart/truncating_ints_test: Skip # This test cannot be run in dartkp/legacy mode (gen_kernel does not pass --limit-ints-to-64-bits in legacy mode).
 
 [ $compiler == dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
-dart/data_uri_import_test/base64: CompileTimeError
-dart/data_uri_import_test/nocharset: CompileTimeError
-dart/data_uri_import_test/nomime: CompileTimeError
-dart/data_uri_import_test/percentencoded: CompileTimeError
-dart/data_uri_import_test/wrongmime: CompileTimeError
-dart/data_uri_spawn_test: RuntimeError
+dart/data_uri_import_test/utf16: MissingRuntimeError # UTF-16 data URIs work in dartk
 dart/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
 dart/spawn_shutdown_test: SkipSlow
 
diff --git a/runtime/vm/code_patcher.cc b/runtime/vm/code_patcher.cc
index 8f2d97a..784c9af 100644
--- a/runtime/vm/code_patcher.cc
+++ b/runtime/vm/code_patcher.cc
@@ -16,17 +16,15 @@
                                                      intptr_t size)
     : address_(address), size_(size) {
   if (FLAG_write_protect_code) {
-    bool status = VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
-                                         VirtualMemory::kReadWrite);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
+                           VirtualMemory::kReadWrite);
   }
 }
 
 WritableInstructionsScope::~WritableInstructionsScope() {
   if (FLAG_write_protect_code) {
-    bool status = VirtualMemory::Protect(reinterpret_cast<void*>(address_),
-                                         size_, VirtualMemory::kReadExecute);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(address_), size_,
+                           VirtualMemory::kReadExecute);
   }
 }
 
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index b07b481..e7efe16 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -28,7 +28,6 @@
 #include "vm/flags.h"
 #include "vm/hash_table.h"
 #include "vm/isolate.h"
-#include "vm/json_parser.h"
 #include "vm/json_writer.h"
 #include "vm/log.h"
 #include "vm/longjump.h"
@@ -222,13 +221,10 @@
 }
 
 RawError* Precompiler::CompileAll(
-    Dart_QualifiedFunctionName embedder_entry_points[],
-    uint8_t* jit_feedback,
-    intptr_t jit_feedback_length) {
+    Dart_QualifiedFunctionName embedder_entry_points[]) {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     Precompiler precompiler(Thread::Current());
-    precompiler.LoadFeedback(jit_feedback, jit_feedback_length);
     precompiler.DoCompileAll(embedder_entry_points);
     return Error::null();
   } else {
@@ -335,7 +331,6 @@
     : thread_(thread),
       zone_(NULL),
       isolate_(thread->isolate()),
-      jit_feedback_(NULL),
       changed_(false),
       retain_root_library_caches_(false),
       function_count_(0),
@@ -363,46 +358,6 @@
       error_(Error::Handle()),
       get_runtime_type_is_unique_(false) {}
 
-void Precompiler::LoadFeedback(uint8_t* buffer, intptr_t length) {
-  if (buffer == NULL) {
-    if (FLAG_trace_precompiler) {
-      THR_Print("Precompiler running without JIT feedback\n");
-    }
-
-    // Flags affecting compilation only:
-    // There is no counter feedback in precompilation, so ignore the counter
-    // when making inlining decisions.
-    FLAG_inlining_hotness = 0;
-    // Use smaller thresholds in precompilation as we are compiling everything
-    // with the optimizing compiler instead of only hot functions.
-    FLAG_inlining_size_threshold = 5;
-    FLAG_inline_getters_setters_smaller_than = 5;
-    FLAG_inlining_callee_size_threshold = 20;
-    FLAG_inlining_depth_threshold = 4;
-    FLAG_inlining_caller_size_threshold = 1000;
-    FLAG_inlining_constant_arguments_max_size_threshold = 100;
-    FLAG_inlining_constant_arguments_min_size_threshold = 30;
-    return;
-  }
-
-  if (FLAG_trace_precompiler) {
-    THR_Print("Loading JIT feedback\n");
-  }
-
-  JSONParser parser(reinterpret_cast<const char*>(buffer), length,
-                    Thread::Current()->zone());
-  ParsedJSONValue* root = parser.ParseValue();
-  if (root->IsError()) {
-    ParsedJSONError* error = static_cast<ParsedJSONError*>(root);
-    THR_Print("Error parsing JIT feedback: %s:%" Pd "\n", error->message(),
-              error->position());
-  } else if (!root->IsObject()) {
-    THR_Print("Error parsing JIT feedback: object expected\n");
-  } else {
-    jit_feedback_ = static_cast<ParsedJSONObject*>(root);
-  }
-}
-
 void Precompiler::DoCompileAll(
     Dart_QualifiedFunctionName embedder_entry_points[]) {
   ASSERT(I->compilation_allowed());
@@ -421,7 +376,6 @@
 
       ClassFinalizer::SortClasses();
       TypeRangeCache trc(this, T, I->class_table()->NumCids());
-      VerifyJITFeedback();
 
       // Precompile static initializers to compute result type information.
       PrecompileStaticInitializers();
@@ -2181,6 +2135,10 @@
   Array& dict = Array::Handle(Z);
   Object& entry = Object::Handle(Z);
 
+  Array& scripts = Array::Handle(Z);
+  Script& script = Script::Handle(Z);
+  KernelProgramInfo& program_info = KernelProgramInfo::Handle(Z);
+
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
 
@@ -2218,6 +2176,17 @@
           (lib.raw() == I->object_store()->root_library()))) {
       lib.DropDependenciesAndCaches();
     }
+
+    scripts = lib.LoadedScripts();
+    if (!scripts.IsNull()) {
+      for (intptr_t i = 0; i < scripts.Length(); ++i) {
+        script = Script::RawCast(scripts.At(i));
+        program_info = script.kernel_program_info();
+        if (!program_info.IsNull()) {
+          program_info.set_constants(Array::null_array());
+        }
+      }
+    }
   }
 }
 
@@ -2609,171 +2578,6 @@
   I->set_all_classes_finalized(true);
 }
 
-void Precompiler::VerifyJITFeedback() {
-  if (jit_feedback_ == NULL) return;
-
-  ParsedJSONString* js_vmversion = jit_feedback_->StringAt("vmVersion");
-  if ((js_vmversion == NULL) ||
-      strcmp(js_vmversion->value(), Version::CommitString()) != 0) {
-    THR_Print(
-        "JIT feedback contains invalid vm version "
-        "(saw %s, expected %s).\n",
-        js_vmversion->value(), Version::CommitString());
-    jit_feedback_ = NULL;
-    return;
-  }
-  ParsedJSONBoolean* js_asserts = jit_feedback_->BooleanAt("asserts");
-  if ((js_asserts == NULL) || (FLAG_enable_asserts != js_asserts->value())) {
-    THR_Print("JIT feedback contains invalid FLAG_enable_asserts\n");
-    jit_feedback_ = NULL;
-    return;
-  }
-  ParsedJSONBoolean* js_typechecks = jit_feedback_->BooleanAt("typeChecks");
-  if ((js_typechecks == NULL) ||
-      (FLAG_enable_type_checks != js_typechecks->value())) {
-    THR_Print("JIT feedback contains invalid FLAG_enable_type_checks\n");
-    jit_feedback_ = NULL;
-    return;
-  }
-
-  ParsedJSONArray* js_scripts = jit_feedback_->ArrayAt("scripts");
-  ASSERT(js_scripts != NULL);
-  Script& script = Script::Handle(Z);
-  for (intptr_t i = 0; i < js_scripts->Length(); i++) {
-    ParsedJSONObject* js_script = js_scripts->ObjectAt(i);
-    ASSERT(js_script != NULL);
-    ParsedJSONString* js_uri = js_script->StringAt("uri");
-    ASSERT(js_uri != NULL);
-    ParsedJSONNumber* js_fp = js_script->NumberAt("checksum");
-    ASSERT(js_fp != NULL);
-    script = LookupScript(js_uri->value());
-    if (script.IsNull()) {
-      THR_Print("Cannot find script %s\n", js_uri->value());
-      continue;
-    }
-    intptr_t fp = script.SourceFingerprint();
-    if (fp != js_fp->value()) {
-      THR_Print(
-          "Fingerprint has changed for %s. Continuing without JIT "
-          "feedback.\n",
-          js_uri->value());
-      jit_feedback_ = NULL;
-      return;
-    }
-  }
-
-  ParsedJSONArray* js_classes = jit_feedback_->ArrayAt("classes");
-  ASSERT(js_classes != NULL);
-  Library& lib = Library::Handle(Z);
-  Class& cls = Class::Handle(Z);
-  String& str = String::Handle(Z);
-  for (intptr_t i = 0; i < js_classes->Length(); i++) {
-    ParsedJSONObject* js_class = js_classes->ObjectAt(i);
-    ASSERT(js_class != NULL);
-    ParsedJSONString* js_uri = js_class->StringAt("uri");
-    ASSERT(js_uri != NULL);
-    ParsedJSONString* js_name = js_class->StringAt("name");
-    ASSERT(js_name != NULL);
-    ParsedJSONNumber* js_cid = js_class->NumberAt("cid");
-    ASSERT(js_cid != NULL);
-
-    str = String::New(js_uri->value());
-    lib = Library::LookupLibrary(T, str);
-    if (lib.IsNull()) {
-      THR_Print("Cannot find library %s\n", js_uri->value());
-      continue;
-    }
-    str = String::New(js_name->value());
-    if (str.Equals(Symbols::TopLevel())) {
-      cls = lib.toplevel_class();
-    } else {
-      cls = lib.LookupClassAllowPrivate(str);
-    }
-    if (cls.IsNull()) {
-      THR_Print("Missing class %s\n", js_name->value());
-      continue;
-    }
-
-    feedback_cid_map_.Insert(IntptrPair(js_cid->value(), cls.id()));
-  }
-
-  ParsedJSONArray* js_functions = jit_feedback_->ArrayAt("functions");
-  ASSERT(js_functions != NULL);
-  for (intptr_t i = 0; i < js_functions->Length(); i++) {
-    ParsedJSONObject* js_function = js_functions->ObjectAt(i);
-    ASSERT(js_function != NULL);
-    ParsedJSONString* js_name = js_function->StringAt("name");
-    ASSERT(js_name != NULL);
-    ParsedJSONNumber* js_cid = js_function->NumberAt("class");
-    ASSERT(js_cid != NULL);
-    ParsedJSONNumber* js_token = js_function->NumberAt("tokenPos");
-    ASSERT(js_token != NULL);
-    ParsedJSONNumber* js_kind = js_function->NumberAt("kind");
-    ASSERT(js_kind != NULL);
-    function_feedback_map_.Insert(FunctionFeedbackPair(
-        FunctionFeedbackKey(MapCid(js_cid->value()), js_token->value(),
-                            js_kind->value()),
-        js_function));
-  }
-
-  class ApplyUsageVisitor : public FunctionVisitor {
-   public:
-    explicit ApplyUsageVisitor(Precompiler* precompiler)
-        : precompiler_(precompiler) {}
-    void Visit(const Function& function) {
-      ParsedJSONObject* js_function = precompiler_->LookupFeedback(function);
-      if (js_function == NULL) {
-        function.set_usage_counter(0);
-      } else {
-        ParsedJSONNumber* js_usage = js_function->NumberAt("usageCounter");
-        ASSERT(js_usage != NULL);
-        function.set_usage_counter(js_usage->value());
-      }
-    }
-
-   private:
-    Precompiler* precompiler_;
-  };
-
-  ApplyUsageVisitor visitor(this);
-  ProgramVisitor::VisitFunctions(&visitor);
-}
-
-ParsedJSONObject* Precompiler::LookupFeedback(const Function& function) {
-  const Class& owner = Class::Handle(Z, function.Owner());
-
-  FunctionFeedbackKey key(owner.id(), function.token_pos().value(),
-                          function.kind());
-  FunctionFeedbackPair* pair = function_feedback_map_.Lookup(key);
-  if (pair == NULL) {
-    return NULL;
-  }
-  return pair->value_;
-}
-
-RawScript* Precompiler::LookupScript(const char* uri) {
-  String& dart_uri = String::Handle(Z, String::New(uri));
-  Library& lib = Library::Handle(Z);
-  Script& script = Script::Handle(Z);
-  for (intptr_t i = 0; i < libraries_.Length(); i++) {
-    lib ^= libraries_.At(i);
-    script = lib.LookupScript(dart_uri);
-    if (!script.IsNull()) {
-      return script.raw();
-    }
-  }
-  return Script::null();
-}
-
-intptr_t Precompiler::MapCid(intptr_t feedback_cid) {
-  if (feedback_cid < kNumPredefinedCids) {
-    return feedback_cid;
-  }
-  IntptrPair* pair = feedback_cid_map_.Lookup(feedback_cid);
-  if (pair == NULL) return kIllegalCid;
-  return pair->value_;
-}
-
 void Precompiler::PopulateWithICData(const Function& function,
                                      FlowGraph* graph) {
   Zone* zone = Thread::Current()->zone();
@@ -2825,118 +2629,6 @@
   }
 }
 
-void Precompiler::TryApplyFeedback(const Function& function, FlowGraph* graph) {
-  ParsedJSONObject* js_function = LookupFeedback(function);
-  if (js_function == NULL) {
-    if (FLAG_trace_precompiler) {
-      THR_Print("No feedback available for %s\n",
-                function.ToQualifiedCString());
-    }
-    return;
-  }
-
-  ParsedJSONArray* js_icdatas = js_function->ArrayAt("ics");
-  ASSERT(js_icdatas != NULL);
-
-  for (BlockIterator block_it = graph->reverse_postorder_iterator();
-       !block_it.Done(); block_it.Advance()) {
-    ForwardInstructionIterator it(block_it.Current());
-    for (; !it.Done(); it.Advance()) {
-      Instruction* instr = it.Current();
-      if (instr->IsInstanceCall()) {
-        InstanceCallInstr* call = instr->AsInstanceCall();
-        TryApplyFeedback(js_icdatas, *call->ic_data());
-      } else if (instr->IsStaticCall()) {
-        StaticCallInstr* call = instr->AsStaticCall();
-        TryApplyFeedback(js_icdatas, *call->ic_data());
-      }
-    }
-  }
-}
-
-void Precompiler::TryApplyFeedback(ParsedJSONArray* js_icdatas,
-                                   const ICData& ic) {
-  for (intptr_t j = 0; j < js_icdatas->Length(); j++) {
-    ParsedJSONObject* js_icdata = js_icdatas->ObjectAt(j);
-    ASSERT(js_icdata != NULL);
-
-    ParsedJSONNumber* js_deoptid = js_icdata->NumberAt("deoptId");
-    ASSERT(js_deoptid != NULL);
-    if (js_deoptid->value() != ic.deopt_id()) continue;
-
-    ParsedJSONBoolean* js_isstaticcall = js_icdata->BooleanAt("isStaticCall");
-    ASSERT(js_isstaticcall != NULL);
-    if (js_isstaticcall->value() != ic.is_static_call()) return;
-
-    ParsedJSONNumber* js_argsTested = js_icdata->NumberAt("argsTested");
-    ASSERT(js_argsTested != NULL);
-    if (js_argsTested->value() != ic.NumArgsTested()) return;
-
-    ParsedJSONString* js_selector = js_icdata->StringAt("selector");
-    ASSERT(js_selector != NULL);
-    const String& feedback_selector =
-        String::Handle(String::New(js_selector->value()));
-    const String& selector = String::Handle(ic.target_name());
-    // N.B.: EqualsIgnoringPrivateKey is not symmetric.
-    if (!String::EqualsIgnoringPrivateKey(selector, feedback_selector)) return;
-
-    ParsedJSONArray* js_entries = js_icdata->ArrayAt("entries");
-    ASSERT(js_entries != NULL);
-    if (ic.is_static_call()) {
-      // [cid [cid]] target count
-      ParsedJSONNumber* entry = js_entries->NumberAt(js_entries->Length() - 1);
-      ASSERT(entry != NULL);
-      ic.SetCountAt(0, entry->value());
-    } else {
-      // [cid [cid [cid]]] target count
-      const Array& arguments_descriptor =
-          Array::Handle(ic.arguments_descriptor());
-      const ArgumentsDescriptor args_desc(arguments_descriptor);
-
-      intptr_t num_args_checked = ic.NumArgsTested();
-      for (intptr_t k = 0; k < js_entries->Length();
-           k += num_args_checked + 1) {
-        GrowableArray<intptr_t> class_ids(num_args_checked);
-        for (intptr_t arg = 0; arg < num_args_checked; arg++) {
-          ParsedJSONNumber* entry = js_entries->NumberAt(k + arg);
-          ASSERT(entry != NULL);
-          class_ids.Add(MapCid(entry->value()));
-        }
-        ParsedJSONNumber* entry = js_entries->NumberAt(k + num_args_checked);
-        ASSERT(entry != NULL);
-        intptr_t count = entry->value();
-
-        bool has_missing_cid = false;
-        for (intptr_t arg = 0; arg < num_args_checked; arg++) {
-          if (class_ids[arg] == kIllegalCid) {
-            has_missing_cid = true;
-          }
-        }
-        if (has_missing_cid) continue;
-
-        intptr_t receiver_cid = class_ids[0];
-        const Class& receiver_cls =
-            Class::Handle(I->class_table()->At(receiver_cid));
-        if (receiver_cls.IsClass()) {
-          const Function& target =
-              Function::Handle(Resolver::ResolveDynamicForReceiverClass(
-                  receiver_cls, selector, args_desc, false));
-          // TODO(rmacnak): Create missing dispatchers.
-          if (!target.IsNull()) {
-            if (num_args_checked == 1) {
-              ic.AddReceiverCheck(receiver_cid, target, count);
-            } else {
-              ic.AddCheck(class_ids, target, count);
-            }
-          }
-        }
-      }
-    }
-
-    return;
-  }
-}
-
 void Precompiler::ResetPrecompilerState() {
   changed_ = false;
   function_count_ = 0;
@@ -3079,10 +2771,6 @@
       if (optimized()) {
         Precompiler::PopulateWithICData(parsed_function()->function(),
                                         flow_graph);
-        if (precompiler_ != NULL) {
-          precompiler_->TryApplyFeedback(parsed_function()->function(),
-                                         flow_graph);
-        }
       }
 
       const bool print_flow_graph =
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index 41897b9..7bcb47e 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -323,9 +323,7 @@
 class Precompiler : public ValueObject {
  public:
   static RawError* CompileAll(
-      Dart_QualifiedFunctionName embedder_entry_points[],
-      uint8_t* jit_feedback,
-      intptr_t jit_feedback_length);
+      Dart_QualifiedFunctionName embedder_entry_points[]);
 
   static RawError* CompileFunction(Precompiler* precompiler,
                                    Thread* thread,
@@ -350,17 +348,11 @@
     type_range_cache_ = value;
   }
 
-  bool HasFeedback() const { return jit_feedback_ != NULL; }
   static void PopulateWithICData(const Function& func, FlowGraph* graph);
-  void TryApplyFeedback(const Function& func, FlowGraph* graph);
-  void TryApplyFeedback(ParsedJSONArray* js_icdatas, const ICData& ic);
 
  private:
   explicit Precompiler(Thread* thread);
 
-  void LoadFeedback(uint8_t* jit_feedback, intptr_t jit_feedback_length);
-  ParsedJSONObject* LookupFeedback(const Function& function);
-
   void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]);
   void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]);
   void AddEntryPoints(Dart_QualifiedFunctionName entry_points[],
@@ -409,9 +401,6 @@
   void PrecompileConstructors();
 
   void FinalizeAllClasses();
-  void VerifyJITFeedback();
-  RawScript* LookupScript(const char* uri);
-  intptr_t MapCid(intptr_t feedback_cid);
 
   Thread* thread() const { return thread_; }
   Zone* zone() const { return zone_; }
@@ -421,8 +410,6 @@
   Zone* zone_;
   Isolate* isolate_;
 
-  ParsedJSONObject* jit_feedback_;
-
   bool changed_;
   bool retain_root_library_caches_;
   intptr_t function_count_;
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index ecc8c5e..77fc1e3 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -93,7 +93,6 @@
   // Helpers for non-trivial source-destination combinations that cannot
   // be handled by a single instruction.
   void MoveMemoryToMemory(const Address& dst, const Address& src);
-  void StoreObject(const Address& dst, const Object& obj);
   void Exchange(Register reg, const Address& mem);
   void Exchange(const Address& mem1, const Address& mem2);
   void Exchange(Register reg, Register base_reg, intptr_t stack_offset);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 234e125..95f3a38 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -1270,44 +1270,14 @@
     }
   } else {
     ASSERT(source.IsConstant());
-    const Object& constant = source.constant();
-    if (destination.IsRegister()) {
-      if (source.constant_instruction()->representation() == kUnboxedInt32) {
-        __ LoadImmediate(destination.reg(), Smi::Cast(constant).Value());
-      } else {
-        __ LoadObject(destination.reg(), constant);
-      }
-    } else if (destination.IsFpuRegister()) {
-      const DRegister dst = EvenDRegisterOf(destination.fpu_reg());
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0) &&
-          TargetCPUFeatures::neon_supported()) {
-        QRegister qdst = destination.fpu_reg();
-        __ veorq(qdst, qdst, qdst);
-      } else {
-        __ LoadObject(TMP, constant);
-        __ AddImmediate(TMP, TMP, Double::value_offset() - kHeapObjectTag);
-        __ vldrd(dst, Address(TMP, 0));
-      }
-    } else if (destination.IsDoubleStackSlot()) {
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0) &&
-          TargetCPUFeatures::neon_supported()) {
-        __ veorq(QTMP, QTMP, QTMP);
-      } else {
-        __ LoadObject(TMP, constant);
-        __ AddImmediate(TMP, TMP, Double::value_offset() - kHeapObjectTag);
-        __ vldrd(DTMP, Address(TMP, 0));
-      }
-      const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
+
+    if (destination.IsFpuRegister() || destination.IsDoubleStackSlot() ||
+        destination.IsStackSlot()) {
+      ScratchRegisterScope scratch(this, kNoRegister);
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination,
+                                                        scratch.reg());
     } else {
-      ASSERT(destination.IsStackSlot());
-      const intptr_t dest_offset = destination.ToStackSlotOffset();
-      if (source.constant_instruction()->representation() == kUnboxedInt32) {
-        __ LoadImmediate(TMP, Smi::Cast(constant).Value());
-      } else {
-        __ LoadObject(TMP, constant);
-      }
-      __ StoreToOffset(kWord, TMP, destination.base_reg(), dest_offset);
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination);
     }
   }
 
@@ -1417,10 +1387,6 @@
   UNREACHABLE();
 }
 
-void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  UNREACHABLE();
-}
-
 // Do not call or implement this function. Instead, use the form below that
 // uses an offset from the frame pointer instead of an Address.
 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 1bbed6c..b94296b 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -1216,46 +1216,12 @@
     }
   } else {
     ASSERT(source.IsConstant());
-    const Object& constant = source.constant();
-    if (destination.IsRegister()) {
-      if (constant.IsSmi() &&
-          (source.constant_instruction()->representation() == kUnboxedInt32)) {
-        __ LoadImmediate(destination.reg(),
-                         static_cast<int32_t>(Smi::Cast(constant).Value()));
-      } else {
-        __ LoadObject(destination.reg(), constant);
-      }
-    } else if (destination.IsFpuRegister()) {
-      const VRegister dst = destination.fpu_reg();
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
-        __ veor(dst, dst, dst);
-      } else {
-        ScratchRegisterScope tmp(this, kNoRegister);
-        __ LoadObject(tmp.reg(), constant);
-        __ LoadDFieldFromOffset(dst, tmp.reg(), Double::value_offset());
-      }
-    } else if (destination.IsDoubleStackSlot()) {
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
-        __ veor(VTMP, VTMP, VTMP);
-      } else {
-        ScratchRegisterScope tmp(this, kNoRegister);
-        __ LoadObject(tmp.reg(), constant);
-        __ LoadDFieldFromOffset(VTMP, tmp.reg(), Double::value_offset());
-      }
-      const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreDToOffset(VTMP, destination.base_reg(), dest_offset);
+    if (destination.IsStackSlot()) {
+      ScratchRegisterScope scratch(this, kNoRegister);
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination,
+                                                        scratch.reg());
     } else {
-      ASSERT(destination.IsStackSlot());
-      const intptr_t dest_offset = destination.ToStackSlotOffset();
-      ScratchRegisterScope tmp(this, kNoRegister);
-      if (constant.IsSmi() &&
-          (source.constant_instruction()->representation() == kUnboxedInt32)) {
-        __ LoadImmediate(tmp.reg(),
-                         static_cast<int32_t>(Smi::Cast(constant).Value()));
-      } else {
-        __ LoadObject(tmp.reg(), constant);
-      }
-      __ StoreToOffset(tmp.reg(), destination.base_reg(), dest_offset);
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination);
     }
   }
 
@@ -1355,10 +1321,6 @@
   UNREACHABLE();
 }
 
-void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  UNREACHABLE();
-}
-
 // Do not call or implement this function. Instead, use the form below that
 // uses an offset from the frame pointer instead of an Address.
 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
index e11a330..749da72 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
@@ -433,10 +433,6 @@
   UNREACHABLE();
 }
 
-void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  UNREACHABLE();
-}
-
 // Do not call or implement this function. Instead, use the form below that
 // uses an offset from the frame pointer instead of an Address.
 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 56c93d4..d2b918b 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -1186,56 +1186,7 @@
     }
   } else {
     ASSERT(source.IsConstant());
-    if (destination.IsRegister()) {
-      const Object& constant = source.constant();
-      if (constant.IsSmi() && (Smi::Cast(constant).Value() == 0)) {
-        __ xorl(destination.reg(), destination.reg());
-      } else if (constant.IsSmi() &&
-                 (source.constant_instruction()->representation() ==
-                  kUnboxedInt32)) {
-        __ movl(destination.reg(), Immediate(Smi::Cast(constant).Value()));
-      } else {
-        __ LoadObjectSafely(destination.reg(), constant);
-      }
-    } else if (destination.IsFpuRegister()) {
-      const Double& constant = Double::Cast(source.constant());
-      uword addr = FlowGraphBuilder::FindDoubleConstant(constant.value());
-      if (addr == 0) {
-        __ pushl(EAX);
-        __ LoadObject(EAX, constant);
-        __ movsd(destination.fpu_reg(),
-                 FieldAddress(EAX, Double::value_offset()));
-        __ popl(EAX);
-      } else if (Utils::DoublesBitEqual(constant.value(), 0.0)) {
-        __ xorps(destination.fpu_reg(), destination.fpu_reg());
-      } else {
-        __ movsd(destination.fpu_reg(), Address::Absolute(addr));
-      }
-    } else if (destination.IsDoubleStackSlot()) {
-      const Double& constant = Double::Cast(source.constant());
-      uword addr = FlowGraphBuilder::FindDoubleConstant(constant.value());
-      if (addr == 0) {
-        __ pushl(EAX);
-        __ LoadObject(EAX, constant);
-        __ movsd(XMM0, FieldAddress(EAX, Double::value_offset()));
-        __ popl(EAX);
-      } else if (Utils::DoublesBitEqual(constant.value(), 0.0)) {
-        __ xorps(XMM0, XMM0);
-      } else {
-        __ movsd(XMM0, Address::Absolute(addr));
-      }
-      __ movsd(destination.ToStackSlotAddress(), XMM0);
-    } else {
-      ASSERT(destination.IsStackSlot());
-      const Object& constant = source.constant();
-      if (constant.IsSmi() &&
-          (source.constant_instruction()->representation() == kUnboxedInt32)) {
-        __ movl(destination.ToStackSlotAddress(),
-                Immediate(Smi::Cast(constant).Value()));
-      } else {
-        StoreObject(destination.ToStackSlotAddress(), source.constant());
-      }
-    }
+    source.constant_instruction()->EmitMoveToLocation(compiler_, destination);
   }
 
   move->Eliminate();
@@ -1323,16 +1274,6 @@
   __ movl(dst, ensure_scratch.reg());
 }
 
-void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  if (Assembler::IsSafeSmi(obj) || obj.IsNull()) {
-    __ movl(dst, Immediate(reinterpret_cast<int32_t>(obj.raw())));
-  } else {
-    ScratchRegisterScope ensure_scratch(this, kNoRegister);
-    __ LoadObjectSafely(ensure_scratch.reg(), obj);
-    __ movl(dst, ensure_scratch.reg());
-  }
-}
-
 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
   ScratchRegisterScope ensure_scratch(this, reg);
   __ movl(ensure_scratch.reg(), mem);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index ffa97bd..b9de1f8 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -1176,42 +1176,12 @@
     }
   } else {
     ASSERT(source.IsConstant());
-    const Object& constant = source.constant();
-    if (destination.IsRegister()) {
-      if (constant.IsSmi() && (Smi::Cast(constant).Value() == 0)) {
-        __ xorl(destination.reg(), destination.reg());
-      } else if (constant.IsSmi() &&
-                 (source.constant_instruction()->representation() ==
-                  kUnboxedInt32)) {
-        __ movl(destination.reg(), Immediate(Smi::Cast(constant).Value()));
-      } else {
-        __ LoadObject(destination.reg(), constant);
-      }
-    } else if (destination.IsFpuRegister()) {
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
-        __ xorps(destination.fpu_reg(), destination.fpu_reg());
-      } else {
-        __ LoadObject(TMP, constant);
-        __ movsd(destination.fpu_reg(),
-                 FieldAddress(TMP, Double::value_offset()));
-      }
-    } else if (destination.IsDoubleStackSlot()) {
-      if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
-        __ xorps(XMM0, XMM0);
-      } else {
-        __ LoadObject(TMP, constant);
-        __ movsd(XMM0, FieldAddress(TMP, Double::value_offset()));
-      }
-      __ movsd(destination.ToStackSlotAddress(), XMM0);
+    if (destination.IsFpuRegister() || destination.IsDoubleStackSlot()) {
+      ScratchRegisterScope scratch(this, kNoRegister);
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination,
+                                                        scratch.reg());
     } else {
-      ASSERT(destination.IsStackSlot());
-      if (constant.IsSmi() &&
-          (source.constant_instruction()->representation() == kUnboxedInt32)) {
-        __ movl(destination.ToStackSlotAddress(),
-                Immediate(Smi::Cast(constant).Value()));
-      } else {
-        StoreObject(destination.ToStackSlotAddress(), constant);
-      }
+      source.constant_instruction()->EmitMoveToLocation(compiler_, destination);
     }
   }
 
@@ -1298,10 +1268,6 @@
   __ MoveMemoryToMemory(dst, src);
 }
 
-void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  __ StoreObject(dst, obj);
-}
-
 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
   __ Exchange(reg, mem);
 }
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 353764f..5982b24 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -424,11 +424,12 @@
            constant_function_type_args->value().IsTypeArguments());
 
     Zone* Z = Thread::Current()->zone();
-    TypeArguments& instantiator_type_args = TypeArguments::Handle(Z);
-    instantiator_type_args ^= constant_instantiator_type_args->value().raw();
+    const TypeArguments& instantiator_type_args = TypeArguments::Handle(
+        Z,
+        TypeArguments::RawCast(constant_instantiator_type_args->value().raw()));
 
-    TypeArguments& function_type_args = TypeArguments::Handle(Z);
-    function_type_args ^= constant_function_type_args->value().raw();
+    const TypeArguments& function_type_args = TypeArguments::Handle(
+        Z, TypeArguments::RawCast(constant_function_type_args->value().raw()));
 
     Error& error_bound = Error::Handle(Z);
 
@@ -2145,15 +2146,21 @@
            constant_instantiator_type_args->value().IsTypeArguments());
     ASSERT(constant_function_type_args->value().IsNull() ||
            constant_function_type_args->value().IsTypeArguments());
-    TypeArguments& instantiator_type_args = TypeArguments::Handle();
-    instantiator_type_args ^= constant_instantiator_type_args->value().raw();
-    TypeArguments& function_type_args = TypeArguments::Handle();
-    function_type_args ^= constant_function_type_args->value().raw();
-    Error& bound_error = Error::Handle();
-    AbstractType& new_dst_type =
-        AbstractType::Handle(dst_type().InstantiateFrom(
-            instantiator_type_args, function_type_args, kAllFree, &bound_error,
-            NULL, NULL, Heap::kOld));
+
+    Zone* Z = Thread::Current()->zone();
+    const TypeArguments& instantiator_type_args = TypeArguments::Handle(
+        Z,
+        TypeArguments::RawCast(constant_instantiator_type_args->value().raw()));
+
+    const TypeArguments& function_type_args = TypeArguments::Handle(
+        Z, TypeArguments::RawCast(constant_function_type_args->value().raw()));
+
+    Error& bound_error = Error::Handle(Z);
+
+    AbstractType& new_dst_type = AbstractType::Handle(
+        Z, dst_type().InstantiateFrom(instantiator_type_args,
+                                      function_type_args, kAllFree,
+                                      &bound_error, NULL, NULL, Heap::kOld));
     if (new_dst_type.IsMalformedOrMalbounded() || !bound_error.IsNull()) {
       return this;
     }
@@ -2362,6 +2369,33 @@
   return this;
 }
 
+Definition* UnboxInt64Instr::Canonicalize(FlowGraph* flow_graph) {
+  Definition* replacement = UnboxIntegerInstr::Canonicalize(flow_graph);
+  if (replacement != this) {
+    return replacement;
+  }
+
+// Currently we perform this only on 64-bit architectures and not on simdbc64
+// (on simdbc64 the [UnboxedConstantInstr] handling is only implemented for
+//  doubles and causes a bailout for everthing else)
+#if !defined(TARGET_ARCH_DBC)
+  if (kBitsPerWord == 64) {
+    ConstantInstr* c = value()->definition()->AsConstant();
+    if (c != NULL && (c->value().IsSmi() || c->value().IsMint())) {
+      UnboxedConstantInstr* uc =
+          new UnboxedConstantInstr(c->value(), kUnboxedInt64);
+      if (c->range() != NULL) {
+        uc->set_range(*c->range());
+      }
+      flow_graph->InsertBefore(this, uc, NULL, FlowGraph::kValue);
+      return uc;
+    }
+  }
+#endif  // !defined(TARGET_ARCH_DBC)
+
+  return this;
+}
+
 Definition* UnboxedIntConverterInstr::Canonicalize(FlowGraph* flow_graph) {
   if (!HasUses()) return NULL;
 
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 7e391d9..3f14be9 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -2717,6 +2717,21 @@
 
   virtual TokenPosition token_pos() const { return token_pos_; }
 
+  bool IsUnboxedSignedIntegerConstant() const {
+    return representation() == kUnboxedInt32 ||
+           representation() == kUnboxedInt64;
+  }
+
+  int64_t GetUnboxedSignedIntegerConstantValue() const {
+    ASSERT(IsUnboxedSignedIntegerConstant());
+    return value_.IsSmi() ? Smi::Cast(value_).Value()
+                          : Mint::Cast(value_).value();
+  }
+
+  void EmitMoveToLocation(FlowGraphCompiler* compiler,
+                          const Location& destination,
+                          Register tmp = kNoRegister);
+
   PRINT_OPERANDS_TO_SUPPORT
 
  private:
@@ -5351,6 +5366,8 @@
 
   virtual void InferRange(RangeAnalysis* analysis, Range* range);
 
+  virtual Definition* Canonicalize(FlowGraph* flow_graph);
+
   DECLARE_INSTRUCTION_NO_BACKEND(UnboxInt64)
 
  private:
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 4b77db1..09a1915 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -323,6 +323,49 @@
   }
 }
 
+void ConstantInstr::EmitMoveToLocation(FlowGraphCompiler* compiler,
+                                       const Location& destination,
+                                       Register tmp) {
+  if (destination.IsRegister()) {
+    if (representation() == kUnboxedInt32) {
+      __ LoadImmediate(destination.reg(), Smi::Cast(value_).Value());
+    } else {
+      ASSERT(representation() == kTagged);
+      __ LoadObject(destination.reg(), value_);
+    }
+  } else if (destination.IsFpuRegister()) {
+    const DRegister dst = EvenDRegisterOf(destination.fpu_reg());
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0) &&
+        TargetCPUFeatures::neon_supported()) {
+      QRegister qdst = destination.fpu_reg();
+      __ veorq(qdst, qdst, qdst);
+    } else {
+      ASSERT(tmp != kNoRegister);
+      __ LoadDImmediate(dst, Double::Cast(value_).value(), tmp);
+    }
+  } else if (destination.IsDoubleStackSlot()) {
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0) &&
+        TargetCPUFeatures::neon_supported()) {
+      __ veorq(QTMP, QTMP, QTMP);
+    } else {
+      ASSERT(tmp != kNoRegister);
+      __ LoadDImmediate(DTMP, Double::Cast(value_).value(), tmp);
+    }
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+    __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
+  } else {
+    ASSERT(destination.IsStackSlot());
+    ASSERT(tmp != kNoRegister);
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+    if (representation() == kUnboxedInt32) {
+      __ LoadImmediate(tmp, Smi::Cast(value_).Value());
+    } else {
+      __ LoadObject(tmp, value_);
+    }
+    __ StoreToOffset(kWord, tmp, destination.base_reg(), dest_offset);
+  }
+}
+
 LocationSummary* UnboxedConstantInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
@@ -344,25 +387,9 @@
 void UnboxedConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // The register allocator drops constant definitions that have no uses.
   if (!locs()->out(0).IsInvalid()) {
-    switch (representation_) {
-      case kUnboxedDouble:
-        if (Utils::DoublesBitEqual(Double::Cast(value()).value(), 0.0) &&
-            TargetCPUFeatures::neon_supported()) {
-          const QRegister dst = locs()->out(0).fpu_reg();
-          __ veorq(dst, dst, dst);
-        } else {
-          const DRegister dst = EvenDRegisterOf(locs()->out(0).fpu_reg());
-          const Register temp = locs()->temp(0).reg();
-          __ LoadDImmediate(dst, Double::Cast(value()).value(), temp);
-        }
-        break;
-      case kUnboxedInt32:
-        __ LoadImmediate(locs()->out(0).reg(), Smi::Cast(value()).Value());
-        break;
-      default:
-        UNREACHABLE();
-        break;
-    }
+    const Register scratch =
+        locs()->temp_count() == 0 ? kNoRegister : locs()->temp(0).reg();
+    EmitMoveToLocation(compiler, locs()->out(0), scratch);
   }
 }
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 15d8cf1..fa52fc8 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -50,7 +50,7 @@
   ASSERT(instr->RequiredInputRepresentation(
              StoreIndexedUnsafeInstr::kIndexPos) == kTagged);  // It is a Smi.
   __ add(TMP, instr->base_reg(), Operand(index, LSL, 2));
-  __ ldr(value, Address(TMP, instr->offset()));
+  __ str(value, Address(TMP, instr->offset()));
 
   ASSERT(kSmiTag == 0);
   ASSERT(kSmiTagSize == 1);
@@ -320,35 +320,74 @@
   }
 }
 
+void ConstantInstr::EmitMoveToLocation(FlowGraphCompiler* compiler,
+                                       const Location& destination,
+                                       Register tmp) {
+  if (destination.IsRegister()) {
+    if (representation() == kUnboxedInt32 ||
+        representation() == kUnboxedInt64) {
+      const int64_t value = value_.IsSmi() ? Smi::Cast(value_).Value()
+                                           : Mint::Cast(value_).value();
+      __ LoadImmediate(destination.reg(), value);
+    } else {
+      ASSERT(representation() == kTagged);
+      __ LoadObject(destination.reg(), value_);
+    }
+  } else if (destination.IsFpuRegister()) {
+    const VRegister dst = destination.fpu_reg();
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0)) {
+      __ veor(dst, dst, dst);
+    } else {
+      __ LoadDImmediate(dst, Double::Cast(value_).value());
+    }
+  } else if (destination.IsDoubleStackSlot()) {
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0)) {
+      __ veor(VTMP, VTMP, VTMP);
+    } else {
+      __ LoadDImmediate(VTMP, Double::Cast(value_).value());
+    }
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+    __ StoreDToOffset(VTMP, destination.base_reg(), dest_offset);
+  } else {
+    ASSERT(destination.IsStackSlot());
+    ASSERT(tmp != kNoRegister);
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+    if (value_.IsSmi() && representation() == kUnboxedInt32) {
+      __ LoadImmediate(tmp, static_cast<int32_t>(Smi::Cast(value_).Value()));
+    } else {
+      __ LoadObject(tmp, value_);
+    }
+    __ StoreToOffset(tmp, destination.base_reg(), dest_offset);
+  }
+}
+
 LocationSummary* UnboxedConstantInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
-  const Location out = (representation_ == kUnboxedInt32)
-                           ? Location::RequiresRegister()
-                           : Location::RequiresFpuRegister();
-  return LocationSummary::Make(zone, kNumInputs, out, LocationSummary::kNoCall);
+  const intptr_t kNumTemps = IsUnboxedSignedIntegerConstant() ? 0 : 1;
+  LocationSummary* locs = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  switch (representation()) {
+    case kUnboxedDouble:
+      locs->set_out(0, Location::RequiresFpuRegister());
+      locs->set_temp(0, Location::RequiresRegister());
+      break;
+    case kUnboxedInt32:
+    case kUnboxedInt64:
+      locs->set_out(0, Location::RequiresRegister());
+      break;
+    default:
+      UNREACHABLE();
+      break;
+  }
+  return locs;
 }
 
 void UnboxedConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   if (!locs()->out(0).IsInvalid()) {
-    switch (representation_) {
-      case kUnboxedDouble:
-        if (Utils::DoublesBitEqual(Double::Cast(value()).value(), 0.0)) {
-          const VRegister dst = locs()->out(0).fpu_reg();
-          __ veor(dst, dst, dst);
-        } else {
-          const VRegister dst = locs()->out(0).fpu_reg();
-          __ LoadDImmediate(dst, Double::Cast(value()).value());
-        }
-        break;
-      case kUnboxedInt32:
-        __ LoadImmediate(locs()->out(0).reg(),
-                         static_cast<int32_t>(Smi::Cast(value()).Value()));
-        break;
-      default:
-        UNREACHABLE();
-        break;
-    }
+    const Register scratch =
+        IsUnboxedSignedIntegerConstant() ? kNoRegister : locs()->temp(0).reg();
+    EmitMoveToLocation(compiler, locs()->out(0), scratch);
   }
 }
 
@@ -490,20 +529,34 @@
   }
 }
 
-static Condition EmitSmiComparisonOp(FlowGraphCompiler* compiler,
-                                     LocationSummary* locs,
-                                     Token::Kind kind) {
+static Condition EmitInt64ComparisonOp(FlowGraphCompiler* compiler,
+                                       LocationSummary* locs,
+                                       Token::Kind kind) {
   Location left = locs->in(0);
   Location right = locs->in(1);
   ASSERT(!left.IsConstant() || !right.IsConstant());
 
   Condition true_condition = TokenKindToSmiCondition(kind);
+  if (left.IsConstant() || right.IsConstant()) {
+    // Ensure constant is on the right.
+    ConstantInstr* right_constant = NULL;
+    if (left.IsConstant()) {
+      right_constant = left.constant_instruction();
+      Location tmp = right;
+      right = left;
+      left = tmp;
+      true_condition = FlipCondition(true_condition);
+    } else {
+      right_constant = right.constant_instruction();
+    }
 
-  if (left.IsConstant()) {
-    __ CompareObject(right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
-  } else if (right.IsConstant()) {
-    __ CompareObject(left.reg(), right.constant());
+    if (right_constant->IsUnboxedSignedIntegerConstant()) {
+      __ CompareImmediate(
+          left.reg(), right_constant->GetUnboxedSignedIntegerConstantValue());
+    } else {
+      ASSERT(right_constant->representation() == kTagged);
+      __ CompareObject(left.reg(), right.constant());
+    }
   } else {
     __ CompareRegisters(left.reg(), right.reg());
   }
@@ -522,7 +575,7 @@
     locs->set_out(0, Location::RequiresRegister());
     return locs;
   }
-  if (operation_cid() == kSmiCid) {
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
     const intptr_t kNumTemps = 0;
     LocationSummary* locs = new (zone)
         LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
@@ -578,8 +631,8 @@
 
 Condition EqualityCompareInstr::EmitComparisonCode(FlowGraphCompiler* compiler,
                                                    BranchLabels labels) {
-  if (operation_cid() == kSmiCid) {
-    return EmitSmiComparisonOp(compiler, locs(), kind());
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
+    return EmitInt64ComparisonOp(compiler, locs(), kind());
   } else {
     ASSERT(operation_cid() == kDoubleCid);
     return EmitDoubleComparisonOp(compiler, locs(), labels, kind());
@@ -679,23 +732,27 @@
     summary->set_out(0, Location::RequiresRegister());
     return summary;
   }
-  ASSERT(operation_cid() == kSmiCid);
-  LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RegisterOrConstant(left()));
-  // Only one input can be a constant operand. The case of two constant
-  // operands should be handled by constant propagation.
-  summary->set_in(1, summary->in(0).IsConstant()
-                         ? Location::RequiresRegister()
-                         : Location::RegisterOrConstant(right()));
-  summary->set_out(0, Location::RequiresRegister());
-  return summary;
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
+    LocationSummary* summary = new (zone)
+        LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+    summary->set_in(0, Location::RegisterOrConstant(left()));
+    // Only one input can be a constant operand. The case of two constant
+    // operands should be handled by constant propagation.
+    summary->set_in(1, summary->in(0).IsConstant()
+                           ? Location::RequiresRegister()
+                           : Location::RegisterOrConstant(right()));
+    summary->set_out(0, Location::RequiresRegister());
+    return summary;
+  }
+
+  UNREACHABLE();
+  return NULL;
 }
 
 Condition RelationalOpInstr::EmitComparisonCode(FlowGraphCompiler* compiler,
                                                 BranchLabels labels) {
-  if (operation_cid() == kSmiCid) {
-    return EmitSmiComparisonOp(compiler, locs(), kind());
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
+    return EmitInt64ComparisonOp(compiler, locs(), kind());
   } else {
     ASSERT(operation_cid() == kDoubleCid);
     return EmitDoubleComparisonOp(compiler, locs(), labels, kind());
@@ -2940,7 +2997,7 @@
 Condition CheckedSmiComparisonInstr::EmitComparisonCode(
     FlowGraphCompiler* compiler,
     BranchLabels labels) {
-  return EmitSmiComparisonOp(compiler, locs(), kind());
+  return EmitInt64ComparisonOp(compiler, locs(), kind());
 }
 
 #define EMIT_SMI_CHECK                                                         \
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index b839563..cb56455 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -12,6 +12,7 @@
 #include "vm/compiler/backend/locations.h"
 #include "vm/compiler/backend/locations_helpers.h"
 #include "vm/compiler/backend/range_analysis.h"
+#include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_entry.h"
 #include "vm/instructions.h"
@@ -180,6 +181,65 @@
   }
 }
 
+void ConstantInstr::EmitMoveToLocation(FlowGraphCompiler* compiler,
+                                       const Location& destination,
+                                       Register tmp) {
+  if (destination.IsRegister()) {
+    if (value_.IsSmi() && Smi::Cast(value_).Value() == 0) {
+      __ xorl(destination.reg(), destination.reg());
+    } else if (value_.IsSmi() && (representation() == kUnboxedInt32)) {
+      __ movl(destination.reg(), Immediate(Smi::Cast(value_).Value()));
+    } else {
+      ASSERT(representation() == kTagged);
+      __ LoadObjectSafely(destination.reg(), value_);
+    }
+  } else if (destination.IsFpuRegister()) {
+    const double value_as_double = Double::Cast(value_).value();
+    uword addr = FlowGraphBuilder::FindDoubleConstant(value_as_double);
+    if (addr == 0) {
+      __ pushl(EAX);
+      __ LoadObject(EAX, value_);
+      __ movsd(destination.fpu_reg(),
+               FieldAddress(EAX, Double::value_offset()));
+      __ popl(EAX);
+    } else if (Utils::DoublesBitEqual(value_as_double, 0.0)) {
+      __ xorps(destination.fpu_reg(), destination.fpu_reg());
+    } else {
+      __ movsd(destination.fpu_reg(), Address::Absolute(addr));
+    }
+  } else if (destination.IsDoubleStackSlot()) {
+    const double value_as_double = Double::Cast(value_).value();
+    uword addr = FlowGraphBuilder::FindDoubleConstant(value_as_double);
+    if (addr == 0) {
+      __ pushl(EAX);
+      __ LoadObject(EAX, value_);
+      __ movsd(XMM0, FieldAddress(EAX, Double::value_offset()));
+      __ popl(EAX);
+    } else if (Utils::DoublesBitEqual(value_as_double, 0.0)) {
+      __ xorps(XMM0, XMM0);
+    } else {
+      __ movsd(XMM0, Address::Absolute(addr));
+    }
+    __ movsd(destination.ToStackSlotAddress(), XMM0);
+  } else {
+    ASSERT(destination.IsStackSlot());
+    if (value_.IsSmi() && representation() == kUnboxedInt32) {
+      __ movl(destination.ToStackSlotAddress(),
+              Immediate(Smi::Cast(value_).Value()));
+    } else {
+      if (Assembler::IsSafeSmi(value_) || value_.IsNull()) {
+        __ movl(destination.ToStackSlotAddress(),
+                Immediate(reinterpret_cast<int32_t>(value_.raw())));
+      } else {
+        __ pushl(EAX);
+        __ LoadObjectSafely(EAX, value_);
+        __ movl(destination.ToStackSlotAddress(), EAX);
+        __ popl(EAX);
+      }
+    }
+  }
+}
+
 LocationSummary* UnboxedConstantInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
@@ -202,26 +262,7 @@
 void UnboxedConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // The register allocator drops constant definitions that have no uses.
   if (!locs()->out(0).IsInvalid()) {
-    switch (representation()) {
-      case kUnboxedDouble: {
-        XmmRegister result = locs()->out(0).fpu_reg();
-        if (constant_address() == 0) {
-          Register boxed = locs()->temp(0).reg();
-          __ LoadObjectSafely(boxed, value());
-          __ movsd(result, FieldAddress(boxed, Double::value_offset()));
-        } else if (Utils::DoublesBitEqual(Double::Cast(value()).value(), 0.0)) {
-          __ xorps(result, result);
-        } else {
-          __ movsd(result, Address::Absolute(constant_address()));
-        }
-        break;
-      }
-      case kUnboxedInt32:
-        __ movl(locs()->out(0).reg(), Immediate(Smi::Cast(value()).Value()));
-        break;
-      default:
-        UNREACHABLE();
-    }
+    EmitMoveToLocation(compiler, locs()->out(0));
   }
 }
 
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 3f4b9f4..5fcdd8e 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -282,17 +282,65 @@
   }
 }
 
+void ConstantInstr::EmitMoveToLocation(FlowGraphCompiler* compiler,
+                                       const Location& destination,
+                                       Register tmp) {
+  if (destination.IsRegister()) {
+    if (representation() == kUnboxedInt32 ||
+        representation() == kUnboxedInt64) {
+      const int64_t value = value_.IsSmi() ? Smi::Cast(value_).Value()
+                                           : Mint::Cast(value_).value();
+      if (value == 0) {
+        __ xorl(destination.reg(), destination.reg());
+      } else {
+        __ movq(destination.reg(), Immediate(value));
+      }
+    } else {
+      ASSERT(representation() == kTagged);
+      __ LoadObject(destination.reg(), value_);
+    }
+  } else if (destination.IsFpuRegister()) {
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0)) {
+      __ xorps(destination.fpu_reg(), destination.fpu_reg());
+    } else {
+      ASSERT(tmp != kNoRegister);
+      __ LoadObject(tmp, value_);
+      __ movsd(destination.fpu_reg(),
+               FieldAddress(tmp, Double::value_offset()));
+    }
+  } else if (destination.IsDoubleStackSlot()) {
+    if (Utils::DoublesBitEqual(Double::Cast(value_).value(), 0.0)) {
+      __ xorps(XMM0, XMM0);
+    } else {
+      ASSERT(tmp != kNoRegister);
+      __ LoadObject(tmp, value_);
+      __ movsd(XMM0, FieldAddress(tmp, Double::value_offset()));
+    }
+    __ movsd(destination.ToStackSlotAddress(), XMM0);
+  } else {
+    ASSERT(destination.IsStackSlot());
+    if (value_.IsSmi() && representation() == kUnboxedInt32) {
+      __ movl(destination.ToStackSlotAddress(),
+              Immediate(Smi::Cast(value_).Value()));
+    } else {
+      __ StoreObject(destination.ToStackSlotAddress(), value_);
+    }
+  }
+}
+
 LocationSummary* UnboxedConstantInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 0;
+  const intptr_t kNumTemps = IsUnboxedSignedIntegerConstant() ? 0 : 1;
   LocationSummary* locs = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
   switch (representation()) {
     case kUnboxedDouble:
       locs->set_out(0, Location::RequiresFpuRegister());
+      locs->set_temp(0, Location::RequiresRegister());
       break;
     case kUnboxedInt32:
+    case kUnboxedInt64:
       locs->set_out(0, Location::RequiresRegister());
       break;
     default:
@@ -305,24 +353,9 @@
 void UnboxedConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // The register allocator drops constant definitions that have no uses.
   if (!locs()->out(0).IsInvalid()) {
-    switch (representation()) {
-      case kUnboxedDouble: {
-        XmmRegister result = locs()->out(0).fpu_reg();
-        if (Utils::DoublesBitEqual(Double::Cast(value()).value(), 0.0)) {
-          __ xorps(result, result);
-        } else {
-          __ LoadObject(TMP, value());
-          __ movsd(result, FieldAddress(TMP, Double::value_offset()));
-        }
-        break;
-      }
-      case kUnboxedInt32:
-        __ movl(locs()->out(0).reg(),
-                Immediate(static_cast<int32_t>(Smi::Cast(value()).Value())));
-        break;
-      default:
-        UNREACHABLE();
-    }
+    const Register scratch =
+        IsUnboxedSignedIntegerConstant() ? kNoRegister : locs()->temp(0).reg();
+    EmitMoveToLocation(compiler, locs()->out(0), scratch);
   }
 }
 
@@ -421,15 +454,6 @@
 LocationSummary* EqualityCompareInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 2;
-  if (operation_cid() == kMintCid) {
-    const intptr_t kNumTemps = 0;
-    LocationSummary* locs = new (zone)
-        LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    locs->set_in(0, Location::RequiresRegister());
-    locs->set_in(1, Location::RequiresRegister());
-    locs->set_out(0, Location::RequiresRegister());
-    return locs;
-  }
   if (operation_cid() == kDoubleCid) {
     const intptr_t kNumTemps = 0;
     LocationSummary* locs = new (zone)
@@ -439,7 +463,7 @@
     locs->set_out(0, Location::RequiresRegister());
     return locs;
   }
-  if (operation_cid() == kSmiCid) {
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
     const intptr_t kNumTemps = 0;
     LocationSummary* locs = new (zone)
         LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
@@ -529,12 +553,26 @@
   ASSERT(!left.IsConstant() || !right.IsConstant());
 
   Condition true_condition = TokenKindToIntCondition(kind);
+  if (left.IsConstant() || right.IsConstant()) {
+    // Ensure constant is on the right.
+    ConstantInstr* constant = NULL;
+    if (left.IsConstant()) {
+      constant = left.constant_instruction();
+      Location tmp = right;
+      right = left;
+      left = tmp;
+      true_condition = FlipCondition(true_condition);
+    } else {
+      constant = right.constant_instruction();
+    }
 
-  if (left.IsConstant()) {
-    __ CompareObject(right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
-  } else if (right.IsConstant()) {
-    __ CompareObject(left.reg(), right.constant());
+    if (constant->IsUnboxedSignedIntegerConstant()) {
+      __ cmpq(left.reg(),
+              Immediate(constant->GetUnboxedSignedIntegerConstantValue()));
+    } else {
+      ASSERT(constant->representation() == kTagged);
+      __ CompareObject(left.reg(), right.constant());
+    }
   } else if (right.IsStackSlot()) {
     __ cmpq(left.reg(), right.ToStackSlotAddress());
   } else {
@@ -708,30 +746,26 @@
     summary->set_in(1, Location::RequiresFpuRegister());
     summary->set_out(0, Location::RequiresRegister());
     return summary;
-  } else if (operation_cid() == kMintCid) {
+  }
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
     LocationSummary* summary = new (zone)
         LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    summary->set_in(0, Location::RequiresRegister());
-    summary->set_in(1, Location::RequiresRegister());
+    summary->set_in(0, Location::RegisterOrConstant(left()));
+    // Only one input can be a constant operand. The case of two constant
+    // operands should be handled by constant propagation.
+    summary->set_in(1, summary->in(0).IsConstant()
+                           ? Location::RequiresRegister()
+                           : Location::RegisterOrConstant(right()));
     summary->set_out(0, Location::RequiresRegister());
     return summary;
   }
-  ASSERT(operation_cid() == kSmiCid);
-  LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RegisterOrConstant(left()));
-  // Only one input can be a constant operand. The case of two constant
-  // operands should be handled by constant propagation.
-  summary->set_in(1, summary->in(0).IsConstant()
-                         ? Location::RequiresRegister()
-                         : Location::RegisterOrConstant(right()));
-  summary->set_out(0, Location::RequiresRegister());
-  return summary;
+  UNREACHABLE();
+  return NULL;
 }
 
 Condition RelationalOpInstr::EmitComparisonCode(FlowGraphCompiler* compiler,
                                                 BranchLabels labels) {
-  if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) {
+  if (operation_cid() == kSmiCid || operation_cid() == kMintCid) {
     return EmitInt64ComparisonOp(compiler, *locs(), kind());
   } else {
     ASSERT(operation_cid() == kDoubleCid);
@@ -5125,24 +5159,30 @@
   LocationSummary* summary = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
-  summary->set_in(1, Location::RequiresRegister());
+  summary->set_in(1, Location::RegisterOrConstant(right()));
   summary->set_out(0, Location::SameAsFirstInput());
   return summary;
 }
 
 void BinaryInt64OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Register left = locs()->in(0).reg();
-  const Register right = locs()->in(1).reg();
-  const Register out = locs()->out(0).reg();
-
-  ASSERT(out == left);
-
   Label* deopt = NULL;
   if (CanDeoptimize()) {
     deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryInt64Op);
   }
+  const Location left = locs()->in(0);
+  const Location right = locs()->in(1);
+  const Location out = locs()->out(0);
+  ASSERT(out.reg() == left.reg());
 
-  EmitInt64Arithmetic(compiler, op_kind(), left, right, deopt);
+  if (right.IsConstant()) {
+    ConstantInstr* constant_instr = right.constant_instruction();
+    const int64_t value =
+        constant_instr->GetUnboxedSignedIntegerConstantValue();
+    EmitInt64Arithmetic(compiler, op_kind(), left.reg(), Immediate(value),
+                        deopt);
+  } else {
+    EmitInt64Arithmetic(compiler, op_kind(), left.reg(), right.reg(), deopt);
+  }
 }
 
 LocationSummary* UnaryInt64OpInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 0e4cb55..5b2837a 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -832,15 +832,6 @@
       return false;
     }
 
-    if ((inliner_->precompiler_ != NULL) &&
-        inliner_->precompiler_->HasFeedback() &&
-        (function.usage_counter() <= 0) && !inliner_->AlwaysInline(function)) {
-      TRACE_INLINING(THR_Print("     Bailout: not compiled yet\n"));
-      PRINT_INLINING_TREE("Not compiled", &call_data->caller, &function,
-                          call_data->call);
-      return false;
-    }
-
     // Type feedback may have been cleared for this function (ClearICDataArray),
     // but we need it for inlining.
     if (!FLAG_precompiled_mode && (function.ic_data_array() == Array::null())) {
@@ -980,10 +971,6 @@
         if (FLAG_precompiled_mode) {
           Precompiler::PopulateWithICData(parsed_function->function(),
                                           callee_graph);
-          if (inliner_->precompiler_ != NULL) {
-            inliner_->precompiler_->TryApplyFeedback(
-                parsed_function->function(), callee_graph);
-          }
         }
 #endif
 
@@ -2216,10 +2203,6 @@
   }
 
   intptr_t inlining_depth_threshold = FLAG_inlining_depth_threshold;
-  if ((precompiler_ != NULL) && precompiler_->HasFeedback() &&
-      (top.usage_counter() <= 0)) {
-    inlining_depth_threshold = 1;
-  }
 
   CallSiteInliner inliner(this, inlining_depth_threshold);
   inliner.InlineCalls();
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index d83c8365..13adddf 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -226,6 +226,11 @@
       }
       if (++next_read_ == field) return;
     }
+    case kForwardingStubSuperTarget:
+      if (builder_->ReadTag() == kSomething) {
+        forwarding_stub_super_target_ = builder_->ReadCanonicalNameReference();
+      }
+      if (++next_read_ == field) return;
     case kFunction:
       if (builder_->ReadTag() == kSomething)
         builder_->SkipFunctionNode();  // read function node.
@@ -3437,7 +3442,7 @@
   }
 }
 
-void StreamingFlowGraphBuilder::ReadUntilFunctionNode() {
+void StreamingFlowGraphBuilder::ReadUntilFunctionNode(ParsedFunction* set_forwarding_stub) {
   const Tag tag = PeekTag();
   if (tag == kProcedure) {
     ProcedureHelper procedure_helper(this);
@@ -3446,7 +3451,12 @@
       // Running a procedure without a function node doesn't make sense.
       UNREACHABLE();
     }
-    return;
+    if (set_forwarding_stub != NULL && flow_graph_builder_ && procedure_helper.IsForwardingStub() &&
+        !procedure_helper.IsAbstract()) {
+      ASSERT(procedure_helper.forwarding_stub_super_target_ != -1);
+      set_forwarding_stub->MarkForwardingStub(
+          procedure_helper.forwarding_stub_super_target_);
+    }
     // Now at start of FunctionNode.
   } else if (tag == kConstructor) {
     ConstructorHelper constructor_helper(this);
@@ -3460,7 +3470,6 @@
     H.ReportError("Unsupported tag at this point: %d.", tag);
     UNREACHABLE();
   }
-  return;
 }
 
 StringIndex StreamingFlowGraphBuilder::GetNameFromVariableDeclaration(
@@ -4095,13 +4104,35 @@
     AlternativeReadingScope _(reader_);
     SetOffset(type_parameters_offset);
 
+    const Function* forwarding_target = NULL;
+    if (parsed_function()->is_forwarding_stub()) {
+      NameIndex target_name = parsed_function()->forwarding_stub_super_target();
+      const String& name = dart_function.IsSetterFunction()
+                               ? H.DartSetterName(target_name)
+                               : H.DartProcedureName(target_name);
+      forwarding_target =
+          &Function::ZoneHandle(Z, LookupMethodByMember(target_name, name));
+      ASSERT(!forwarding_target->IsNull());
+    }
+
     // Type parameters
     intptr_t list_length = ReadListLength();
+    TypeArguments& forwarding_params = TypeArguments::Handle(Z);
+    if (forwarding_target != NULL) {
+        forwarding_params = forwarding_target->type_parameters();
+        ASSERT(forwarding_params.Length() == list_length);
+    }
+    TypeParameter& forwarding_param = TypeParameter::Handle(Z);
     for (intptr_t i = 0; i < list_length; ++i) {
       ReadFlags();                                         // skip flags
       SkipListOfExpressions();                             // skip annotations
       String& name = H.DartSymbol(ReadStringReference());  // read name
-      const AbstractType& bound = T.BuildType();           // read bound
+      AbstractType& bound = T.BuildType();                 // read bound
+
+      if (forwarding_target != NULL) {
+        forwarding_param ^= forwarding_params.TypeAt(i);
+        bound = forwarding_param.bound();
+      }
 
       if (I->strong() && !bound.IsObjectType() &&
           (I->reify_generic_functions() || dart_function.IsFactory())) {
@@ -4126,10 +4157,20 @@
 
     // Positional.
     list_length = ReadListLength();
+    const intptr_t positional_length = list_length;
+    const intptr_t kFirstParameterOffset = 1;
     for (intptr_t i = 0; i < list_length; ++i) {
       // ith variable offset.
-      body += LoadLocal(LookupVariable(ReaderOffset() + data_program_offset_));
-      body += CheckArgumentType(ReaderOffset() + data_program_offset_);
+      const intptr_t offset = ReaderOffset();
+      LocalVariable* param = LookupVariable(offset + data_program_offset_);
+      const AbstractType* target_type = &param->type();
+      if (forwarding_target != NULL) {
+        // We add 1 to the parameter index to account for the receiver.
+        target_type = &AbstractType::ZoneHandle(Z,
+            forwarding_target->ParameterTypeAt(kFirstParameterOffset + i));
+      }
+      body += LoadLocal(param);
+      body += CheckArgumentType(param, *target_type);
       body += Drop();
       SkipVariableDeclaration();  // read ith variable.
     }
@@ -4138,8 +4179,16 @@
     list_length = ReadListLength();
     for (intptr_t i = 0; i < list_length; ++i) {
       // ith variable offset.
-      body += LoadLocal(LookupVariable(ReaderOffset() + data_program_offset_));
-      body += CheckArgumentType(ReaderOffset() + data_program_offset_);
+      LocalVariable* param =
+          LookupVariable(ReaderOffset() + data_program_offset_);
+      body += LoadLocal(param);
+      const AbstractType* target_type = &param->type();
+      if (forwarding_target != NULL) {
+        // We add 1 to the parameter index to account for the receiver.
+        target_type = &AbstractType::ZoneHandle(Z,
+            forwarding_target->ParameterTypeAt(positional_length + i + 1));
+      }
+      body += CheckArgumentType(param, *target_type);
       body += Drop();
       SkipVariableDeclaration();  // read ith variable.
     }
@@ -4343,14 +4392,14 @@
     case RawFunction::kRegularFunction:
     case RawFunction::kGetterFunction:
     case RawFunction::kSetterFunction: {
-      ReadUntilFunctionNode();  // read until function node.
+      ReadUntilFunctionNode(parsed_function());  // read until function node.
       if (function.IsImplicitClosureFunction()) {
         return BuildGraphOfImplicitClosureFunction(function);
       }
       return BuildGraphOfFunction(false);
     }
     case RawFunction::kConstructor: {
-      ReadUntilFunctionNode();  // read until function node.
+      ReadUntilFunctionNode(parsed_function());  // read until function node.
       return BuildGraphOfFunction(!function.IsFactory());
     }
     case RawFunction::kImplicitGetter:
@@ -5752,10 +5801,9 @@
 }
 
 Fragment StreamingFlowGraphBuilder::CheckArgumentType(
-    intptr_t variable_kernel_position) {
-  LocalVariable* variable = LookupVariable(variable_kernel_position);
-  return flow_graph_builder_->CheckAssignable(variable->type(),
-                                              variable->name());
+    LocalVariable* variable,
+    const AbstractType& type) {
+  return flow_graph_builder_->CheckAssignable(type, variable->name());
 }
 
 Fragment StreamingFlowGraphBuilder::CheckTypeArgumentBound(
@@ -9432,14 +9480,16 @@
         temp_instance_ = Instance::New(temp_class_, Heap::kOld);
 
         const intptr_t number_of_type_arguments = builder_.ReadUInt();
-        if (number_of_type_arguments > 0) {
+        if (temp_class_.NumTypeArguments() > 0) {
           temp_type_arguments_ =
               TypeArguments::New(number_of_type_arguments, Heap::kOld);
           for (intptr_t j = 0; j < number_of_type_arguments; ++j) {
             temp_type_arguments_.SetTypeAt(j, type_translator_.BuildType());
           }
-          InstantiateTypeArguments(list_class, &temp_type_arguments_);
+          InstantiateTypeArguments(temp_class_, &temp_type_arguments_);
           temp_instance_.SetTypeArguments(temp_type_arguments_);
+        } else {
+          ASSERT(number_of_type_arguments == 0);
         }
 
         const intptr_t number_of_fields = builder_.ReadUInt();
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index c3da1c1..96d73be 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -245,6 +245,7 @@
     kName,
     kSourceUriIndex,
     kAnnotations,
+    kForwardingStubSuperTarget,
     kFunction,
     kEnd,
   };
@@ -262,6 +263,7 @@
     kAbstract = 1 << 1,
     kExternal = 1 << 2,
     kConst = 1 << 3,  // Only for external const factories.
+    kForwardingStub = 1 << 4,
   };
 
   explicit ProcedureHelper(StreamingFlowGraphBuilder* builder) {
@@ -282,6 +284,7 @@
   bool IsAbstract() { return (flags_ & kAbstract) != 0; }
   bool IsExternal() { return (flags_ & kExternal) != 0; }
   bool IsConst() { return (flags_ & kConst) != 0; }
+  bool IsForwardingStub() { return (flags_ & kForwardingStub) != 0; }
 
   NameIndex canonical_name_;
   TokenPosition position_;
@@ -291,6 +294,9 @@
   intptr_t source_uri_index_;
   intptr_t annotation_count_;
 
+  // Only valid if the 'isForwardingStub' flag is set.
+  NameIndex forwarding_stub_super_target_;
+
  private:
   StreamingFlowGraphBuilder* builder_;
   intptr_t next_read_;
@@ -927,7 +933,11 @@
   String& GetSourceFor(intptr_t index);
   RawTypedData* GetLineStartsFor(intptr_t index);
   void SetOffset(intptr_t offset);
-  void ReadUntilFunctionNode();
+
+  // If a 'ParsedFunction' is provided for 'set_forwarding_stub', this method
+  // will attach the forwarding stub target reference to the parsed function if
+  // it crosses a procedure node for a concrete forwarding stub.
+  void ReadUntilFunctionNode(ParsedFunction* set_forwarding_stub = NULL);
   intptr_t ReadListLength();
 
   enum DispatchCategory { Interface, ViaThis, Closure, DynamicDispatch };
@@ -954,6 +964,7 @@
   Fragment BuildInitializers(const Class& parent_class);
   FlowGraph* BuildGraphOfImplicitClosureFunction(const Function& function);
   FlowGraph* BuildGraphOfFunction(bool constructor);
+  FlowGraph* BuildGraphOfForwardingStub(const Function& function);
 
   intptr_t GetOffsetForSourceInfo(intptr_t index);
 
@@ -1142,7 +1153,7 @@
   Fragment CheckBooleanInCheckedMode();
   Fragment CheckAssignableInCheckedMode(const AbstractType& dst_type,
                                         const String& dst_name);
-  Fragment CheckArgumentType(intptr_t variable_kernel_position);
+  Fragment CheckArgumentType(LocalVariable* variable, const AbstractType& type);
   Fragment CheckTypeArgumentBound(const AbstractType& parameter,
                                   const AbstractType& bound,
                                   const String& dst_name);
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index df541f8..acc162c 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6339,162 +6339,6 @@
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
-DART_EXPORT
-Dart_Handle Dart_SaveJITFeedback(uint8_t** buffer, intptr_t* buffer_length) {
-#if defined(DART_PRECOMPILED_RUNTIME)
-  return Api::NewError("No JIT feedback to save on an AOT runtime.");
-#elif defined(PRODUCT)
-  // TOOD(rmacnak): We'd need to include the JSON printing code again.
-  return Api::NewError("Dart_SaveJITFeedback not supported in PRODUCT mode.");
-#else
-  Thread* thread = Thread::Current();
-  DARTSCOPE(thread);
-  Isolate* isolate = thread->isolate();
-  Zone* zone = thread->zone();
-
-  if (buffer == NULL) {
-    RETURN_NULL_ERROR(buffer);
-  }
-  if (buffer_length == NULL) {
-    RETURN_NULL_ERROR(buffer_length);
-  }
-
-  JSONStream js_stream;
-  {
-    JSONObject js_profile(&js_stream);
-    js_profile.AddProperty("vmVersion", Version::CommitString());
-    js_profile.AddProperty("asserts", FLAG_enable_asserts);
-    js_profile.AddProperty("typeChecks", FLAG_enable_type_checks);
-
-    {
-      JSONArray js_scripts(&js_profile, "scripts");
-
-      const GrowableObjectArray& libraries = GrowableObjectArray::Handle(
-          zone, isolate->object_store()->libraries());
-      Library& library = Library::Handle(zone);
-      Array& scripts = Array::Handle(zone);
-      Script& script = Script::Handle(zone);
-      String& uri = String::Handle(zone);
-      for (intptr_t i = 0; i < libraries.Length(); i++) {
-        library ^= libraries.At(i);
-        scripts = library.LoadedScripts();
-        for (intptr_t j = 0; j < scripts.Length(); j++) {
-          script ^= scripts.At(j);
-          JSONObject js_script(&js_scripts);
-          uri = script.url();
-          js_script.AddProperty("uri", uri.ToCString());
-          int64_t fp = script.SourceFingerprint();
-          js_script.AddProperty64("checksum", fp);
-        }
-      }
-    }
-
-    {
-      JSONArray js_classes(&js_profile, "classes");
-
-      ClassTable* classes = isolate->class_table();
-      Class& cls = Class::Handle(zone);
-      Library& library = Library::Handle(zone);
-      String& uri = String::Handle(zone);
-      String& name = String::Handle(zone);
-      for (intptr_t cid = kNumPredefinedCids; cid < classes->NumCids(); cid++) {
-        if (!classes->HasValidClassAt(cid)) continue;
-        cls ^= classes->At(cid);
-        library = cls.library();
-        JSONObject js_class(&js_classes);
-        js_class.AddProperty("cid", cid);
-        uri = library.url();
-        js_class.AddProperty("uri", uri.ToCString());
-        name = cls.Name();
-        name = String::RemovePrivateKey(name);
-        js_class.AddProperty("name", name.ToCString());
-      }
-    }
-
-    {
-      JSONArray js_functions(&js_profile, "functions");
-
-      class JITFeedbackFunctionVisitor : public FunctionVisitor {
-       public:
-        JITFeedbackFunctionVisitor(JSONArray* js_functions, Zone* zone)
-            : js_functions_(js_functions),
-              function_(Function::Handle(zone)),
-              owner_(Class::Handle(zone)),
-              name_(String::Handle(zone)),
-              ic_datas_(Array::Handle(zone)),
-              ic_data_(ICData::Handle(zone)),
-              entry_(Object::Handle(zone)) {}
-
-        void Visit(const Function& function) {
-          if (function.usage_counter() == 0) return;
-
-          JSONObject js_function(js_functions_);
-          name_ = function.name();
-          name_ = String::RemovePrivateKey(name_);
-          js_function.AddProperty("name", name_.ToCString());
-          owner_ ^= function.Owner();
-          js_function.AddProperty("class", owner_.id());
-          js_function.AddProperty("tokenPos", function.token_pos().value());
-          js_function.AddProperty("kind",
-                                  static_cast<intptr_t>(function.kind()));
-          intptr_t usage = function.usage_counter();
-          if (usage < 0) {
-            // Function was in the background compiler's queue.
-            usage = FLAG_optimization_counter_threshold;
-          }
-          js_function.AddProperty("usageCounter", usage);
-
-          ic_datas_ = function.ic_data_array();
-          JSONArray js_icdatas(&js_function, "ics");
-          if (ic_datas_.IsNull()) return;
-
-          for (intptr_t j = 0; j < ic_datas_.Length(); j++) {
-            entry_ = ic_datas_.At(j);
-            if (!entry_.IsICData()) continue;  // Skip edge counters.
-            ic_data_ ^= entry_.raw();
-
-            JSONObject js_icdata(&js_icdatas);
-            js_icdata.AddProperty("deoptId", ic_data_.deopt_id());
-            name_ = ic_data_.target_name();
-            name_ = String::RemovePrivateKey(name_);
-            js_icdata.AddProperty("selector", name_.ToCString());
-            js_icdata.AddProperty("isStaticCall", ic_data_.is_static_call());
-            intptr_t num_args_checked = ic_data_.NumArgsTested();
-            js_icdata.AddProperty("argsTested", num_args_checked);
-            JSONArray js_entries(&js_icdata, "entries");
-            const intptr_t number_of_checks = ic_data_.NumberOfChecks();
-            for (intptr_t check = 0; check < number_of_checks; check++) {
-              GrowableArray<intptr_t> class_ids(num_args_checked);
-              ic_data_.GetClassIdsAt(check, &class_ids);
-              for (intptr_t k = 0; k < num_args_checked; k++) {
-                ASSERT(class_ids[k] != kIllegalCid);
-                js_entries.AddValue(class_ids[k]);
-              }
-              js_entries.AddValue(ic_data_.GetCountAt(check));
-            }
-          }
-        }
-
-       private:
-        JSONArray* js_functions_;
-        Function& function_;
-        Class& owner_;
-        String& name_;
-        Array& ic_datas_;
-        ICData& ic_data_;
-        Object& entry_;
-      };
-
-      JITFeedbackFunctionVisitor visitor(&js_functions, zone);
-      ProgramVisitor::VisitFunctions(&visitor);
-    }
-  }
-
-  js_stream.Steal(reinterpret_cast<char**>(buffer), buffer_length);
-  return Api::Success();
-#endif
-}
-
 DART_EXPORT Dart_Handle Dart_SortClasses() {
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
@@ -6512,9 +6356,7 @@
 }
 
 DART_EXPORT Dart_Handle
-Dart_Precompile(Dart_QualifiedFunctionName entry_points[],
-                uint8_t* jit_feedback,
-                intptr_t jit_feedback_length) {
+Dart_Precompile(Dart_QualifiedFunctionName entry_points[]) {
 #if defined(TARGET_ARCH_IA32)
   return Api::NewError("AOT compilation is not supported on IA32.");
 #elif defined(TARGET_ARCH_DBC)
@@ -6533,8 +6375,7 @@
     return result;
   }
   CHECK_CALLBACK_STATE(T);
-  const Error& error = Error::Handle(
-      Precompiler::CompileAll(entry_points, jit_feedback, jit_feedback_length));
+  const Error& error = Error::Handle(Precompiler::CompileAll(entry_points));
   if (!error.IsNull()) {
     return Api::NewHandle(T, error.raw());
   }
diff --git a/runtime/vm/freelist.cc b/runtime/vm/freelist.cc
index 6143580..6e5dded 100644
--- a/runtime/vm/freelist.cc
+++ b/runtime/vm/freelist.cc
@@ -77,9 +77,8 @@
   if ((index != kNumLists) && free_map_.Test(index)) {
     FreeListElement* element = DequeueElement(index);
     if (is_protected) {
-      bool status = VirtualMemory::Protect(reinterpret_cast<void*>(element),
-                                           size, VirtualMemory::kReadWrite);
-      ASSERT(status);
+      VirtualMemory::Protect(reinterpret_cast<void*>(element), size,
+                             VirtualMemory::kReadWrite);
     }
     return reinterpret_cast<uword>(element);
   }
@@ -99,10 +98,8 @@
         intptr_t remainder_size = element->Size() - size;
         intptr_t region_size =
             size + FreeListElement::HeaderSizeFor(remainder_size);
-        bool status =
-            VirtualMemory::Protect(reinterpret_cast<void*>(element),
-                                   region_size, VirtualMemory::kReadWrite);
-        ASSERT(status);
+        VirtualMemory::Protect(reinterpret_cast<void*>(element), region_size,
+                               VirtualMemory::kReadWrite);
       }
       SplitElementAfterAndEnqueue(element, size, is_protected);
       return reinterpret_cast<uword>(element);
@@ -132,10 +129,8 @@
         // Make the allocated block and the header of the remainder element
         // writable.  The remainder will be non-writable if necessary after
         // the call to SplitElementAfterAndEnqueue.
-        bool status =
-            VirtualMemory::Protect(reinterpret_cast<void*>(current),
-                                   region_size, VirtualMemory::kReadWrite);
-        ASSERT(status);
+        VirtualMemory::Protect(reinterpret_cast<void*>(current), region_size,
+                               VirtualMemory::kReadWrite);
       }
 
       if (previous == NULL) {
@@ -155,17 +150,13 @@
               !VirtualMemory::InSamePage(target_address, writable_end);
         }
         if (target_is_protected) {
-          bool status =
-              VirtualMemory::Protect(reinterpret_cast<void*>(target_address),
-                                     kWordSize, VirtualMemory::kReadWrite);
-          ASSERT(status);
+          VirtualMemory::Protect(reinterpret_cast<void*>(target_address),
+                                 kWordSize, VirtualMemory::kReadWrite);
         }
         previous->set_next(current->next());
         if (target_is_protected) {
-          bool status =
-              VirtualMemory::Protect(reinterpret_cast<void*>(target_address),
-                                     kWordSize, VirtualMemory::kReadExecute);
-          ASSERT(status);
+          VirtualMemory::Protect(reinterpret_cast<void*>(target_address),
+                                 kWordSize, VirtualMemory::kReadExecute);
         }
       }
       SplitElementAfterAndEnqueue(current, size, is_protected);
@@ -366,10 +357,8 @@
   // remainder element will be protected when the allocated one is).
   if (is_protected &&
       !VirtualMemory::InSamePage(remainder_address - 1, remainder_address)) {
-    bool status =
-        VirtualMemory::Protect(reinterpret_cast<void*>(remainder_address),
-                               remainder_size, VirtualMemory::kReadExecute);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(remainder_address),
+                           remainder_size, VirtualMemory::kReadExecute);
   }
 }
 
diff --git a/runtime/vm/freelist_test.cc b/runtime/vm/freelist_test.cc
index 689b7df..63137f1 100644
--- a/runtime/vm/freelist_test.cc
+++ b/runtime/vm/freelist_test.cc
@@ -11,9 +11,8 @@
 static uword Allocate(FreeList* free_list, intptr_t size, bool is_protected) {
   uword result = free_list->TryAllocate(size, is_protected);
   if (result && is_protected) {
-    bool status = VirtualMemory::Protect(reinterpret_cast<void*>(result), size,
-                                         VirtualMemory::kReadExecute);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(result), size,
+                           VirtualMemory::kReadExecute);
   }
   return result;
 }
@@ -23,15 +22,13 @@
                  intptr_t size,
                  bool is_protected) {
   if (is_protected) {
-    bool status = VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
-                                         VirtualMemory::kReadWrite);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
+                           VirtualMemory::kReadWrite);
   }
   free_list->Free(address, size);
   if (is_protected) {
-    bool status = VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
-                                         VirtualMemory::kReadExecute);
-    ASSERT(status);
+    VirtualMemory::Protect(reinterpret_cast<void*>(address), size,
+                           VirtualMemory::kReadExecute);
   }
 }
 
diff --git a/runtime/vm/json_parser.h b/runtime/vm/json_parser.h
deleted file mode 100644
index 6b254d6..0000000
--- a/runtime/vm/json_parser.h
+++ /dev/null
@@ -1,331 +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.
-
-#ifndef RUNTIME_VM_JSON_PARSER_H_
-#define RUNTIME_VM_JSON_PARSER_H_
-
-#include "vm/allocation.h"
-#include "vm/growable_array.h"
-#include "vm/zone.h"
-
-namespace dart {
-
-class ParsedJSONArray;
-
-class ParsedJSONValue : public ZoneAllocated {
- public:
-  virtual ~ParsedJSONValue() {}
-
-  virtual bool IsObject() const { return false; }
-  virtual bool IsArray() const { return false; }
-  virtual bool IsString() const { return false; }
-  virtual bool IsNumber() const { return false; }
-  virtual bool IsBoolean() const { return false; }
-  virtual bool IsError() const { return false; }
-};
-
-class ParsedJSONString : public ParsedJSONValue {
- public:
-  explicit ParsedJSONString(const char* value) : value_(value) {}
-  bool Equals(const char* other) { return strcmp(value_, other) == 0; }
-  const char* value() { return value_; }
-  virtual bool IsString() const { return true; }
-
- private:
-  const char* value_;
-};
-
-class ParsedJSONNumber : public ParsedJSONValue {
- public:
-  explicit ParsedJSONNumber(int64_t value) : value_(value) {}
-
-  int64_t value() { return value_; }
-  virtual bool IsNumber() const { return true; }
-
- private:
-  int64_t value_;
-};
-
-class ParsedJSONBoolean : public ParsedJSONValue {
- public:
-  explicit ParsedJSONBoolean(bool value) : value_(value) {}
-
-  bool value() { return value_; }
-  virtual bool IsBoolean() const { return true; }
-
- private:
-  bool value_;
-};
-
-class ParsedJSONNull : public ParsedJSONValue {
- public:
-  virtual bool IsNull() const { return true; }
-};
-
-class ParsedJSONObject : public ParsedJSONValue {
- public:
-  ParsedJSONObject(intptr_t length, ParsedJSONValue** keys_and_values)
-      : length_(length), keys_and_values_(keys_and_values) {}
-
-  ParsedJSONValue* At(const char* key) const {
-    for (intptr_t i = 0; i < length_; i += 2) {
-      ASSERT(keys_and_values_[i]->IsString());
-      ParsedJSONString* jskey =
-          static_cast<ParsedJSONString*>(keys_and_values_[i]);
-      if (jskey->Equals(key)) {
-        return keys_and_values_[i + 1];
-      }
-    }
-    return NULL;
-  }
-
-  virtual bool IsObject() const { return true; }
-
-  ParsedJSONNumber* NumberAt(const char* key) {
-    ParsedJSONValue* member = At(key);
-    if ((member == NULL) || !member->IsNumber()) {
-      return NULL;
-    }
-    return static_cast<ParsedJSONNumber*>(member);
-  }
-
-  ParsedJSONString* StringAt(const char* key) {
-    ParsedJSONValue* member = At(key);
-    if ((member == NULL) || !member->IsString()) {
-      return NULL;
-    }
-    return static_cast<ParsedJSONString*>(member);
-  }
-
-  ParsedJSONBoolean* BooleanAt(const char* key) {
-    ParsedJSONValue* member = At(key);
-    if ((member == NULL) || !member->IsBoolean()) {
-      return NULL;
-    }
-    return static_cast<ParsedJSONBoolean*>(member);
-  }
-
-  inline ParsedJSONArray* ArrayAt(const char* key);
-
- private:
-  intptr_t length_;
-  ParsedJSONValue** keys_and_values_;
-};
-
-class ParsedJSONArray : public ParsedJSONValue {
- public:
-  ParsedJSONArray(intptr_t length, ParsedJSONValue** elements)
-      : length_(length), elements_(elements) {}
-
-  ParsedJSONValue* At(intptr_t index) const {
-    ASSERT(index < length_);
-    return elements_[index];
-  }
-
-  intptr_t Length() const { return length_; }
-
-  virtual bool IsArray() const { return true; }
-
-  ParsedJSONObject* ObjectAt(intptr_t index) {
-    ParsedJSONValue* element = At(index);
-    if ((element == NULL) || !element->IsObject()) {
-      return NULL;
-    }
-    return static_cast<ParsedJSONObject*>(element);
-  }
-
-  ParsedJSONNumber* NumberAt(intptr_t index) {
-    ParsedJSONValue* element = At(index);
-    if ((element == NULL) || !element->IsNumber()) {
-      return NULL;
-    }
-    return static_cast<ParsedJSONNumber*>(element);
-  }
-
- private:
-  intptr_t length_;
-  ParsedJSONValue** elements_;
-};
-
-class ParsedJSONError : public ParsedJSONValue {
- public:
-  explicit ParsedJSONError(const char* message, intptr_t position)
-      : message_(message), position_(position) {}
-
-  virtual bool IsError() const { return true; }
-
-  const char* message() const { return message_; }
-  intptr_t position() const { return position_; }
-
- private:
-  const char* message_;
-  intptr_t position_;
-};
-
-class JSONParser {
- public:
-  JSONParser(const char* buffer, intptr_t length, Zone* zone)
-      : buffer_(buffer), position_(0), length_(length), zone_(zone) {}
-
-  ParsedJSONValue* ParseValue() {
-    ConsumeWhitespace();
-    if (Peek() == '\"') return ParseString();
-    if (IsDigitOrMinus(Peek())) return ParseNumber();
-    if (Peek() == '{') return ParseObject();
-    if (Peek() == '[') return ParseArray();
-    if (PeekAndConsume("true")) return new (zone_) ParsedJSONBoolean(true);
-    if (PeekAndConsume("false")) return new (zone_) ParsedJSONBoolean(false);
-    if (PeekAndConsume("null")) return new (zone_) ParsedJSONNull();
-    return Error("value expected");
-  }
-
- private:
-  intptr_t Available() const { return length_ - position_; }
-  char Peek() const {
-    if (position_ < length_) return buffer_[position_];
-    return 0;
-  }
-  char Consume() {
-    ASSERT(position_ < length_);
-    return buffer_[position_++];
-  }
-  bool PeekAndConsume(const char* expected) {
-    intptr_t n = strlen(expected);
-    if (Available() < n) return false;
-    if (strncmp(&buffer_[position_], expected, n) != 0) return false;
-    position_ += n;
-    return true;
-  }
-  void ConsumeWhitespace() {
-    while ((Available() > 0) && (buffer_[position_] < ' '))
-      position_++;
-  }
-  bool IsDigit(char c) { return c >= '0' && c <= '9'; }
-  bool IsDigitOrMinus(char c) { return (c == '-') || (c >= '0' && c <= '9'); }
-
-  ParsedJSONValue* ParseString() {
-    ConsumeWhitespace();
-    if (Peek() != '\"') return Error("string expected");
-    Consume();
-    intptr_t start = position_;
-    for (;;) {
-      if (Available() == 0) return Error("unterminated string");
-      if (Consume() == '\"') break;
-    }
-    intptr_t end = position_ - 1;
-
-    char* cstr = zone_->Alloc<char>(end - start + 1);
-    intptr_t dst_pos = 0;
-    for (intptr_t src_pos = start; src_pos < end; src_pos++) {
-      if (buffer_[src_pos] == '\\') {
-        src_pos++;
-      }
-      cstr[dst_pos++] = buffer_[src_pos];
-    }
-    cstr[dst_pos] = '\0';
-
-    return new (zone_) ParsedJSONString(cstr);
-  }
-
-  ParsedJSONValue* ParseNumber() {
-    ConsumeWhitespace();
-    bool negate = false;
-    if (Peek() == '-') {
-      Consume();
-      negate = true;
-    }
-    if (!IsDigit(Peek())) return Error("number expected");
-    int64_t value = 0;
-    for (;;) {
-      if (!IsDigit(Peek())) break;
-      char c = Consume();
-      value *= 10;
-      value += (c - '0');
-    }
-    if (negate) {
-      value = -value;
-    }
-    return new (zone_) ParsedJSONNumber(value);
-  }
-
-  ParsedJSONValue* ParseObject() {
-    ConsumeWhitespace();
-    if (Peek() != '{') return Error("object expected");
-    Consume();
-    ConsumeWhitespace();
-    if (Peek() == '}') return new (zone_) ParsedJSONObject(0, NULL);
-    ZoneGrowableArray<ParsedJSONValue*>* keys_and_values =
-        new (zone_) ZoneGrowableArray<ParsedJSONValue*>(zone_, 6);
-    for (;;) {
-      ParsedJSONValue* key = ParseString();
-      if (key->IsError()) return key;
-      ConsumeWhitespace();
-      if (Consume() != ':') return Error(": expected");
-      ConsumeWhitespace();
-      ParsedJSONValue* value = ParseValue();
-      if (value->IsError()) return value;
-      ConsumeWhitespace();
-
-      keys_and_values->Add(key);
-      keys_and_values->Add(value);
-
-      char c = Consume();
-      if (c == '}') break;
-      if (c != ',') return Error(", expected (object)");
-      ConsumeWhitespace();
-    }
-
-    return new (zone_)
-        ParsedJSONObject(keys_and_values->length(), keys_and_values->data());
-  }
-
-  ParsedJSONValue* ParseArray() {
-    ConsumeWhitespace();
-    if (Peek() != '[') return Error("array expected");
-    Consume();
-    ConsumeWhitespace();
-    if (Peek() == ']') {
-      Consume();
-      return new (zone_) ParsedJSONArray(0, NULL);
-    }
-    ZoneGrowableArray<ParsedJSONValue*>* elements =
-        new (zone_) ZoneGrowableArray<ParsedJSONValue*>(zone_, 6);
-    for (;;) {
-      ParsedJSONValue* element = ParseValue();
-      if (element->IsError()) return element;
-      ConsumeWhitespace();
-
-      elements->Add(element);
-
-      char c = Consume();
-      if (c == ']') break;
-      if (c != ',') return Error(", expected (array)");
-      ConsumeWhitespace();
-    }
-
-    return new (zone_) ParsedJSONArray(elements->length(), elements->data());
-  }
-
- private:
-  ParsedJSONError* Error(const char* message) {
-    return new (zone_) ParsedJSONError(message, position_);
-  }
-
-  const char* const buffer_;
-  intptr_t position_;
-  intptr_t length_;
-  Zone* zone_;
-};
-
-ParsedJSONArray* ParsedJSONObject::ArrayAt(const char* key) {
-  ParsedJSONValue* member = At(key);
-  if ((member == NULL) || !member->IsArray()) {
-    return NULL;
-  }
-  return static_cast<ParsedJSONArray*>(member);
-}
-
-}  // namespace dart
-
-#endif  // RUNTIME_VM_JSON_PARSER_H_
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 1452e5c..30fe483 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -5,7 +5,6 @@
 #ifndef RUNTIME_VM_KERNEL_H_
 #define RUNTIME_VM_KERNEL_H_
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
 #include "platform/assert.h"
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -14,6 +13,22 @@
 #include "vm/token_position.h"
 
 namespace dart {
+namespace kernel {
+class NameIndex {
+ public:
+  NameIndex() : value_(-1) {}
+  explicit NameIndex(int value) : value_(value) {}
+
+  operator int() const { return value_; }
+
+ private:
+  int value_;
+};
+} // kernel
+} // dart
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+namespace dart {
 
 class Field;
 class ParsedFunction;
@@ -34,17 +49,6 @@
   int value_;
 };
 
-class NameIndex {
- public:
-  NameIndex() : value_(-1) {}
-  explicit NameIndex(int value) : value_(value) {}
-
-  operator int() const { return value_; }
-
- private:
-  int value_;
-};
-
 const uint8_t kNativeYieldFlags = 0x2;
 
 enum LogicalOperator { kAnd, kOr };
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 99454e3..c8344d0 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -9350,6 +9350,9 @@
 RawString* Script::Source() const {
   String& source = String::Handle(raw_ptr()->source_);
   if (source.IsNull()) {
+    if (kind() == RawScript::kKernelTag) {
+      return String::null();
+    }
     return GenerateSource();
   }
   return raw_ptr()->source_;
@@ -14530,10 +14533,8 @@
 
     if (FLAG_write_protect_code) {
       uword address = RawObject::ToAddr(instrs.raw());
-      bool status = VirtualMemory::Protect(reinterpret_cast<void*>(address),
-                                           instrs.raw()->Size(),
-                                           VirtualMemory::kReadExecute);
-      ASSERT(status);
+      VirtualMemory::Protect(reinterpret_cast<void*>(address),
+                             instrs.raw()->Size(), VirtualMemory::kReadExecute);
     }
   }
   code.set_comments(assembler->GetCodeComments());
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 5b9fdea..235b297 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -128,7 +128,7 @@
     return reinterpret_cast<const object&>(obj);                               \
   }                                                                            \
   static Raw##object* RawCast(RawObject* raw) {                                \
-    ASSERT(Object::Handle(raw).Is##object());                                  \
+    ASSERT(Object::Handle(raw).IsNull() || Object::Handle(raw).Is##object());  \
     return reinterpret_cast<Raw##object*>(raw);                                \
   }                                                                            \
   static Raw##object* null() {                                                 \
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 55e90f3..4fce257 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -156,8 +156,7 @@
   } else {
     prot = VirtualMemory::kReadWrite;
   }
-  bool status = memory_->Protect(prot);
-  ASSERT(status);
+  memory_->Protect(prot);
 }
 
 // The initial estimate of how many words we can mark per microsecond (usage
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index ad9283e..12d0557 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -190,6 +190,15 @@
 
   void record_await() { have_seen_await_expr_ = true; }
   bool have_seen_await() const { return have_seen_await_expr_; }
+  bool is_forwarding_stub() const {
+    return forwarding_stub_super_target_ != -1;
+  }
+  kernel::NameIndex forwarding_stub_super_target() const {
+    return forwarding_stub_super_target_;
+  }
+  void MarkForwardingStub(kernel::NameIndex target) {
+    forwarding_stub_super_target_ = target;
+  }
 
   Thread* thread() const { return thread_; }
   Isolate* isolate() const { return thread_->isolate(); }
@@ -235,6 +244,7 @@
   int num_stack_locals_;
   bool have_seen_await_expr_;
 
+  kernel::NameIndex forwarding_stub_super_target_;
   kernel::ScopeBuildingResult* kernel_scopes_;
 
   friend class Parser;
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 723c071..f918b24 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -321,9 +321,8 @@
 
 void SemiSpace::WriteProtect(bool read_only) {
   if (reserved_ != NULL) {
-    bool success = reserved_->Protect(read_only ? VirtualMemory::kReadOnly
-                                                : VirtualMemory::kReadWrite);
-    ASSERT(success);
+    reserved_->Protect(read_only ? VirtualMemory::kReadOnly
+                                 : VirtualMemory::kReadWrite);
   }
 }
 
diff --git a/runtime/vm/virtual_memory.h b/runtime/vm/virtual_memory.h
index 6e23292..62dbcbb 100644
--- a/runtime/vm/virtual_memory.h
+++ b/runtime/vm/virtual_memory.h
@@ -34,8 +34,8 @@
   bool Contains(uword addr) const { return region_.Contains(addr); }
 
   // Changes the protection of the virtual memory area.
-  static bool Protect(void* address, intptr_t size, Protection mode);
-  bool Protect(Protection mode) { return Protect(address(), size(), mode); }
+  static void Protect(void* address, intptr_t size, Protection mode);
+  void Protect(Protection mode) { return Protect(address(), size(), mode); }
 
   // Reserves and commits a virtual memory segment with size. If a segment of
   // the requested size cannot be allocated, NULL is returned.
diff --git a/runtime/vm/virtual_memory_android.cc b/runtime/vm/virtual_memory_android.cc
index 06989ea..5f0b0de 100644
--- a/runtime/vm/virtual_memory_android.cc
+++ b/runtime/vm/virtual_memory_android.cc
@@ -7,13 +7,15 @@
 
 #include "vm/virtual_memory.h"
 
-#include <sys/mman.h>  // NOLINT
-#include <unistd.h>    // NOLINT
+#include <errno.h>
+#include <sys/mman.h>
+#include <unistd.h>
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 
 #include "vm/isolate.h"
+#include "vm/profiler.h"
 
 namespace dart {
 
@@ -34,7 +36,12 @@
   }
 
   if (munmap(address, size) != 0) {
-    FATAL("munmap failed\n");
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("munmap error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
   }
 }
 
@@ -96,7 +103,7 @@
   return true;
 }
 
-bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
@@ -120,8 +127,15 @@
       prot = PROT_READ | PROT_WRITE | PROT_EXEC;
       break;
   }
-  return (mprotect(reinterpret_cast<void*>(page_address),
-                   end_address - page_address, prot) == 0);
+  if (mprotect(reinterpret_cast<void*>(page_address),
+               end_address - page_address, prot) != 0) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("mprotect error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
+  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/virtual_memory_fuchsia.cc b/runtime/vm/virtual_memory_fuchsia.cc
index bd7a486..fbcccb5 100644
--- a/runtime/vm/virtual_memory_fuchsia.cc
+++ b/runtime/vm/virtual_memory_fuchsia.cc
@@ -63,10 +63,11 @@
   status = zx_vmar_map(zx_vmar_root_self(), 0, vmo, 0, size, flags, &address);
   zx_handle_close(vmo);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_map(%ld, %ld, %u) failed: %s\n", offset, size, flags,
+    LOG_ERR("zx_vmar_map(%ld, %u) failed: %s\n", size, flags,
             zx_status_get_string(status));
     return NULL;
   }
+  LOG_INFO("zx_vmar_map(%ld, %u) success\n", size, flags);
 
   MemoryRegion region(reinterpret_cast<void*>(address), size);
   return new VirtualMemory(region, region);
@@ -99,7 +100,7 @@
   status = zx_vmar_map(vmar, 0u, vmo, 0u, allocated_size, flags, &base);
   zx_handle_close(vmo);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_map(%ld, %ld, %u) failed: %s\n", offset, size, flags,
+    LOG_ERR("zx_vmar_map(%ld, %u) failed: %s\n", size, flags,
             zx_status_get_string(status));
     return NULL;
   }
@@ -129,12 +130,16 @@
 }
 
 VirtualMemory::~VirtualMemory() {
-  if (vm_owns_region()) {
+  // Reserved region may be empty due to VirtualMemory::Truncate.
+  if (vm_owns_region() && reserved_.size() != 0) {
     zx_status_t status =
         zx_vmar_unmap(zx_vmar_root_self(), reserved_.start(), reserved_.size());
     if (status != ZX_OK) {
-      FATAL1("zx_vmar_unmap failed: %s\n", zx_status_get_string(status));
+      FATAL3("zx_vmar_unmap(%lx, %lx) failed: %s\n", reserved_.start(),
+             reserved_.size(), zx_status_get_string(status));
     }
+    LOG_INFO("zx_vmar_unmap(%lx, %lx) success\n", reserved_.start(),
+             reserved_.size());
   }
 }
 
@@ -142,13 +147,15 @@
   zx_status_t status = zx_vmar_unmap(
       zx_vmar_root_self(), reinterpret_cast<uintptr_t>(address), size);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_unmap failed: %s\n", zx_status_get_string(status));
+    LOG_ERR("zx_vmar_unmap(%p, %lx) failed: %s\n", address, size,
+            zx_status_get_string(status));
     return false;
   }
+  LOG_INFO("zx_vmar_unmap(%p, %lx) success\n", address, size);
   return true;
 }
 
-bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   const uword start_address = reinterpret_cast<uword>(address);
@@ -176,13 +183,11 @@
   zx_status_t status = zx_vmar_protect(zx_vmar_root_self(), page_address,
                                        end_address - page_address, prot);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_protect(%lx, %lx, %x) success: %s\n", page_address,
-            end_address - page_address, prot, zx_status_get_string(status));
-    return false;
+    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(%lx, %lx, %x) success\n", page_address,
            end_address - page_address, prot);
-  return true;
 }
 
 }  // namespace dart
diff --git a/runtime/vm/virtual_memory_linux.cc b/runtime/vm/virtual_memory_linux.cc
index 17def9c..f07eb8e 100644
--- a/runtime/vm/virtual_memory_linux.cc
+++ b/runtime/vm/virtual_memory_linux.cc
@@ -7,13 +7,15 @@
 
 #include "vm/virtual_memory.h"
 
-#include <sys/mman.h>  // NOLINT
-#include <unistd.h>    // NOLINT
+#include <errno.h>
+#include <sys/mman.h>
+#include <unistd.h>
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 
 #include "vm/isolate.h"
+#include "vm/profiler.h"
 
 namespace dart {
 
@@ -34,7 +36,12 @@
   }
 
   if (munmap(address, size) != 0) {
-    FATAL("munmap failed\n");
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("munmap error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
   }
 }
 
@@ -96,7 +103,7 @@
   return true;
 }
 
-bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
@@ -120,8 +127,15 @@
       prot = PROT_READ | PROT_WRITE | PROT_EXEC;
       break;
   }
-  return (mprotect(reinterpret_cast<void*>(page_address),
-                   end_address - page_address, prot) == 0);
+  if (mprotect(reinterpret_cast<void*>(page_address),
+               end_address - page_address, prot) != 0) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("mprotect error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
+  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/virtual_memory_macos.cc b/runtime/vm/virtual_memory_macos.cc
index 8b8fc3f..dbb680e 100644
--- a/runtime/vm/virtual_memory_macos.cc
+++ b/runtime/vm/virtual_memory_macos.cc
@@ -7,13 +7,15 @@
 
 #include "vm/virtual_memory.h"
 
-#include <sys/mman.h>  // NOLINT
-#include <unistd.h>    // NOLINT
+#include <errno.h>
+#include <sys/mman.h>
+#include <unistd.h>
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 
 #include "vm/isolate.h"
+#include "vm/profiler.h"
 
 namespace dart {
 
@@ -34,7 +36,12 @@
   }
 
   if (munmap(address, size) != 0) {
-    FATAL("munmap failed\n");
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("munmap error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
   }
 }
 
@@ -96,7 +103,7 @@
   return true;
 }
 
-bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
@@ -120,8 +127,15 @@
       prot = PROT_READ | PROT_WRITE | PROT_EXEC;
       break;
   }
-  return (mprotect(reinterpret_cast<void*>(page_address),
-                   end_address - page_address, prot) == 0);
+  if (mprotect(reinterpret_cast<void*>(page_address),
+               end_address - page_address, prot) != 0) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    NOT_IN_PRODUCT(Profiler::DumpStackTrace());
+    FATAL2("mprotect error: %d (%s)", error,
+           Utils::StrError(error, error_buf, kBufferSize));
+  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/virtual_memory_test.cc b/runtime/vm/virtual_memory_test.cc
index cbe111c..7d725d0 100644
--- a/runtime/vm/virtual_memory_test.cc
+++ b/runtime/vm/virtual_memory_test.cc
@@ -4,6 +4,7 @@
 
 #include "vm/virtual_memory.h"
 #include "platform/assert.h"
+#include "vm/heap.h"
 #include "vm/unit_test.h"
 
 namespace dart {
@@ -49,6 +50,20 @@
   delete vm;
 }
 
+VM_UNIT_TEST_CASE(AllocateAlignedVirtualMemory) {
+  intptr_t kHeapPageSize = kPageSize;
+  intptr_t kVirtualPageSize = 4096;
+
+  intptr_t kIterations = kHeapPageSize / kVirtualPageSize;
+  for (intptr_t i = 0; i < kIterations; i++) {
+    VirtualMemory* vm = VirtualMemory::AllocateAligned(
+        kHeapPageSize, kHeapPageSize, false, NULL);
+    EXPECT(Utils::IsAligned(vm->start(), kHeapPageSize));
+    EXPECT_EQ(kHeapPageSize, vm->size());
+    delete vm;
+  }
+}
+
 VM_UNIT_TEST_CASE(FreeVirtualMemory) {
   // Reservations should always be handed back to OS upon destruction.
   const intptr_t kVirtualMemoryBlockSize = 10 * MB;
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc
index 81f7ff4..15329e6 100644
--- a/runtime/vm/virtual_memory_win.cc
+++ b/runtime/vm/virtual_memory_win.cc
@@ -78,7 +78,7 @@
   return false;
 }
 
-bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
@@ -103,9 +103,10 @@
       break;
   }
   DWORD old_prot = 0;
-  bool result = VirtualProtect(reinterpret_cast<void*>(page_address),
-                               end_address - page_address, prot, &old_prot);
-  return result;
+  if (VirtualProtect(reinterpret_cast<void*>(page_address),
+                     end_address - page_address, prot, &old_prot) == 0) {
+    FATAL1("VirtualProtect failed %d\n", GetLastError());
+  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index c108c21..c9b6306 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -137,7 +137,6 @@
   "isolate.h",
   "isolate_reload.cc",
   "isolate_reload.h",
-  "json_parser.h",
   "json_stream.cc",
   "json_stream.h",
   "json_writer.cc",
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 0a0dd08..665d4bd 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -565,7 +565,8 @@
   ]
   gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk", "target_gen_dir")
   sources = [
-    "$gen_dir/ddc_sdk.dill",
+    "$gen_dir/kernel/ddc_sdk.dill",
+    # TODO(vsm): Remove post CFE.
     "$gen_dir/ddc_sdk.sum",
   ]
   outputs = [
@@ -573,6 +574,9 @@
   ]
 }
 
+# TODO(vsm): Remove the old non-CFE versions of the SDK once we've completed
+# DDC to Kernel (DDK) migration.
+
 # This rule copies DDC's JS SDK and require.js to lib/dev_compiler/amd.
 copy("copy_dev_compiler_js_amd") {
   visibility = [ ":copy_dev_compiler_js" ]
@@ -640,6 +644,73 @@
   ]
 }
 
+# This rule copies DDK's JS SDK and require.js to lib/dev_compiler/kernel/amd.
+copy("copy_dev_compiler_js_amd_kernel") {
+  visibility = [ ":copy_dev_compiler_js" ]
+  deps = [
+    "../utils/dartdevc:dartdevc_sdk_kernel_summary",
+  ]
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  sources = [
+    "$gen_dir/kernel/amd/dart_sdk.js",
+    "$gen_dir/kernel/amd/dart_sdk.js.map",
+    "../third_party/requirejs/require.js",
+  ]
+  outputs = [
+    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/amd/{{source_file_part}}",
+  ]
+}
+
+# This rule copies DDK's JS SDK to lib/dev_compiler/kernel/common.
+copy("copy_dev_compiler_js_common_kernel") {
+  visibility = [ ":copy_dev_compiler_js" ]
+  deps = [
+    "../utils/dartdevc:dartdevc_sdk_kernel_summary",
+  ]
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  sources = [
+    "$gen_dir/kernel/common/dart_sdk.js",
+    "$gen_dir/kernel/common/dart_sdk.js.map",
+    "../pkg/dev_compiler/lib/js/common/run.js",
+  ]
+  outputs = [
+    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/common/{{source_file_part}}",
+  ]
+}
+
+# This rule copies DDK's JS SDK to lib/dev_compiler/kernel/es6.
+copy("copy_dev_compiler_js_es6_kernel") {
+  visibility = [ ":copy_dev_compiler_js" ]
+  deps = [
+    "../utils/dartdevc:dartdevc_sdk_kernel_summary",
+  ]
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  sources = [
+    "$gen_dir/kernel/es6/dart_sdk.js",
+    "$gen_dir/kernel/es6/dart_sdk.js.map",
+  ]
+  outputs = [
+    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/es6/{{source_file_part}}",
+  ]
+}
+
+# This rule copies DDK's JS SDK to lib/dev_compiler/kernel/legacy.
+copy("copy_dev_compiler_js_legacy_kernel") {
+  visibility = [ ":copy_dev_compiler_js" ]
+  deps = [
+    "../utils/dartdevc:dartdevc_sdk_kernel_summary",
+  ]
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  sources = [
+    "$gen_dir/kernel/legacy/dart_sdk.js",
+    "$gen_dir/kernel/legacy/dart_sdk.js.map",
+    "../pkg/dev_compiler/lib/js/legacy/dart_library.js",
+  ]
+  outputs = [
+    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/legacy/{{source_file_part}}",
+  ]
+}
+
 # Copies all of the JS artifacts needed by DDC.
 group("copy_dev_compiler_js") {
   visibility = [
@@ -651,6 +722,10 @@
     ":copy_dev_compiler_js_common",
     ":copy_dev_compiler_js_es6",
     ":copy_dev_compiler_js_legacy",
+    ":copy_dev_compiler_js_amd_kernel",
+    ":copy_dev_compiler_js_common_kernel",
+    ":copy_dev_compiler_js_es6_kernel",
+    ":copy_dev_compiler_js_legacy_kernel",
   ]
 }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index b2603af..1f58cc4 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -6,8 +6,9 @@
 
 import 'dart:_js_embedded_names'
     show
-        DEFERRED_LIBRARY_URIS,
-        DEFERRED_LIBRARY_HASHES,
+        DEFERRED_LIBRARY_PARTS,
+        DEFERRED_PART_URIS,
+        DEFERRED_PART_HASHES,
         GET_TYPE_FROM_NAME,
         GET_ISOLATE_TAG,
         INITIALIZE_LOADED_HUNK,
@@ -3192,8 +3193,7 @@
 
 stringTypeCast(value) {
   if (value is String || value == null) return value;
-  // TODO(lrn): When reified types are available, pass value.class and String.
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'String');
+  throw new CastErrorImplementation(value, 'String');
 }
 
 doubleTypeCheck(value) {
@@ -3204,7 +3204,7 @@
 
 doubleTypeCast(value) {
   if (value is double || value == null) return value;
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'double');
+  throw new CastErrorImplementation(value, 'double');
 }
 
 numTypeCheck(value) {
@@ -3215,7 +3215,7 @@
 
 numTypeCast(value) {
   if (value is num || value == null) return value;
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'num');
+  throw new CastErrorImplementation(value, 'num');
 }
 
 boolTypeCheck(value) {
@@ -3226,7 +3226,7 @@
 
 boolTypeCast(value) {
   if (value is bool || value == null) return value;
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'bool');
+  throw new CastErrorImplementation(value, 'bool');
 }
 
 intTypeCheck(value) {
@@ -3237,7 +3237,7 @@
 
 intTypeCast(value) {
   if (value is int || value == null) return value;
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'int');
+  throw new CastErrorImplementation(value, 'int');
 }
 
 void propertyTypeError(value, property) {
@@ -3247,9 +3247,8 @@
 
 void propertyTypeCastError(value, property) {
   // Cuts the property name to the class name.
-  String actualType = Primitives.objectTypeName(value);
   String expectedType = property.substring(3, property.length);
-  throw new CastErrorImplementation(actualType, expectedType);
+  throw new CastErrorImplementation(value, expectedType);
 }
 
 /**
@@ -3378,7 +3377,7 @@
 
 listTypeCast(value) {
   if (value is List || value == null) return value;
-  throw new CastErrorImplementation(Primitives.objectTypeName(value), 'List');
+  throw new CastErrorImplementation(value, 'List');
 }
 
 listSuperTypeCheck(value, property) {
@@ -3449,14 +3448,7 @@
   if (functionTypeTest(value, functionTypeRti)) return value;
 
   var self = runtimeTypeToString(functionTypeRti);
-  var functionTypeObject = extractFunctionTypeObjectFrom(value);
-  var pretty;
-  if (functionTypeObject != null) {
-    pretty = runtimeTypeToString(functionTypeObject);
-  } else {
-    pretty = Primitives.objectTypeName(value);
-  }
-  throw new CastErrorImplementation(pretty, self);
+  throw new CastErrorImplementation(value, self);
 }
 
 checkMalformedType(value, message) {
@@ -3485,12 +3477,10 @@
 class TypeErrorImplementation extends Error implements TypeError {
   final String message;
 
-  /**
-   * Normal type error caused by a failed subtype test.
-   */
+  /// Normal type error caused by a failed subtype test.
   TypeErrorImplementation(Object value, String type)
-      : message = "type '${Primitives.objectTypeName(value)}' is not a subtype "
-            "of type '$type'";
+      : message = "TypeError: ${Error.safeToString(value)}: "
+            "type '${_typeDescription(value)}' is not a subtype of type '$type'";
 
   TypeErrorImplementation.fromMessage(String this.message);
 
@@ -3502,16 +3492,25 @@
   // TODO(lrn): Rename to CastError (and move implementation into core).
   final String message;
 
-  /**
-   * Normal cast error caused by a failed type cast.
-   */
-  CastErrorImplementation(Object actualType, Object expectedType)
-      : message = "CastError: Casting value of type '$actualType' to"
-            " incompatible type '$expectedType'";
+  /// Normal cast error caused by a failed type cast.
+  CastErrorImplementation(Object value, Object type)
+      : message = "CastError: ${Error.safeToString(value)}: "
+            "type '${_typeDescription(value)}' is not a subtype of type '$type'";
 
   String toString() => message;
 }
 
+String _typeDescription(value) {
+  if (value is Closure) {
+    var functionTypeObject = extractFunctionTypeObjectFrom(value);
+    if (functionTypeObject != null) {
+      return runtimeTypeToString(functionTypeObject);
+    }
+    return 'Closure';
+  }
+  return Primitives.objectTypeName(value);
+}
+
 class FallThroughErrorImplementation extends FallThroughError {
   FallThroughErrorImplementation();
   String toString() => 'Switch case fall-through.';
@@ -3642,14 +3641,21 @@
 DeferredLoadCallback deferredLoadHook;
 
 Future<Null> loadDeferredLibrary(String loadId) {
-  // For each loadId there is a list of hunk-uris to load, and a corresponding
-  // list of hashes. These are stored in the app-global scope.
-  var urisMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_URIS);
-  List<String> uris = JS('JSExtendableArray|Null', '#[#]', urisMap, loadId);
-  if (uris == null) return new Future.value(null);
-
-  var hashesMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_HASHES);
-  List<String> hashes = JS('JSExtendableArray|Null', '#[#]', hashesMap, loadId);
+  // For each loadId there is a list of parts to load. The parts are represented
+  // by an index. There are two arrays, one that maps the index into a Uri and
+  // another that maps the index to a hash.
+  var partsMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_PARTS);
+  List indexes = JS('JSExtendableArray|Null', '#[#]', partsMap, loadId);
+  if (indexes == null) return new Future.value(null);
+  List<String> uris = <String>[];
+  List<String> hashes = <String>[];
+  List index2uri = JS_EMBEDDED_GLOBAL('JSArray', DEFERRED_PART_URIS);
+  List index2hash = JS_EMBEDDED_GLOBAL('JSArray', DEFERRED_PART_HASHES);
+  for (int i = 0; i < indexes.length; i++) {
+    int index = JS('int', '#[#]', indexes, i);
+    uris.add(JS('String', '#[#]', index2uri, index));
+    hashes.add(JS('String', '#[#]', index2hash, index));
+  }
 
   int total = hashes.length;
   assert(total == uris.length);
diff --git a/sdk/lib/_internal/js_runtime/lib/js_rti.dart b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
index 5dd9ffd..e7d9bef 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_rti.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
@@ -84,15 +84,15 @@
 
 getMangledTypeName(TypeImpl type) => type._typeName;
 
-/**
- * Sets the runtime type information on [target]. [rti] is a type
- * representation of type 4 or 5, that is, either a JavaScript array or
- * `null`.
- */
+/// Sets the runtime type information on [target]. [rti] is a type
+/// representation of type 4 or 5, that is, either a JavaScript array or `null`.
+///
+/// Called from generated code.
+///
+/// This is used only for marking JavaScript Arrays (JSArray) with the element
+/// type.
 // Don't inline.  Let the JS engine inline this.  The call expression is much
 // more compact that the inlined expansion.
-// TODO(sra): For most objects it would be better to initialize the type info as
-// a field in the constructor: http://dartbug.com/22676 .
 @NoInline()
 Object setRuntimeTypeInfo(Object target, var rti) {
   assert(rti == null || isJsArray(rti));
@@ -101,10 +101,10 @@
   return target;
 }
 
-/**
- * Returns the runtime type information of [target]. The returned value is a
- * list of type representations for the type arguments.
- */
+/// Returns the runtime type information of [target]. The returned value is a
+/// list of type representations for the type arguments.
+///
+/// Called from generated code.
 getRuntimeTypeInfo(Object target) {
   if (target == null) return null;
   String rtiName = JS_GET_NAME(JsGetName.RTI_NAME);
@@ -120,10 +120,10 @@
   return substitute(substitution, getRuntimeTypeInfo(target));
 }
 
-/**
- * Returns the [index]th type argument of [target] as an instance of
- * [substitutionName].
- */
+/// Returns the [index]th type argument of [target] as an instance of
+/// [substitutionName].
+///
+/// Called from generated code.
 @NoThrows()
 @NoSideEffects()
 @NoInline()
@@ -132,6 +132,9 @@
   return arguments == null ? null : getIndex(arguments, index);
 }
 
+/// Returns the [index]th type argument of [target].
+///
+/// Called from generated code.
 @NoThrows()
 @NoSideEffects()
 @NoInline()
@@ -153,22 +156,37 @@
  * of type 4, the JavaScript array, where the first element represents the class
  * and the remaining elements represent the type arguments.
  */
-String getRuntimeTypeAsString(var rti, {String onTypeVariable(int i)}) {
+String _getRuntimeTypeAsStringV1(var rti, {String onTypeVariable(int i)}) {
   assert(isJsArray(rti));
   String className = rawRtiToJsConstructorName(getIndex(rti, 0));
-  return '$className${joinArguments(rti, 1, onTypeVariable: onTypeVariable)}';
+  return '$className${joinArgumentsV1(rti, 1, onTypeVariable: onTypeVariable)}';
 }
 
-/**
- * Returns a human-readable representation of the type representation [rti].
- */
+String _getRuntimeTypeAsStringV2(var rti, List<String> genericContext) {
+  assert(isJsArray(rti));
+  String className = rawRtiToJsConstructorName(getIndex(rti, 0));
+  return '$className${joinArgumentsV2(rti, 1, genericContext)}';
+}
+
+/// Returns a human-readable representation of the type representation [rti].
+///
+/// Called from generated code.
+///
+/// [onTypeVariable] is used only from dart:mirrors.
+@NoInline()
 String runtimeTypeToString(var rti, {String onTypeVariable(int i)}) {
+  return JS_GET_FLAG('STRONG_MODE')
+      ? runtimeTypeToStringV2(rti, null)
+      : runtimeTypeToStringV1(rti, onTypeVariable: onTypeVariable);
+}
+
+String runtimeTypeToStringV1(var rti, {String onTypeVariable(int i)}) {
   if (rti == null) {
     return 'dynamic';
   }
   if (isJsArray(rti)) {
     // A list representing a type with arguments.
-    return getRuntimeTypeAsString(rti, onTypeVariable: onTypeVariable);
+    return _getRuntimeTypeAsStringV1(rti, onTypeVariable: onTypeVariable);
   }
   if (isJsFunction(rti)) {
     // A reference to the constructor.
@@ -185,15 +203,43 @@
     String typedefPropertyName = JS_GET_NAME(JsGetName.TYPEDEF_TAG);
     var typedefInfo = JS('', '#[#]', rti, typedefPropertyName);
     if (typedefInfo != null) {
-      return runtimeTypeToString(typedefInfo, onTypeVariable: onTypeVariable);
+      return runtimeTypeToStringV1(typedefInfo, onTypeVariable: onTypeVariable);
     }
-    return _functionRtiToString(rti, onTypeVariable);
+    return _functionRtiToStringV1(rti, onTypeVariable);
   }
   // We should not get here.
   return 'unknown-reified-type';
 }
 
-String _functionRtiToString(var rti, String onTypeVariable(int i)) {
+String runtimeTypeToStringV2(var rti, List<String> genericContext) {
+  if (rti == null) {
+    return 'dynamic';
+  }
+  if (isJsArray(rti)) {
+    // A list representing a type with arguments.
+    return _getRuntimeTypeAsStringV2(rti, genericContext);
+  }
+  if (isJsFunction(rti)) {
+    // A reference to the constructor.
+    return rawRtiToJsConstructorName(rti);
+  }
+  if (isGenericFunctionTypeParameter(rti)) {
+    int index = rti;
+    if (genericContext == null || index < 0 || index >= genericContext.length) {
+      return 'unexpected-generic-index:${index}';
+    }
+    return '${genericContext[genericContext.length - index - 1]}';
+  }
+  String functionPropertyName = JS_GET_NAME(JsGetName.FUNCTION_TYPE_TAG);
+  if (JS('bool', 'typeof #[#] != "undefined"', rti, functionPropertyName)) {
+    // TODO(sra): If there is a typedef tag, use the typedef name.
+    return _functionRtiToStringV2(rti, genericContext);
+  }
+  // We should not get here.
+  return 'unknown-reified-type';
+}
+
+String _functionRtiToStringV1(var rti, String onTypeVariable(int i)) {
   String returnTypeText;
   String voidTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG);
   if (JS('bool', '!!#[#]', rti, voidTag)) {
@@ -202,7 +248,7 @@
     String returnTypeTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG);
     var returnRti = JS('', '#[#]', rti, returnTypeTag);
     returnTypeText =
-        runtimeTypeToString(returnRti, onTypeVariable: onTypeVariable);
+        runtimeTypeToStringV1(returnRti, onTypeVariable: onTypeVariable);
   }
 
   String argumentsText = '';
@@ -216,7 +262,7 @@
     for (var argument in arguments) {
       argumentsText += sep;
       argumentsText +=
-          runtimeTypeToString(argument, onTypeVariable: onTypeVariable);
+          runtimeTypeToStringV1(argument, onTypeVariable: onTypeVariable);
       sep = ', ';
     }
   }
@@ -231,7 +277,7 @@
     for (var argument in optionalArguments) {
       argumentsText += sep;
       argumentsText +=
-          runtimeTypeToString(argument, onTypeVariable: onTypeVariable);
+          runtimeTypeToStringV1(argument, onTypeVariable: onTypeVariable);
       sep = ', ';
     }
     argumentsText += ']';
@@ -246,7 +292,8 @@
     sep = '';
     for (String name in extractKeys(namedArguments)) {
       argumentsText += sep;
-      argumentsText += runtimeTypeToString(JS('', '#[#]', namedArguments, name),
+      argumentsText += runtimeTypeToStringV1(
+          JS('', '#[#]', namedArguments, name),
           onTypeVariable: onTypeVariable);
       argumentsText += ' $name';
       sep = ', ';
@@ -261,12 +308,129 @@
   return '(${argumentsText}) => ${returnTypeText}';
 }
 
+// Returns a formatted String version of a function type.
+//
+// [genericContext] is list of the names of generic type parameters for generic
+// function types. The de Bruijn indexing scheme references the type variables
+// from the inner scope out. The parameters for each scope are pushed in
+// reverse, e.g.  `<P,Q>(<R,S,T>(R))` creates the list `[Q,P,T,S,R]`. This
+// allows the de Bruijn index to simply index backwards from the end of
+// [genericContext], e.g. in the outer scope index `0` is P and `1` is Q, and in
+// the inner scope index `0` is R, `3` is P, and `4` is Q.
+//
+// [genericContext] is initially `null`.
+String _functionRtiToStringV2(var rti, List<String> genericContext) {
+  String typeParameters = '';
+  int outerContextLength;
+
+  String boundsTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_GENERIC_BOUNDS_TAG);
+  if (hasField(rti, boundsTag)) {
+    List boundsRti = JS('JSFixedArray', '#[#]', rti, boundsTag);
+    if (genericContext == null) {
+      genericContext = <String>[];
+    } else {
+      outerContextLength = genericContext.length;
+    }
+    int offset = genericContext.length;
+    for (int i = boundsRti.length; i > 0; i--) {
+      genericContext.add('T${offset + i}');
+    }
+    // All variables are in scope in the bounds.
+    String typeSep = '';
+    typeParameters = '<';
+    for (int i = 0; i < boundsRti.length; i++) {
+      typeParameters += typeSep;
+      typeParameters += genericContext[genericContext.length - i - 1];
+      typeSep = ', ';
+      var boundRti = boundsRti[i];
+      if (isInterestingBound(boundRti)) {
+        typeParameters +=
+            ' extends ' + runtimeTypeToStringV2(boundRti, genericContext);
+      }
+    }
+    typeParameters += '>';
+  }
+
+  String returnTypeText;
+  String voidTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG);
+  if (JS('bool', '!!#[#]', rti, voidTag)) {
+    returnTypeText = 'void';
+  } else {
+    String returnTypeTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG);
+    var returnRti = JS('', '#[#]', rti, returnTypeTag);
+    returnTypeText = runtimeTypeToStringV2(returnRti, genericContext);
+  }
+
+  String argumentsText = '';
+  String sep = '';
+
+  String requiredParamsTag =
+      JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG);
+  if (hasField(rti, requiredParamsTag)) {
+    List arguments = JS('JSFixedArray', '#[#]', rti, requiredParamsTag);
+    for (var argument in arguments) {
+      argumentsText += sep;
+      argumentsText += runtimeTypeToStringV2(argument, genericContext);
+      sep = ', ';
+    }
+  }
+
+  String optionalParamsTag =
+      JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG);
+  bool hasOptionalArguments = JS('bool', '# in #', optionalParamsTag, rti);
+  if (hasOptionalArguments) {
+    List optionalArguments = JS('JSFixedArray', '#[#]', rti, optionalParamsTag);
+    argumentsText += '$sep[';
+    sep = '';
+    for (var argument in optionalArguments) {
+      argumentsText += sep;
+      argumentsText += runtimeTypeToStringV2(argument, genericContext);
+      sep = ', ';
+    }
+    argumentsText += ']';
+  }
+
+  String namedParamsTag =
+      JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG);
+  bool hasNamedArguments = JS('bool', '# in #', namedParamsTag, rti);
+  if (hasNamedArguments) {
+    var namedArguments = JS('', '#[#]', rti, namedParamsTag);
+    argumentsText += '$sep{';
+    sep = '';
+    for (String name in extractKeys(namedArguments)) {
+      argumentsText += sep;
+      argumentsText += runtimeTypeToStringV2(
+          JS('', '#[#]', namedArguments, name), genericContext);
+      argumentsText += ' $name';
+      sep = ', ';
+    }
+    argumentsText += '}';
+  }
+
+  if (outerContextLength != null) {
+    // Pop all of the generic type parameters.
+    JS('', '#.length = #', genericContext, outerContextLength);
+  }
+
+  // TODO(sra): Below is the same format as the VM. Change to:
+  //
+  //     return '${returnTypeText} Function${typeParameters}(${argumentsText})';
+  //
+  return '${typeParameters}(${argumentsText}) => ${returnTypeText}';
+}
+
 /**
  * Creates a comma-separated string of human-readable representations of the
  * type representations in the JavaScript array [types] starting at index
  * [startIndex].
  */
-String joinArguments(var types, int startIndex,
+String joinArguments(var types, int startIndex) {
+  return JS_GET_FLAG('STRONG_MODE')
+      ? joinArgumentsV2(types, startIndex, null)
+      : joinArgumentsV1(types, startIndex);
+}
+
+String joinArgumentsV1(var types, int startIndex,
     {String onTypeVariable(int i)}) {
   if (types == null) return '';
   assert(isJsArray(types));
@@ -283,7 +447,29 @@
     if (argument != null) {
       allDynamic = false;
     }
-    buffer.write(runtimeTypeToString(argument, onTypeVariable: onTypeVariable));
+    buffer
+        .write(runtimeTypeToStringV1(argument, onTypeVariable: onTypeVariable));
+  }
+  return allDynamic ? '' : '<$buffer>';
+}
+
+String joinArgumentsV2(var types, int startIndex, List<String> genericContext) {
+  if (types == null) return '';
+  assert(isJsArray(types));
+  bool firstArgument = true;
+  bool allDynamic = true;
+  StringBuffer buffer = new StringBuffer('');
+  for (int index = startIndex; index < getLength(types); index++) {
+    if (firstArgument) {
+      firstArgument = false;
+    } else {
+      buffer.write(', ');
+    }
+    var argument = getIndex(types, index);
+    if (argument != null) {
+      allDynamic = false;
+    }
+    buffer.write(runtimeTypeToStringV2(argument, genericContext));
   }
   return allDynamic ? '' : '<$buffer>';
 }
@@ -381,11 +567,8 @@
 Object subtypeCast(Object object, String isField, List checks, String asField) {
   if (object == null) return object;
   if (checkSubtype(object, isField, checks, asField)) return object;
-  String actualType = Primitives.objectTypeName(object);
   String typeName = computeTypeName(isField, checks);
-  // TODO(johnniwinther): Move type lookup to [CastErrorImplementation] to
-  // align with [TypeErrorImplementation].
-  throw new CastErrorImplementation(actualType, typeName);
+  throw new CastErrorImplementation(object, typeName);
 }
 
 Object assertSubtype(
@@ -503,8 +686,7 @@
 
 Object subtypeOfRuntimeTypeCast(Object object, var type) {
   if (object != null && !checkSubtypeOfRuntimeType(object, type)) {
-    String actualType = Primitives.objectTypeName(object);
-    throw new CastErrorImplementation(actualType, runtimeTypeToString(type));
+    throw new CastErrorImplementation(object, runtimeTypeToString(type));
   }
   return object;
 }
@@ -815,3 +997,11 @@
  * `null` and `undefined` (which we can avoid).
  */
 bool isNotIdentical(var s, var t) => JS('bool', '# !== #', s, t);
+
+/// 'Top' bounds are uninteresting: null/undefined and Object.
+bool isInterestingBound(rti) =>
+    rti != null &&
+    isNotIdentical(
+        rti,
+        JS_BUILTIN(
+            'depends:none;effects:none;', JsBuiltin.dartObjectConstructor));
diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
index e1eb66d..174333c 100644
--- a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
@@ -175,23 +175,34 @@
 /// This embedded global is used for deserialization in the isolate-library.
 const INITIALIZE_EMPTY_INSTANCE = "initializeEmptyInstance";
 
-/// Returns a map from load-ids to URIs.
+/// Contains a map from load-ids to lists of part indexes.
 ///
 /// To load the deferred library that is represented by the load-id, the runtime
-/// must load all associated URIs.
+/// must load all associated URIs (named in DEFERRED_PART_URIS) and initialize
+/// all the loaded hunks (DEFERRED_PART_HASHES).
 ///
 /// This embedded global is only used for deferred loading.
-const DEFERRED_LIBRARY_URIS = 'deferredLibraryUris';
+const DEFERRED_LIBRARY_PARTS = 'deferredLibraryParts';
 
-/// Returns a map from load-ids to hashes.
+/// Contains a list of URIs (Strings), indexed by part.
+///
+/// The lists in the DEFERRED_LIBRARY_PARTS map contain indexes into this list.
+///
+/// This embedded global is only used for deferred loading.
+const DEFERRED_PART_URIS = 'deferredPartUris';
+
+/// Contains a list of hashes, indexed by part.
+///
+/// The lists in the DEFERRED_LIBRARY_PARTS map contain indexes into this list.
 ///
 /// The hashes are associated with the URIs of the load-ids (see
-/// [DEFERRED_LIBRARY_URIS]). They are MD5 (or similar) hashes of the code that
-/// must be loaded. By using cryptographic hashes we can avoid loading similar
-/// code multiple times.
+/// [DEFERRED_PART_URIS]). They are SHA1 (or similar) hashes of the code that
+/// must be loaded. By using cryptographic hashes we can (1) handle loading in
+/// the same web page the parts from multiple Dart applications (2) avoid
+/// loading similar code multiple times.
 ///
 /// This embedded global is only used for deferred loading.
-const DEFERRED_LIBRARY_HASHES = 'deferredLibraryHashes';
+const DEFERRED_PART_HASHES = 'deferredPartHashes';
 
 /// Initialize a loaded hunk.
 ///
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart
index 3d320f6..b538aae 100644
--- a/sdk/lib/convert/base64.dart
+++ b/sdk/lib/convert/base64.dart
@@ -63,6 +63,17 @@
   Base64Decoder get decoder => const Base64Decoder();
 
   /**
+   * Decodes [encoded].
+   *
+   * The input is decoded as if by `decoder.convert`.
+   *
+   * The returned [Uint8List] contains exactly the decoded bytes,
+   * so the [Uint8List.length] is precisely the number of decoded bytes.
+   * The [Uint8List.buffer] may be larger than the decoded bytes.
+   */
+  Uint8List decode(String encoded) => decoder.convert(encoded);
+
+  /**
    * Validates and normalizes the base64 encoded data in [source].
    *
    * Only acts on the substring from [start] to [end], with [end]
@@ -471,7 +482,17 @@
 class Base64Decoder extends Converter<String, List<int>> {
   const Base64Decoder();
 
-  List<int> convert(String input, [int start = 0, int end]) {
+  /**
+   * Decodes the characters of [input] from [start] to [end] as base64.
+   *
+   * If [start] is omitted, it defaults to the start of [input].
+   * If [end] is omitted, it defaults to the end of [input].
+   *
+   * The returned [Uint8List] contains exactly the decoded bytes,
+   * so the [Uint8List.length] is precisely the number of decoded bytes.
+   * The [Uint8List.buffer] may be larger than the decoded bytes.
+   */
+  Uint8List convert(String input, [int start = 0, int end]) {
     end = RangeError.checkValidRange(start, end, input.length);
     if (start == end) return new Uint8List(0);
     var decoder = new _Base64Decoder();
diff --git a/sdk/lib/convert/codec.dart b/sdk/lib/convert/codec.dart
index 40066c75..033e082 100644
--- a/sdk/lib/convert/codec.dart
+++ b/sdk/lib/convert/codec.dart
@@ -17,7 +17,18 @@
 abstract class Codec<S, T> {
   const Codec();
 
+  /**
+   * Encodes [input].
+   *
+   * The input is encoded as if by `encoder.convert`.
+   */
   T encode(S input) => encoder.convert(input);
+
+  /**
+   * Decodes [encoded] data.
+   *
+   * The input is decoded as if by `decoder.convert`.
+   */
   S decode(T encoded) => decoder.convert(encoded);
 
   /**
diff --git a/sdk/lib/developer/developer.dart b/sdk/lib/developer/developer.dart
index 1a2ea45..b6ec40d 100644
--- a/sdk/lib/developer/developer.dart
+++ b/sdk/lib/developer/developer.dart
@@ -4,10 +4,9 @@
 
 /// Interact with developer tools such as the debugger and inspector.
 ///
-/// The dart:developer library is _unstable_ and its API might change slightly
-/// as a result of developer feedback. This library is platform dependent and
-/// therefore it has implementations for both dart2js and the Dart VM. Both are
-/// under development and may not support all operations yet.
+/// This library is platform dependent and has separate implementations for
+/// both web and the Dart VM. A specific platform may not support all
+/// operations.
 ///
 /// To use this library in your code:
 ///
@@ -21,8 +20,8 @@
 
 part 'extension.dart';
 part 'profiler.dart';
-part 'timeline.dart';
 part 'service.dart';
+part 'timeline.dart';
 
 /// If [when] is true, stop the program as if a breakpoint were hit at the
 /// following statement.
@@ -42,19 +41,26 @@
 external Object inspect(Object object);
 
 /// Emit a log event.
-/// [message] is the log message.
-/// [time]  (optional) is the timestamp.
-/// [sequenceNumber]  (optional) is a monotonically increasing sequence number.
-/// [level]  (optional) is the severity level (value between 0 and 2000).
-/// [name]  (optional) is the name of the source of the log message.
-/// [zone]  (optional) the zone where the log was emitted
-/// [error]  (optional) an error object associated with this log event.
-/// [stackTrace]  (optional) a stack trace associated with this log event.
-external void log(String message,
-    {DateTime time,
-    int sequenceNumber,
-    int level: 0,
-    String name: '',
-    Zone zone,
-    Object error,
-    StackTrace stackTrace});
+///
+/// This function was designed to map closely to the logging information
+/// collected by `package:logging`.
+///
+/// - [message] is the log message
+/// - [time] (optional) is the timestamp
+/// - [sequenceNumber] (optional) is a monotonically increasing sequence number
+/// - [level] (optional) is the severity level (a value between 0 and 2000); see
+///   the `package:logging` `Level` class for an overview of the possible values
+/// - [name] (optional) is the name of the source of the log message
+/// - [zone] (optional) the zone where the log was emitted
+/// - [error] (optional) an error object associated with this log event
+/// - [stackTrace] (optional) a stack trace associated with this log event
+external void log(
+  String message, {
+  DateTime time,
+  int sequenceNumber,
+  int level: 0,
+  String name: '',
+  Zone zone,
+  Object error,
+  StackTrace stackTrace,
+});
diff --git a/sdk/lib/developer/extension.dart b/sdk/lib/developer/extension.dart
index d6ed598..ec316c7 100644
--- a/sdk/lib/developer/extension.dart
+++ b/sdk/lib/developer/extension.dart
@@ -73,7 +73,7 @@
 
   static String _errorCodeMessage(int errorCode) {
     _validateErrorCode(errorCode);
-    if (errorCode == kInvalidParams) {
+    if (errorCode == invalidParams) {
       return "Invalid params";
     }
     return "Server error";
@@ -92,8 +92,10 @@
     throw new ArgumentError.value(errorCode, "errorCode", "Out of range");
   }
 
+  // ignore: unused_element, called from runtime/lib/developer.dart
   bool _isError() => (_errorCode != null) && (_errorDetail != null);
 
+  // ignore: unused_element, called from runtime/lib/developer.dart
   String _toString() {
     if (_result != null) {
       return _result;
@@ -111,12 +113,11 @@
 
 /// A service protocol extension handler. Registered with [registerExtension].
 ///
-/// Must complete to a [ServiceExtensionResponse].
+/// Must complete to a [ServiceExtensionResponse]. [method] is the method name
+/// of the service protocol request, and [parameters] is a map holding the
+/// parameters to the service protocol request.
 ///
-/// [method] - the method name of the service protocol request.
-/// [parameters] - A map holding the parameters to the service protocol request.
-///
-/// *NOTE*: All parameter names and values are **encoded as strings**.
+/// *NOTE*: all parameter names and values are encoded as strings.
 typedef Future<ServiceExtensionResponse> ServiceExtensionHandler(
     String method, Map<String, String> parameters);
 
diff --git a/sdk/lib/developer/profiler.dart b/sdk/lib/developer/profiler.dart
index 76d2644..593c27f 100644
--- a/sdk/lib/developer/profiler.dart
+++ b/sdk/lib/developer/profiler.dart
@@ -134,6 +134,7 @@
     _metrics.remove(metric.name);
   }
 
+  // ignore: unused_element, called from native code
   static String _printMetric(String id) {
     var metric = _metrics[id];
     if (metric == null) {
@@ -142,6 +143,7 @@
     return json.encode(metric._toJSON());
   }
 
+  // ignore: unused_element, called from native code
   static String _printMetrics() {
     var metrics = [];
     for (var metric in _metrics.values) {
diff --git a/sdk/lib/developer/service.dart b/sdk/lib/developer/service.dart
index 65c7f73..9616963 100644
--- a/sdk/lib/developer/service.dart
+++ b/sdk/lib/developer/service.dart
@@ -4,7 +4,7 @@
 
 part of dart.developer;
 
-/// Service protocol is the protocol that a client like the observatory
+/// Service protocol is the protocol that a client like the Observatory
 /// could use to access the services provided by the Dart VM for
 /// debugging and inspecting Dart programs. This class encapsulates the
 /// version number and Uri for accessing this service.
@@ -55,7 +55,7 @@
 
   /// Control the web server that the service protocol is accessed through.
   /// The [enable] argument must be a boolean and is used as a toggle to
-  /// enable(true) or disable(false) the web server servicing requests.
+  /// enable (true) or disable (false) the web server servicing requests.
   static Future<ServiceProtocolInfo> controlWebServer(
       {bool enable: false}) async {
     if (enable is! bool) {
diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart
index eb00c96..e374096d 100644
--- a/sdk/lib/developer/timeline.dart
+++ b/sdk/lib/developer/timeline.dart
@@ -6,7 +6,10 @@
 
 const bool _isProduct = const bool.fromEnvironment("dart.vm.product");
 
+/// A typedef for the function argument to [Timeline.timeSync].
 typedef dynamic TimelineSyncFunction();
+
+// TODO: This typedef is not used.
 typedef Future TimelineAsyncFunction();
 
 /// A class to represent Flow events.
diff --git a/sdk/lib/io/io_resource_info.dart b/sdk/lib/io/io_resource_info.dart
index eb1d295..22ff562 100644
--- a/sdk/lib/io/io_resource_info.dart
+++ b/sdk/lib/io/io_resource_info.dart
@@ -107,7 +107,7 @@
     openFiles.remove(info.id);
   }
 
-  static Iterable<Map<String, String>> getOpenFilesList() {
+  static Iterable<Map<String, dynamic>> getOpenFilesList() {
     return new List.from(openFiles.values.map((e) => e.referenceValueMap));
   }
 
@@ -177,7 +177,7 @@
     startedProcesses.remove(info.id);
   }
 
-  static Iterable<Map<String, String>> getStartedProcessesList() =>
+  static Iterable<Map<String, dynamic>> getStartedProcessesList() =>
       new List.from(startedProcesses.values.map((e) => e.referenceValueMap));
 
   static Future<ServiceExtensionResponse> getStartedProcesses(
@@ -226,7 +226,7 @@
     return '${socket.address.host}:${socket.port}$remote';
   }
 
-  static Iterable<Map<String, String>> getOpenSocketsList() {
+  static Iterable<Map<String, dynamic>> getOpenSocketsList() {
     return new List.from(openSockets.values.map((e) => e.referenceValueMap));
   }
 
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 734204a..bcc4df5 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -156,7 +156,7 @@
   external static Isolate get current;
 
   /**
-   * Returns the package root of the current isolate, if any.
+   * The location of the package configuration of the current isolate, if any.
    *
    * If the isolate is using a [packageConfig] or the isolate has not been
    * setup for package resolution, this getter returns `null`, otherwise it
@@ -166,7 +166,7 @@
   external static Future<Uri> get packageRoot;
 
   /**
-   * Returns the package root of the current isolate, if any.
+   * The package root of the current isolate, if any.
    *
    * If the isolate is using a [packageRoot] or the isolate has not been
    * setup for package resolution, this getter returns `null`, otherwise it
diff --git a/sdk/lib/vmservice/message.dart b/sdk/lib/vmservice/message.dart
index dd808c7..e6083aa 100644
--- a/sdk/lib/vmservice/message.dart
+++ b/sdk/lib/vmservice/message.dart
@@ -154,20 +154,18 @@
   // elements in the list are strings, making consumption by C++ simpler.
   // This has a side effect that boolean literal values like true become 'true'
   // and thus indistinguishable from the string literal 'true'.
-  List _makeAllString(List list) {
+  List<String> _makeAllString(List list) {
     if (list == null) {
       return null;
     }
+    var new_list = new List<String>(list.length);
     for (var i = 0; i < list.length; i++) {
-      if (list[i] is String) {
-        continue;
-      }
-      list[i] = list[i].toString();
+      new_list[i] = list[i].toString();
     }
-    return list;
+    return new_list;
   }
 
-  Future<Response> send(SendPort sendPort) {
+  Future<Response> sendToIsolate(SendPort sendPort) {
     final receivePort = new RawReceivePort();
     receivePort.handler = (value) {
       receivePort.close();
@@ -221,11 +219,11 @@
       receivePort.close();
       _setResponseFromPort(value);
     };
-    final keys = params.keys.toList(growable: false);
-    final values = params.values.toList(growable: false);
+    var keys = params.keys.toList(growable: false);
+    var values = params.values.toList(growable: false);
     if (!_methodNeedsObjectParameters(method)) {
-      _makeAllString(keys);
-      _makeAllString(values);
+      keys = _makeAllString(keys);
+      values = _makeAllString(values);
     }
 
     final request = new List(6)
diff --git a/sdk/lib/vmservice/running_isolate.dart b/sdk/lib/vmservice/running_isolate.dart
index 2aa6dc2..a1339f0 100644
--- a/sdk/lib/vmservice/running_isolate.dart
+++ b/sdk/lib/vmservice/running_isolate.dart
@@ -15,7 +15,7 @@
 
   Future<Response> routeRequest(Message message) {
     // Send message to isolate.
-    return message.send(sendPort);
+    return message.sendToIsolate(sendPort);
   }
 
   void routeResponse(Message message) {}
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index abe1e10..1ba9697 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -63,7 +63,6 @@
 # dartk: precompilation failures (debug)
 [ $compiler == dartkp && $mode == debug ]
 Language/Functions/External_Functions/not_connected_to_a_body_t01: Crash
-Language/Statements/For/Asynchronous_For_in/execution_t04: Crash
 
 [ $compiler == dartkp && $strong ]
 *: SkipByDesign
diff --git a/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart b/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
index ddb130f..97822e1 100644
--- a/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
+++ b/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
@@ -90,9 +90,8 @@
   asyncTest(() async {
     print('--test from ast---------------------------------------------------');
     await runTest(useKernel: false);
-    // TODO(sigmund): Handle this for kernel.
-    //print('--test from kernel------------------------------------------------');
-    //await runTest(useKernel: true);
+    print('--test from kernel------------------------------------------------');
+    await runTest(useKernel: true);
   });
 }
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1.dart
index 513d43b..b3d820a 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1.dart
@@ -2,13 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import '../libs/deferred_constant1_lib1.dart' as lib1 hide C2, C3;
+import '../libs/deferred_constant1_lib1.dart';
 import '../libs/deferred_constant1_lib2.dart' deferred as lib2;
 
 /*element: main:OutputUnit(main, {})*/
 main() async {
-  lib1.C1.value;
+  C1.value;
+  print(const C(4));
+  () => print(const C(5));
   await lib2.loadLibrary();
   lib2.C2.value;
   lib2.C3.value;
+  lib2.C4.value;
+  lib2.C5.value;
+  lib2.C6;
+  lib2.C7.value;
 }
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index 9a48d0c..59b43ee 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -37,8 +37,6 @@
     await checkTests(
         dataDir, computeAstOutputUnitData, computeKernelOutputUnitData,
         libDirectory: new Directory.fromUri(Platform.script.resolve('libs')),
-        forMainLibraryOnly: false,
-        forUserSourceFilesOnly: true,
         skipForKernel: skipForKernel,
         options: compilerOptions,
         args: args, setUpFunction: () {
@@ -143,16 +141,17 @@
         node is ir.ListLiteral ||
         node is ir.MapLiteral) {
       // Adjust the source-span to match the AST-based location. The kernel FE
-      // skips the "const" keyword for the expression offset (-6 is an
-      // approximation assuming that there is just a single space after "const",
-      // this is likely good enough for our small unit tests).
+      // skips the "const" keyword for the expression offset and any prefix in
+      // front of the constructor. The "-6" is an approximation assuming that
+      // there is just a single space after "const" and no prefix.
+      // TODO(sigmund): offsets should be fixed in the FE instead.
       span = new SourceSpan(span.uri, span.begin - 6, span.end - 6);
     }
     _registerValue(
         new NodeId(span.begin, IdKind.node),
         outputUnitString(data.outputUnitForConstant(constant)),
         member,
-        computeSourceSpanFromTreeNode(node),
+        span,
         actualMap,
         compiler.reporter);
   }
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib1.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib1.dart
index 7758772..8965ddf 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib1.dart
@@ -4,31 +4,4 @@
 
 library deferred_constants1_lib1;
 
-class C {
-  /*element: C.value:OutputUnit(main, {})*/
-  final value;
-  /*element: C.:OutputUnit(main, {})*/
-  const C(this.value);
-}
-
-/// ---------------------------------------------------------------------------
-/// Constant used from main: not deferred.
-/// ---------------------------------------------------------------------------
-
-/*element: C1:OutputUnit(main, {})*/
-const C1 = /*OutputUnit(main, {})*/ const C(1);
-
-/// ---------------------------------------------------------------------------
-/// Constant completely deferred.
-/// ---------------------------------------------------------------------------
-
-/*element: C2:OutputUnit(1, {lib2})*/
-const C2 = /*OutputUnit(1, {lib2})*/ const C(2);
-
-/// ---------------------------------------------------------------------------
-/// Constant field not used from main, but the constant value is: so the field
-/// and the constant value are in different output units.
-/// ---------------------------------------------------------------------------
-
-/*element: C3:OutputUnit(1, {lib2})*/
-const C3 = /*OutputUnit(main, {})*/ const C(1);
+export 'deferred_constant1_lib3.dart' show C, C1;
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib2.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib2.dart
index d21aec4..ca606bb 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib2.dart
@@ -4,4 +4,4 @@
 
 library deferred_constants1_lib2;
 
-export 'deferred_constant1_lib1.dart' show C2, C3;
+export 'deferred_constant1_lib3.dart' show C2, C3, C4, C5, C6, C7;
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart
new file mode 100644
index 0000000..a3a279d
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart
@@ -0,0 +1,54 @@
+// 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 deferred_constants1_lib3;
+
+class C {
+  /*element: C.value:OutputUnit(main, {})*/
+  final value;
+  /*element: C.:OutputUnit(main, {})*/
+  const C(this.value);
+}
+
+/// ---------------------------------------------------------------------------
+/// Constant used from main: not deferred.
+/// ---------------------------------------------------------------------------
+
+/*element: C1:OutputUnit(main, {})*/
+const C1 = /*OutputUnit(main, {})*/ const C(1);
+
+/// ---------------------------------------------------------------------------
+/// Constant completely deferred.
+/// ---------------------------------------------------------------------------
+
+/*element: C2:OutputUnit(1, {lib2})*/
+const C2 = /*OutputUnit(1, {lib2})*/ const C(2);
+
+/// ---------------------------------------------------------------------------
+/// Constant fields not used from main, but the constant value are: so the field
+/// and the constants are in different output units.
+/// ---------------------------------------------------------------------------
+
+/*element: C3:OutputUnit(1, {lib2})*/
+const C3 = /*OutputUnit(main, {})*/ const C(1);
+
+/*element: C4:OutputUnit(1, {lib2})*/
+const C4 = /*OutputUnit(main, {})*/ const C(4);
+
+/// ---------------------------------------------------------------------------
+/// Constant value used form a closure within main.
+/// ---------------------------------------------------------------------------
+
+/*element: C5:OutputUnit(1, {lib2})*/
+const C5 = /*OutputUnit(main, {})*/ const C(5);
+
+/// ---------------------------------------------------------------------------
+/// Deferred constants, used after a deferred load.
+/// ---------------------------------------------------------------------------
+
+/*element: C6:OutputUnit(1, {lib2})*/
+const C6 = /*OutputUnit(1, {lib2})*/ "string6";
+
+/*element: C7:OutputUnit(1, {lib2})*/
+const C7 = /*OutputUnit(1, {lib2})*/ const C(const C(7));
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant2_lib.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant2_lib.dart
index 1967a3c..dc59b97 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant2_lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant2_lib.dart
@@ -4,15 +4,6 @@
 
 library deferred_constants2_lib;
 
-class MyClass {
-  const MyClass();
-
-  foo(x) {
-    print('MyClass.foo($x)');
-    return (x - 3) ~/ 2;
-  }
-}
-
 class Constant {
   /*element: Constant.value:OutputUnit(1, {lib})*/
   final value;
@@ -27,27 +18,3 @@
 
 /*element: C1:OutputUnit(1, {lib})*/
 const C1 = /*OutputUnit(1, {lib})*/ const Constant(499);
-
-const C2 = const [const Constant(99)];
-
-foo([x = const Constant(42)]) => x;
-bar() => const Constant(777);
-
-class Gee {
-  get value => c.value;
-  final c;
-
-  Gee([this.c = const Constant(111)]);
-  const Gee.n321([this.c = const Constant(321)]);
-  Gee.n135({arg: const Constant(135)}) : this.c = arg;
-  const Gee.n246({arg: const Constant(246)}) : this.c = arg;
-  const Gee.n888() : this.c = const Constant(888);
-  const Gee.constant(this.c);
-}
-
-class Gee2 extends Gee {
-  Gee2() : super(const Constant(979));
-  const Gee2.n321() : super.n321();
-  const Gee2.n151() : super.constant(const Constant(151));
-  const Gee2.n888() : super.n888();
-}
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart
index 14e96f5..5f3267e 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.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 "dont_inline_deferred_constants_main.dart" show C;
 import "dont_inline_deferred_constants_main.dart" as main;
 
 /*element: C1:OutputUnit(1, {lib1})*/
@@ -10,8 +11,8 @@
 /*element: C2:OutputUnit(1, {lib1})*/
 const C2 = /*OutputUnit(1, {lib1})*/ 1010;
 
-class C {
-  /*element: C.C3:OutputUnit(1, {lib1})*/
+class D {
+  /*element: D.C3:OutputUnit(1, {lib1})*/
   static const C3 = /*OutputUnit(1, {lib1})*/ "string2";
 }
 
@@ -19,10 +20,10 @@
 const C4 = /*OutputUnit(main, {})*/ "string4";
 
 /*element: C5:OutputUnit(1, {lib1})*/
-const C5 = /*OutputUnit(main, {})*/ const main.C(1);
+const C5 = /*OutputUnit(main, {})*/ const C(1);
 
 /*element: C6:OutputUnit(1, {lib1})*/
-const C6 = /*OutputUnit(2, {lib1, lib2})*/ const main.C(2);
+const C6 = /*OutputUnit(2, {lib1, lib2})*/ const C(2);
 
 /*element: foo:OutputUnit(1, {lib1})*/
 foo() {
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
index 16ed499..c53f32a 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
@@ -2,16 +2,17 @@
 // for 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 "dont_inline_deferred_constants_main.dart" show C;
 import "dont_inline_deferred_constants_main.dart" as main;
 
 /*element: C4:OutputUnit(3, {lib2})*/
 const C4 = /*OutputUnit(main, {})*/ "string4";
 
 /*element: C5:OutputUnit(3, {lib2})*/
-const C5 = /*OutputUnit(main, {})*/ const main.C(1);
+const C5 = /*OutputUnit(main, {})*/ const C(1);
 
 /*element: C6:OutputUnit(3, {lib2})*/
-const C6 = /*OutputUnit(2, {lib1, lib2})*/ const main.C(2);
+const C6 = /*OutputUnit(2, {lib1, lib2})*/ const C(2);
 
 /*element: foo:OutputUnit(3, {lib2})*/
 foo() {
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
index 8d3ed21..4e781f5 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
@@ -27,7 +27,7 @@
       lib2.foo();
       print(lib1.C1);
       print(lib1.C2);
-      print(lib1.C.C3);
+      print(lib1.D.C3);
       print(c);
       print(lib1.C4);
       print(lib2.C4);
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence.dart b/tests/compiler/dart2js/equivalence/id_equivalence.dart
index 2d0a4ed..d46fd7f 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence.dart
@@ -15,6 +15,7 @@
 
 enum IdKind {
   element,
+  cls,
   node,
   invoke,
   update,
@@ -47,6 +48,9 @@
       case IdKind.element:
         ElementId elementId = id;
         return '$elementPrefix${elementId.name}:$value';
+      case IdKind.cls:
+        ClassId classId = id;
+        return '$classPrefix${classId.name}:$value';
       case IdKind.node:
         return value;
       case IdKind.invoke:
@@ -64,6 +68,7 @@
   }
 
   static const String elementPrefix = "element: ";
+  static const String classPrefix = "class: ";
   static const String invokePrefix = "invoke: ";
   static const String updatePrefix = "update: ";
   static const String iteratorPrefix = "iterator: ";
@@ -79,6 +84,12 @@
       if (colonPos == -1) throw "Invalid element id: '$text'";
       id = new ElementId(text.substring(0, colonPos));
       expected = text.substring(colonPos + 1);
+    } else if (text.startsWith(classPrefix)) {
+      text = text.substring(classPrefix.length);
+      int colonPos = text.indexOf(':');
+      if (colonPos == -1) throw "Invalid class id: '$text'";
+      id = new ClassId(text.substring(0, colonPos));
+      expected = text.substring(colonPos + 1);
     } else if (text.startsWith(invokePrefix)) {
       id = new NodeId(offset, IdKind.invoke);
       expected = text.substring(invokePrefix.length);
@@ -102,8 +113,7 @@
   }
 }
 
-/// Id for an element with type inference information.
-// TODO(johnniwinther): Support local variables, functions and parameters.
+/// Id for an member element.
 class ElementId implements Id {
   final String className;
   final String memberName;
@@ -132,7 +142,28 @@
 
   String get name => className != null ? '$className.$memberName' : memberName;
 
-  String toString() => name;
+  String toString() => 'element:$name';
+}
+
+/// Id for a class.
+class ClassId implements Id {
+  final String className;
+
+  ClassId(this.className);
+
+  int get hashCode => className.hashCode * 13;
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    if (other is! ClassId) return false;
+    return className == other.className;
+  }
+
+  IdKind get kind => IdKind.cls;
+
+  String get name => className;
+
+  String toString() => 'class:$name';
 }
 
 /// Id for a code point with type inference information.
@@ -161,6 +192,15 @@
 
   ActualData(this.value, this.sourceSpan, this.object);
 
+  int get offset {
+    Id id = value.id;
+    if (id is NodeId) {
+      return id.value;
+    } else {
+      return sourceSpan.begin;
+    }
+  }
+
   String toString() =>
       'ActualData(value=$value,sourceSpan=$sourceSpan,object=$object)';
 }
@@ -438,6 +478,7 @@
   visitSendSet(ast.SendSet node) {
     dynamic sendStructure = elements.getSendStructure(node);
     if (sendStructure != null) {
+      outer:
       switch (sendStructure.kind) {
         case SendStructureKind.SET:
           ast.Node position =
@@ -452,8 +493,22 @@
         case SendStructureKind.COMPOUND_INDEX_SET:
         case SendStructureKind.INDEX_PREFIX:
         case SendStructureKind.INDEX_POSTFIX:
-          computeForNode(node, createAccessId(node.selector));
           computeForNode(node, createInvokeId(node.assignmentOperator));
+          switch (sendStructure.semantics.kind) {
+            case AccessKind.UNRESOLVED_SUPER:
+              break outer;
+            case AccessKind.COMPOUND:
+              switch (sendStructure.semantics.compoundAccessKind) {
+                case CompoundAccessKind.SUPER_GETTER_SETTER:
+                case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+                case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+                  break outer;
+                default:
+              }
+              break;
+            default:
+          }
+          computeForNode(node, createAccessId(node.selector));
           computeForNode(node, createUpdateId(node.selector));
           break;
         case SendStructureKind.PREFIX:
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 939543a..24f265c 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -72,6 +72,14 @@
     Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
     {bool verbose});
 
+/// Function that computes a data mapping for [cls].
+///
+/// Fills [actualMap] with the data and [sourceSpanMap] with the source spans
+/// for the data origin.
+typedef void ComputeClassDataFunction(
+    Compiler compiler, ClassEntity cls, Map<Id, ActualData> actualMap,
+    {bool verbose});
+
 const String stopAfterTypeInference = 'stopAfterTypeInference';
 
 /// Compute actual data for all members defined in the program with the
@@ -84,10 +92,10 @@
     ComputeMemberDataFunction computeMemberData,
     {List<String> options: const <String>[],
     bool verbose: false,
-    bool forMainLibraryOnly: true,
+    bool forUserLibrariesOnly: true,
     bool skipUnprocessedMembers: false,
     bool skipFailedCompilations: false,
-    bool forUserSourceFilesOnly: false}) async {
+    ComputeClassDataFunction computeClassData}) async {
   CompilationResult result = await runCompiler(
       entryPoint: entryPoint,
       memorySourceFiles: memorySourceFiles,
@@ -145,22 +153,23 @@
     computeMemberData(compiler, member, actualMapFor(member), verbose: verbose);
   }
 
-  if (forMainLibraryOnly && !forUserSourceFilesOnly) {
-    LibraryEntity mainLibrary = elementEnvironment.mainLibrary;
-    elementEnvironment.forEachClass(mainLibrary, (ClassEntity cls) {
-      if (!elementEnvironment.isEnumClass(cls)) {
-        elementEnvironment.forEachConstructor(cls, processMember);
-      }
-      elementEnvironment.forEachLocalClassMember(cls, processMember);
-    });
-    elementEnvironment.forEachLibraryMember(mainLibrary, processMember);
-  } else if (forUserSourceFilesOnly) {
-    closedWorld.processedMembers
-        .where((MemberEntity member) =>
-            userFiles.contains(member.library.canonicalUri.pathSegments.last))
-        .forEach(processMember);
-  } else {
-    closedWorld.processedMembers.forEach(processMember);
+  bool excludeLibrary(LibraryEntity library) {
+    return forUserLibrariesOnly &&
+        (library.canonicalUri.scheme == 'dart' ||
+            library.canonicalUri.scheme == 'package');
+  }
+
+  if (computeClassData != null) {
+    for (LibraryEntity library in elementEnvironment.libraries) {
+      if (excludeLibrary(library)) continue;
+      elementEnvironment.forEachClass(library, (ClassEntity cls) {
+        computeClassData(compiler, cls, actualMapFor(cls), verbose: verbose);
+      });
+    }
+  }
+  for (MemberEntity member in closedWorld.processedMembers) {
+    if (excludeLibrary(member.library)) continue;
+    processMember(member);
   }
 
   return new CompiledData(compiler, elementEnvironment, entryPoint, actualMaps);
@@ -181,7 +190,7 @@
     thisMap.forEach((Id id, ActualData data1) {
       String value1 = '${data1.value}';
       annotations
-          .putIfAbsent(data1.sourceSpan.begin, () => [])
+          .putIfAbsent(data1.offset, () => [])
           .add(colorizeSingle(value1));
     });
     return annotations;
@@ -197,23 +206,20 @@
       if (data1.value != data2?.value) {
         String value2 = '${data2?.value ?? '---'}';
         annotations
-            .putIfAbsent(data1.sourceSpan.begin, () => [])
+            .putIfAbsent(data1.offset, () => [])
             .add(colorizeDiff(value1, ' | ', value2));
       } else if (includeMatches) {
         annotations
-            .putIfAbsent(data1.sourceSpan.begin, () => [])
+            .putIfAbsent(data1.offset, () => [])
             .add(colorizeMatch(value1));
       }
     });
     otherMap.forEach((Id id, ActualData data2) {
       if (!thisMap.containsKey(id)) {
-        int offset = compiler.reporter
-            .spanFromSpannable(computeSpannable(elementEnvironment, uri, id))
-            .begin;
         String value1 = '---';
         String value2 = '${data2.value}';
         annotations
-            .putIfAbsent(offset, () => [])
+            .putIfAbsent(data2.offset, () => [])
             .add(colorizeDiff(value1, ' | ', value2));
       }
     });
@@ -348,15 +354,16 @@
 /// file and any supporting libraries.
 Future checkTests(Directory dataDir, ComputeMemberDataFunction computeFromAst,
     ComputeMemberDataFunction computeFromKernel,
-    {List<String> skipforAst: const <String>[],
+    {List<String> skipForAst: const <String>[],
     List<String> skipForKernel: const <String>[],
     bool filterActualData(IdValue idValue, ActualData actualData),
     List<String> options: const <String>[],
     List<String> args: const <String>[],
     Directory libDirectory: null,
-    bool forMainLibraryOnly: true,
-    bool forUserSourceFilesOnly: false,
-    Callback setUpFunction}) async {
+    bool forUserLibrariesOnly: true,
+    Callback setUpFunction,
+    ComputeClassDataFunction computeClassDataFromAst,
+    ComputeClassDataFunction computeClassDataFromKernel}) async {
   args = args.toList();
   bool verbose = args.remove('-v');
 
@@ -413,16 +420,16 @@
 
     if (setUpFunction != null) setUpFunction();
 
-    if (skipforAst.contains(name)) {
+    if (skipForAst.contains(name)) {
       print('--skipped for ast-----------------------------------------------');
     } else {
       print('--from ast------------------------------------------------------');
       CompiledData compiledData1 = await computeData(
           entryPoint, memorySourceFiles, computeFromAst,
+          computeClassData: computeClassDataFromAst,
           options: testOptions,
           verbose: verbose,
-          forMainLibraryOnly: forMainLibraryOnly,
-          forUserSourceFilesOnly: forUserSourceFilesOnly);
+          forUserLibrariesOnly: forUserLibrariesOnly);
       await checkCode(code, expectedMaps[astMarker], compiledData1);
     }
     if (skipForKernel.contains(name)) {
@@ -431,10 +438,10 @@
       print('--from kernel---------------------------------------------------');
       CompiledData compiledData2 = await computeData(
           entryPoint, memorySourceFiles, computeFromKernel,
+          computeClassData: computeClassDataFromKernel,
           options: [Flags.useKernel]..addAll(testOptions),
           verbose: verbose,
-          forMainLibraryOnly: forMainLibraryOnly,
-          forUserSourceFilesOnly: forUserSourceFilesOnly);
+          forUserLibrariesOnly: forUserLibrariesOnly);
       await checkCode(code, expectedMaps[kernelMarker], compiledData2,
           filterActualData: filterActualData);
     }
@@ -551,6 +558,14 @@
       }
       return member;
     }
+  } else if (id is ClassId) {
+    LibraryEntity library = elementEnvironment.lookupLibrary(mainUri);
+    ClassEntity cls =
+        elementEnvironment.lookupClass(library, id.className, required: true);
+    if (cls == null) {
+      throw new ArgumentError("No class '${id.className}' in $mainUri.");
+    }
+    return cls;
   }
   throw new UnsupportedError('Unsupported id $id.');
 }
@@ -594,7 +609,7 @@
     ComputeMemberDataFunction computeAstData,
     ComputeMemberDataFunction computeIrData,
     {List<String> options: const <String>[],
-    bool forMainLibraryOnly: true,
+    bool forUserLibrariesOnly: true,
     bool skipUnprocessedMembers: false,
     bool skipFailedCompilations: false,
     bool verbose: false,
@@ -603,7 +618,7 @@
   CompiledData data1 = await computeData(
       entryPoint, memorySourceFiles, computeAstData,
       options: options,
-      forMainLibraryOnly: forMainLibraryOnly,
+      forUserLibrariesOnly: forUserLibrariesOnly,
       skipUnprocessedMembers: skipUnprocessedMembers,
       skipFailedCompilations: skipFailedCompilations);
   if (data1 == null) return false;
@@ -611,13 +626,13 @@
   CompiledData data2 = await computeData(
       entryPoint, memorySourceFiles, computeIrData,
       options: [Flags.useKernel]..addAll(options),
-      forMainLibraryOnly: forMainLibraryOnly,
+      forUserLibrariesOnly: forUserLibrariesOnly,
       skipUnprocessedMembers: skipUnprocessedMembers,
       skipFailedCompilations: skipFailedCompilations);
   if (data2 == null) return false;
   await compareCompiledData(data1, data2,
       whiteList: whiteList,
-      skipMissingUris: !forMainLibraryOnly,
+      skipMissingUris: !forUserLibrariesOnly,
       verbose: verbose);
   return true;
 }
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
index 93646f7..b4441ed 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
@@ -32,6 +32,13 @@
   'closure_tracer.dart',
   'closure_tracer_28919.dart',
   'index_call.dart',
+  'map_tracer_const.dart',
+  // Id equivalence doesn't support libraries.
+  'mixin_constructor_default_parameter_values.dart',
+  // Id equivalence doesn't support unused constructors.
+  'final_field2.dart',
+  // TODO(johnniwinther): Fix ast equivalence on instance fields in for.
+  'field_type.dart',
 ];
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index aa46e75..d37f502 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -19,6 +19,7 @@
   ArgParser argParser = new ArgParser(allowTrailingOptions: true);
   argParser.addFlag('verbose', negatable: true, defaultsTo: false);
   argParser.addFlag('colors', negatable: true);
+  argParser.addFlag('all', negatable: false, defaultsTo: false);
   argParser.addFlag('use-kernel', negatable: false, defaultsTo: false);
   ArgResults argResults = argParser.parse(args);
   if (argResults.wasParsed('colors')) {
@@ -29,12 +30,14 @@
 
   InferrerEngineImpl.useSorterForTesting = true;
   String file = argResults.rest.first;
+  Uri entryPoint = Uri.base.resolve(nativeToUriPath(file));
   List<String> show;
   if (argResults.rest.length > 1) {
     show = argResults.rest.skip(1).toList();
+  } else {
+    show = [entryPoint.pathSegments.last];
   }
 
-  Uri entryPoint = Uri.base.resolve(nativeToUriPath(file));
   List<String> options = <String>[];
   if (useKernel) {
     options.add(Flags.useKernel);
@@ -42,7 +45,7 @@
   CompiledData data = await computeData(
       entryPoint, const {}, useKernel ? computeKernelData : computeAstData,
       options: options,
-      forMainLibraryOnly: false,
+      forUserLibrariesOnly: false,
       skipUnprocessedMembers: true,
       skipFailedCompilations: true,
       verbose: verbose);
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
index 1de091b..ce8349f 100644
--- a/tests/compiler/dart2js/generic_methods/generic_method_test.dart
+++ b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
@@ -20,19 +20,19 @@
 test(o) => o is double || o is String || o is int;
 
 @noInline
-genericMethod1<T>(T t) {
+method1<T>(T t) {
   test(t);
-  print('genericMethod1:');
+  print('method1:');
   print('$t is $T = ${t is T}');
   print('"foo" is $T = ${"foo" is T}');
   print('');
 }
 
 @noInline
-genericMethod2<T, S>(S s, T t) {
+method2<T, S>(S s, T t) {
   test(t);
   test(s);
-  print('genericMethod2:');
+  print('method2:');
   print('$t is $T = ${t is T}');
   print('$s is $T = ${s is T}');
   print('$t is $S = ${t is S}');
@@ -41,10 +41,10 @@
 }
 
 @tryInline
-genericMethod3<T, S>(T t, S s) {
+method3<T, S>(T t, S s) {
   test(t);
   test(s);
-  print('genericMethod3:');
+  print('method3:');
   print('$t is $T = ${t is T}');
   print('$s is $T = ${s is T}');
   print('$t is $S = ${t is S}');
@@ -52,30 +52,118 @@
   print('');
 }
 
-main() {
-  genericMethod1<int>(0);
-  genericMethod2<String, double>(0.5, 'foo');
-  genericMethod3<double, String>(1.5, 'bar');
+class Class1<T> {
+  final int index;
+
+  Class1(this.index);
+
+  String toString() => 'c$index';
+}
+
+method4<T>(int index) => new Class1<T>(index);
+
+testMethod4() {
+  print('method4:');
+  var c1 = method4<int>(1);
+  var c2 = method4<String>(2);
+  print('$c1 is Class1<int> = ${c1 is Class1<int>}');
+  print('$c2 is Class1<int> = ${c2 is Class1<int>}');
+  print('$c1 is Class1<String> = ${c1 is Class1<String>}');
+  print('$c2 is Class1<String> = ${c2 is Class1<String>}');
+  print('');
+}
+
+class Class2 {
+  @tryInline
+  method5<T>(T t) {
+    test(t);
+    print('Class2.method5:');
+    print('$t is $T = ${t is T}');
+    print('"foo" is $T = ${"foo" is T}');
+    print('');
+  }
+
+  @noInline
+  method6(o) {
+    print('Class2.method6:');
+    print('$o is int = ${o is int}');
+    print('$o is String = ${o is String}');
+    print('');
+  }
+}
+
+class Class3 {
+  @noInline
+  method6<T>(T t) {
+    test(t);
+    print('Class3.method6:');
+    print('$t is $T = ${t is T}');
+    print('"foo" is $T = ${"foo" is T}');
+    print('');
+  }
+}
+
+main(args) {
+  method1<int>(0);
+  method2<String, double>(0.5, 'foo');
+  method3<double, String>(1.5, 'bar');
+  testMethod4();
+  new Class2().method5<int>(0);
+  new Class3().method6<int>(0);
+  dynamic c3 = args != null ? new Class3() : new Class2();
+  c3.method6(0); // Missing type arguments.
+  try {
+    dynamic c2 = args == null ? new Class3() : new Class2();
+    c2.method6(0); // Valid call.
+    c2.method6<int>(0); // Extra type arguments.
+  } catch (e) {
+    print('noSuchMethod: Class2.method6<int>');
+    print('');
+  }
 }
 ''';
 
 const String OUTPUT = r'''
-genericMethod1:
+method1:
 0 is int = true
 "foo" is int = false
 
-genericMethod2:
+method2:
 foo is String = true
 0.5 is String = false
 foo is double = false
 0.5 is double = true
 
-genericMethod3:
+method3:
 1.5 is double = true
 bar is double = false
 1.5 is String = false
 bar is String = true
 
+method4:
+c1 is Class1<int> = true
+c2 is Class1<int> = false
+c1 is Class1<String> = false
+c2 is Class1<String> = true
+
+Class2.method5:
+0 is int = true
+"foo" is int = false
+
+Class3.method6:
+0 is int = true
+"foo" is int = false
+
+Class3.method6:
+0 is dynamic = true
+"foo" is dynamic = true
+
+Class2.method6:
+0 is int = true
+0 is String = false
+
+noSuchMethod: Class2.method6<int>
+
 ''';
 
 main(List<String> args) {
@@ -88,16 +176,28 @@
     ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
 
-    void checkMethod(String name, int expectedParameterCount) {
-      FunctionEntity function = elementEnvironment.lookupLibraryMember(
-          elementEnvironment.mainLibrary, name);
-      Expect.isNotNull(function, "Method '$name' not found.");
-      js.Fun fun = compiler.backend.generatedCode[function];
+    void checkMethod(String methodName,
+        {String className, int expectedParameterCount}) {
+      FunctionEntity method;
+      if (className != null) {
+        ClassEntity cls = elementEnvironment.lookupClass(
+            elementEnvironment.mainLibrary, className);
+        Expect.isNotNull(cls, "Class '$className' not found.");
+        method = elementEnvironment.lookupClassMember(cls, methodName);
+        Expect.isNotNull(method, "Method '$methodName' not found in $cls.");
+      } else {
+        method = elementEnvironment.lookupLibraryMember(
+            elementEnvironment.mainLibrary, methodName);
+        Expect.isNotNull(method, "Method '$methodName' not found.");
+      }
+      js.Fun fun = compiler.backend.generatedCode[method];
       Expect.equals(expectedParameterCount, fun.params.length,
-          "Unexpected parameter count for $function:\n${js.nodeToString(fun)}");
+          "Unexpected parameter count for $method:\n${js.nodeToString(fun)}");
     }
 
-    checkMethod('genericMethod1', 2);
-    checkMethod('genericMethod2', 4);
+    checkMethod('method1', expectedParameterCount: 2);
+    checkMethod('method2', expectedParameterCount: 4);
+    checkMethod('method6', className: 'Class2', expectedParameterCount: 1);
+    checkMethod('method6', className: 'Class3', expectedParameterCount: 2);
   });
 }
diff --git a/tests/compiler/dart2js/generic_methods/world_test.dart b/tests/compiler/dart2js/generic_methods/world_test.dart
new file mode 100644
index 0000000..77af52d
--- /dev/null
+++ b/tests/compiler/dart2js/generic_methods/world_test.dart
@@ -0,0 +1,112 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/universe/call_structure.dart';
+import 'package:compiler/src/universe/world_builder.dart';
+import 'package:expect/expect.dart';
+
+import '../memory_compiler.dart';
+
+const String code = r'''
+import 'package:meta/dart2js.dart';
+
+class Class1 {
+  @noInline
+  method1<T>() {}
+
+  @noInline
+  method2<T>() {}
+
+  @noInline
+  method3<T>() {}
+
+  @noInline
+  method4<T>() {}
+
+  @noInline
+  method5<T>() {}
+}
+
+class Class2 {}
+
+class Class3 implements Class1 {
+  @noInline
+  method1<T>() {}
+
+  @noInline
+  method2<T>() {}
+
+  @noInline
+  method3<T>() {}
+
+  @noInline
+  method4<T>() {}
+
+  @noInline
+  method5<T>() {}
+}
+
+main(args) {
+  dynamic c1 = args != null ? new Class1() : new Class2();
+  c1.method1(); // No type arguments are inferred here.
+
+  dynamic c2 = args != null ? new Class1() : new Class2();
+  c2.method2<int>();
+
+  var c3 = args != null ? new Class1() : new Class3();
+  c3.method3(); // Type arguments are inferred here.
+
+  var c4 = args != null ? new Class1() : new Class3();
+  c4.method4<int>();
+
+  dynamic c5 = args != null ? new Class1() : new Class2();
+  c5.method5(); // No type arguments are inferred here.
+
+  var c6 = args != null ? new Class1() : new Class3();
+  c6.method5();  // Type arguments are inferred here.
+}
+''';
+
+main() {
+  asyncTest(() async {
+    CompilationResult result = await runCompiler(
+        memorySourceFiles: {'main.dart': code},
+        options: [Flags.useKernel, Flags.strongMode]);
+    Expect.isTrue(result.isSuccess);
+    Compiler compiler = result.compiler;
+    CodegenWorldBuilder worldBuilder = compiler.codegenWorldBuilder;
+
+    CallStructure noTypeArguments = new CallStructure(0, [], 0);
+    CallStructure oneTypeArgument = new CallStructure(0, [], 1);
+
+    Iterable<CallStructure> getCallStructures(String name) {
+      return worldBuilder
+              .invocationsByName(name)
+              ?.keys
+              ?.map((s) => s.callStructure) ??
+          [];
+    }
+
+    void checkInvocationsFor(
+        String methodName, List<CallStructure> expectedCallStructures) {
+      Iterable<CallStructure> actualCallStructures =
+          getCallStructures(methodName);
+      Expect.setEquals(
+          expectedCallStructures,
+          actualCallStructures,
+          "Unexpected call structures for '$methodName'. "
+          "Expected ${expectedCallStructures}, "
+          "actual ${actualCallStructures}.");
+    }
+
+    checkInvocationsFor('method1', [noTypeArguments]);
+    checkInvocationsFor('method2', [oneTypeArgument]);
+    checkInvocationsFor('method3', [oneTypeArgument]);
+    checkInvocationsFor('method4', [oneTypeArgument]);
+    checkInvocationsFor('method5', [noTypeArguments, oneTypeArgument]);
+  });
+}
diff --git a/tests/compiler/dart2js/inference/data/and_or.dart b/tests/compiler/dart2js/inference/data/and_or.dart
new file mode 100644
index 0000000..e1b9c27
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/and_or.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.
+
+/*element: X.:[exact=X]*/
+class X {}
+
+/*element: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn1() {
+  var a;
+  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
+      ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+  return a;
+}
+
+/*element: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn2() {
+  var a;
+  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
+      ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+  return a;
+}
+
+/*element: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn3() {
+  var a;
+  a = a == 54 ? 'foo' : 31;
+  return a;
+}
+
+/*element: returnDyn4:Union([exact=JSUInt31], [exact=X])*/
+returnDyn4() {
+  var a;
+  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
+      ((a = new X()) /*invoke: [exact=X]*/ == true);
+  return a;
+}
+
+/*element: returnDyn5:Union([exact=JSUInt31], [exact=X])*/
+returnDyn5() {
+  var a;
+  ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
+      ((a = new X()) /*invoke: [exact=X]*/ == true);
+  return a;
+}
+
+/*element: returnDyn6:Union([exact=JSString], [exact=X])*/
+returnDyn6() {
+  var a;
+  a = a == 54 ? 'foo' : new X();
+  return a;
+}
+
+/*element: returnDyn7b:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn7b(
+    /*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+  return x;
+}
+
+/*element: returnDyn7:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn7() {
+  dynamic a = "foo";
+  if (a. /*Value([exact=JSString], value: "foo")*/ length
+      /*invoke: [subclass=JSInt]*/ ==
+      3) {
+    a = 52;
+  }
+  if ((a is int) || (a is String && true)) returnDyn7b(a);
+  return a;
+}
+
+/*element: returnDyn8:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn8(
+    /*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+  return x;
+}
+
+/*element: test8:Union([exact=JSUInt31], [null|exact=JSString])*/ test8() {
+  dynamic a = "foo";
+  if (a. /*Value([exact=JSString], value: "foo")*/ length
+      /*invoke: [subclass=JSInt]*/ ==
+      3) {
+    a = 52;
+  }
+  // ignore: dead_code
+  if ((false && a is! String) || returnDyn8(a)) return a;
+}
+
+/*element: returnDyn9:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn9(
+    /*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+  return x;
+}
+
+/*element: test9:[null]*/
+test9() {
+  dynamic a = "foo";
+  if (a. /*Value([exact=JSString], value: "foo")*/ length
+      /*invoke: [subclass=JSInt]*/ ==
+      3) {
+    a = 52;
+  }
+  if (!(a is bool && a is bool)) returnDyn9(a);
+}
+
+/*element: returnString:[exact=JSString]*/ returnString(
+        /*[exact=JSString]*/ x) =>
+    x;
+
+/*element: test10:[null]*/
+test10() {
+  dynamic a = "foo";
+  if (a. /*Value([exact=JSString], value: "foo")*/ length
+      /*invoke: [subclass=JSInt]*/ ==
+      3) {
+    a = 52;
+  }
+  if (!(a is num) && a is String) returnString(a);
+}
+
+/*element: main:[null]*/
+main() {
+  returnDyn1();
+  returnDyn2();
+  returnDyn3();
+  returnDyn4();
+  returnDyn5();
+  returnDyn6();
+  returnDyn7();
+  test8();
+  test9();
+  test10();
+}
diff --git a/tests/compiler/dart2js/inference/data/closure2.dart b/tests/compiler/dart2js/inference/data/closure2.dart
new file mode 100644
index 0000000..285ff02
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closure2.dart
@@ -0,0 +1,135 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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: returnInt1:[exact=JSUInt31]*/
+returnInt1() {
+  var a = 42;
+  // ignore: unused_local_variable
+  var f = /*[exact=JSUInt31]*/ () {
+    return a;
+  };
+  return a;
+}
+
+/*element: returnDyn1:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+returnDyn1() {
+  dynamic a = 42;
+  // ignore: unused_local_variable
+  var f = /*[null]*/ () {
+    a = {};
+  };
+  return a;
+}
+
+/*element: returnInt2:[exact=JSUInt31]*/
+returnInt2() {
+  var a = 42;
+  // ignore: unused_local_variable
+  var f = /*[null]*/ () {
+    a = 54;
+  };
+  return a;
+}
+
+/*element: returnDyn2:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+returnDyn2() {
+  dynamic a = 42;
+  // ignore: unused_local_variable
+  var f = /*[null]*/ () {
+    a = 54;
+  };
+  // ignore: unused_local_variable
+  var g = /*[null]*/ () {
+    a = {};
+  };
+  return a;
+}
+
+/*element: returnInt3:[exact=JSUInt31]*/
+returnInt3() {
+  var a = 42;
+  if (a /*invoke: [exact=JSUInt31]*/ == 53) {
+    // ignore: unused_local_variable
+    var f = /*[exact=JSUInt31]*/ () {
+      return a;
+    };
+  }
+  return a;
+}
+
+/*element: returnDyn3:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+returnDyn3() {
+  dynamic a = 42;
+  if (a /*invoke: Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/ == 53) {
+    // ignore: unused_local_variable
+    var f = /*[null]*/ () {
+      a = {};
+    };
+  }
+  return a;
+}
+
+/*element: returnInt4:[exact=JSUInt31]*/
+returnInt4() {
+  var a = 42;
+  /*[exact=JSUInt31]*/ g() {
+    return a;
+  }
+
+  return g();
+}
+
+/*element: returnNum1:Union([exact=JSDouble], [exact=JSUInt31])*/
+returnNum1() {
+  dynamic a = 42.5;
+  try {
+    /*[exact=JSUInt31]*/ g() {
+      dynamic b = {};
+      b = 42;
+      return b;
+    }
+
+    a = g();
+  } finally {}
+  return a;
+}
+
+/*element: returnIntOrNull:[null|exact=JSUInt31]*/
+returnIntOrNull() {
+  /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+  /*current: [exact=ArrayIterator]*/
+  /*moveNext: [exact=ArrayIterator]*/
+  for (
+      // ignore: unused_local_variable
+      var b in [42]) {
+    var bar = 42;
+    /*[null|exact=JSUInt31]*/ f() => bar;
+    bar = null;
+    return f();
+  }
+  return 42;
+}
+
+/*element: A.:[exact=A]*/
+class A {
+  /*element: A.foo:[exact=A]*/
+  foo() {
+    /*[exact=A]*/ f() => this;
+    return f();
+  }
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt1();
+  returnDyn1();
+  returnInt2();
+  returnDyn2();
+  returnInt3();
+  returnDyn3();
+  returnInt4();
+  returnNum1();
+  returnIntOrNull();
+  new A(). /*invoke: [exact=A]*/ foo();
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure.dart b/tests/compiler/dart2js/inference/data/const_closure.dart
new file mode 100644
index 0000000..137c2b7
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure.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.
+
+/*element: method1:[exact=JSUInt31]*/
+method1() {
+  return 42;
+}
+
+/*element: method2:[exact=JSUInt31]*/
+method2(/*[exact=JSUInt31]*/ a) {
+  // Called only via [foo2] with a small integer.
+  return a;
+}
+
+/*element: foo1:[subclass=Closure]*/
+const foo1 = method1;
+
+/*element: foo2:[subclass=Closure]*/
+const foo2 = method2;
+
+/*element: returnInt1:[null|subclass=Object]*/
+returnInt1() {
+  return foo1();
+}
+
+/*element: returnInt2:[null|subclass=Object]*/
+returnInt2() {
+  return foo2(54);
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt1();
+  returnInt2();
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure2.dart b/tests/compiler/dart2js/inference/data/const_closure2.dart
new file mode 100644
index 0000000..26b76ff
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure2.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.
+
+/*element: method:Union([exact=JSDouble], [exact=JSUInt31])*/
+// Called via [foo] with integer then double.
+method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
+  return a;
+}
+
+/*element: foo:[subclass=Closure]*/
+const foo = method;
+
+/*element: returnNum:[null|subclass=Object]*/
+returnNum(/*Union([exact=JSDouble], [exact=JSUInt31])*/ x) {
+  return foo(x);
+}
+
+/*element: main:[null]*/
+main() {
+  returnNum(10);
+  returnNum(10.5);
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure3.dart b/tests/compiler/dart2js/inference/data/const_closure3.dart
new file mode 100644
index 0000000..74b97a0
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure3.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: method:[exact=JSUInt31]*/
+// Called only via [foo2] with a small integer.
+method(/*[exact=JSUInt31]*/ a) {
+  return a;
+}
+
+/*element: foo:[subclass=Closure]*/
+const foo = method;
+
+/*element: returnInt:[null|subclass=Object]*/
+returnInt() {
+  return foo(54);
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt();
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure4.dart b/tests/compiler/dart2js/inference/data/const_closure4.dart
new file mode 100644
index 0000000..26b76ff
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure4.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.
+
+/*element: method:Union([exact=JSDouble], [exact=JSUInt31])*/
+// Called via [foo] with integer then double.
+method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
+  return a;
+}
+
+/*element: foo:[subclass=Closure]*/
+const foo = method;
+
+/*element: returnNum:[null|subclass=Object]*/
+returnNum(/*Union([exact=JSDouble], [exact=JSUInt31])*/ x) {
+  return foo(x);
+}
+
+/*element: main:[null]*/
+main() {
+  returnNum(10);
+  returnNum(10.5);
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure5.dart b/tests/compiler/dart2js/inference/data/const_closure5.dart
new file mode 100644
index 0000000..3055295
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure5.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.
+
+/*element: method:Union([exact=JSDouble], [exact=JSUInt31])*/
+// Called only via [foo2] with a small integer.
+method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
+  return a;
+}
+
+/*element: foo:[subclass=Closure]*/
+const foo = method;
+
+/*element: returnInt:[null|subclass=Object]*/
+returnInt() {
+  return foo(54);
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt();
+  method(55.2);
+}
diff --git a/tests/compiler/dart2js/inference/data/const_closure_default.dart b/tests/compiler/dart2js/inference/data/const_closure_default.dart
new file mode 100644
index 0000000..3217dcb
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/const_closure_default.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.
+
+// [defaultFn_i] is called only via [foo_i]'s default value with a small integer.
+
+/*element: defaultFn1:[exact=JSUInt31]*/
+defaultFn1(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: defaultFn2:[exact=JSUInt31]*/
+defaultFn2(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: defaultFn3:[exact=JSUInt31]*/
+defaultFn3(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: defaultFn4:[exact=JSUInt31]*/
+defaultFn4(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: defaultFn5:[exact=JSUInt31]*/
+defaultFn5(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: defaultFn6:[exact=JSUInt31]*/
+defaultFn6(/*[exact=JSUInt31]*/ a) => a;
+
+/*element: foo1:[null|subclass=Object]*/
+foo1([/*[subclass=Closure]*/ fn = defaultFn1]) => fn(54);
+
+/*element: foo2:[null|subclass=Object]*/
+foo2({/*[subclass=Closure]*/ fn: defaultFn2}) => fn(54);
+
+/*element: foo3:[null|subclass=Object]*/
+foo3([/*[subclass=Closure]*/ fn = defaultFn3]) => fn(54);
+
+/*element: foo4:[null|subclass=Object]*/
+foo4({/*[subclass=Closure]*/ fn: defaultFn4}) => fn(54);
+
+/*element: foo5:[null|subclass=Object]*/
+foo5([/*[null|subclass=Object]*/ fn = defaultFn5]) => fn(54);
+
+/*element: foo6:[null|subclass=Object]*/
+foo6({/*[null|subclass=Object]*/ fn: defaultFn6}) => fn(54);
+
+/*element: main:[null]*/
+main() {
+  // Direct calls.
+  foo1();
+  foo2();
+  // Indirect calls.
+  (foo3)();
+  (foo4)();
+  // Calls via Function.apply.
+  Function.apply(foo5, []);
+  Function.apply(foo6, []);
+}
diff --git a/tests/compiler/dart2js/inference/data/field_type.dart b/tests/compiler/dart2js/inference/data/field_type.dart
new file mode 100644
index 0000000..6936a0e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/field_type.dart
@@ -0,0 +1,767 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+  test9();
+  test10();
+  test11();
+  test12();
+  test13();
+  test14();
+  test15();
+  test16();
+  test17();
+  test18();
+  test19();
+  test20();
+  test21();
+  test22();
+  test23();
+  test24();
+  test25();
+  test26();
+  test27();
+  test28();
+  test29();
+  test30();
+}
+
+/*element: A1.:[exact=A1]*/
+class A1 {
+  /*element: A1.f1:[null]*/
+  int f1;
+}
+
+/*element: test1:[null]*/
+test1() {
+  new A1();
+}
+
+/*element: A2.:[exact=A2]*/
+class A2 {
+  /*element: A2.f2a:[null]*/
+  int f2a;
+
+  /*element: A2.f2b:[exact=JSUInt31]*/
+  int f2b = 1;
+}
+
+/*element: test2:[null]*/
+test2() {
+  new A2();
+}
+
+class A3 {
+  /*element: A3.f3a:[exact=JSUInt31]*/
+  int f3a;
+
+  /*element: A3.f3b:[null|exact=JSUInt31]*/
+  int f3b;
+
+  /*element: A3.:[exact=A3]*/
+  A3() : f3a = 1;
+}
+
+/*element: test3:[null]*/
+test3() {
+  new A3(). /*update: [exact=A3]*/ f3b = 2;
+}
+
+class A4 {
+  /*element: A4.f4a:Union([exact=JSString], [exact=JSUInt31])*/
+  dynamic f4a;
+
+  /*element: A4.f4b:Value([null|exact=JSString], value: "a")*/
+  dynamic f4b;
+
+  /*element: A4.:[exact=A4]*/
+  A4() : f4a = 1;
+}
+
+/*element: test4:[null]*/
+test4() {
+  A4 a = new A4();
+  a. /*update: [exact=A4]*/ f4a = "a";
+  a. /*update: [exact=A4]*/ f4b = "a";
+}
+
+class A5 {
+  /*element: A5.f5a:Union([exact=JSString], [exact=JSUInt31])*/
+  dynamic f5a = 1;
+
+  /*element: A5.f5b:Union([exact=JSString], [exact=JSUInt31])*/
+  dynamic f5b = 1;
+
+  /*element: A5.:[exact=A5]*/
+  A5(/*[exact=JSBool]*/ x) {
+    /*update: [exact=A5]*/ f5a = "1";
+    if (x) {
+      /*update: [exact=A5]*/ f5b = "1";
+    } else {
+      /*update: [exact=A5]*/ f5b = "2";
+    }
+  }
+}
+
+/*element: test5:[null]*/
+test5() {
+  new A5(true);
+  new A5(false);
+}
+
+class A6 {
+  /*element: A6.f6a:Union([exact=JSString], [exact=JSUInt31])*/
+  dynamic f6a = 1;
+
+  /*element: A6.f6b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  dynamic f6b = 1;
+
+  /*element: A6.:[exact=A6]*/
+  A6(/*[exact=JSBool]*/ x) {
+    /*update: [exact=A6]*/ f6a = "1";
+    if (x) {
+      /*update: [exact=A6]*/ f6b = "1";
+    } else {
+      /*update: [exact=A6]*/ f6b = "2";
+    }
+    if (x) {
+      /*update: [exact=A6]*/ f6b = new List();
+    } else {
+      /*update: [exact=A6]*/ f6b = new List();
+    }
+  }
+}
+
+/*element: test6:[null]*/
+test6() {
+  new A6(true);
+  new A6(false);
+}
+
+class A7 {
+  /*element: A7.f7a:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  dynamic f7a = 1;
+
+  /*element: A7.f7b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+  dynamic f7b = 1;
+
+  /*element: A7.:[exact=A7]*/
+  A7(/*[exact=JSBool]*/ x) {
+    /*update: [exact=A7]*/ f7a = "1";
+    if (x) {
+      /*update: [exact=A7]*/ f7b = "1";
+    } else {
+      /*update: [exact=A7]*/ f7b = "2";
+    }
+    if (x) {
+      /*update: [exact=A7]*/ f7a = new List();
+      /*update: [exact=A7]*/ f7b = new List();
+    } else {
+      /*update: [exact=A7]*/ f7b = new List();
+    }
+  }
+}
+
+/*element: test7:[null]*/
+test7() {
+  new A7(true);
+  new A7(false);
+}
+
+class A8 {
+  /*element: A8.f8:Value([null|exact=JSString], value: "1")*/
+  dynamic f8;
+
+  /*element: A8.:[exact=A8]*/
+  A8(/*[exact=JSBool]*/ x) {
+    if (x) {
+      /*update: [exact=A8]*/ f8 = "1";
+    } else {}
+  }
+}
+
+/*element: test8:[null]*/
+test8() {
+  new A8(true);
+  new A8(false);
+}
+
+class A9 {
+  /*element: A9.f9:Value([null|exact=JSString], value: "1")*/
+  dynamic f9;
+
+  /*element: A9.:[exact=A9]*/
+  A9(/*[exact=JSBool]*/ x) {
+    if (x) {} else {
+      /*update: [exact=A9]*/ f9 = "1";
+    }
+  }
+}
+
+/*element: test9:[null]*/
+test9() {
+  new A9(true);
+  new A9(false);
+}
+
+class A10 {
+  /*element: A10.f10:[exact=JSUInt31]*/
+  int f10;
+
+  /*element: A10.:[exact=A10]*/
+  A10() {
+    /*update: [exact=A10]*/ f10 = 1;
+  }
+  /*element: A10.m10:[subclass=JSUInt32]*/
+  m10() => /*[exact=A10]*/ f10 /*invoke: [exact=JSUInt31]*/ + 1;
+}
+
+/*element: f10:[null]*/
+void f10(/*[null]*/ x) {
+  x. /*update: [null]*/ f10 = "2";
+}
+
+/*element: test10:[null]*/
+test10() {
+  A10 a;
+  f10(a);
+  a = new A10();
+  a. /*invoke: [exact=A10]*/ m10();
+}
+
+/*element: S11.:[exact=S11]*/
+class S11 {
+  /*element: S11.fs11:[exact=JSUInt31]*/
+  int fs11 = 1;
+
+  /*element: S11.ms11:[null]*/
+  ms11() {
+    /*update: [exact=A11]*/ fs11 = 1;
+  }
+}
+
+/*element: A11.:[exact=A11]*/
+class A11 extends S11 {
+  /*element: A11.m11:[null]*/
+  m11() {
+    /*invoke: [exact=A11]*/ ms11();
+  }
+}
+
+/*element: test11:[null]*/
+test11() {
+  A11 a = new A11();
+  a. /*invoke: [exact=A11]*/ m11();
+}
+
+class S12 {
+  /*element: S12.fs12:Union([exact=JSString], [exact=JSUInt31])*/
+  dynamic fs12 = 1;
+
+  /*element: S12.:[exact=S12]*/
+  S12() {
+    /*update: [exact=A12]*/ fs12 = "2";
+  }
+}
+
+/*element: A12.:[exact=A12]*/
+class A12 extends S12 {}
+
+/*element: test12:[null]*/
+test12() {
+  new A12();
+}
+
+class S13 {
+/*element: S13.fs13:[exact=JSUInt31]*/
+  int fs13;
+
+  /*element: S13.:[exact=S13]*/
+  S13() {
+    /*update: [exact=A13]*/ fs13 = 1;
+  }
+}
+
+class A13 extends S13 {
+  /*element: A13.:[exact=A13]*/
+  A13() {
+    /*update: [exact=A13]*/ fs13 = 1;
+  }
+}
+
+/*element: test13:[null]*/
+test13() {
+  new A13();
+}
+
+class A14 {
+  /*element: A14.f14:[exact=JSUInt31]*/
+  var f14;
+
+  /*element: A14.:[exact=A14]*/
+  A14() {
+    /*update: [exact=A14]*/ f14 = 1;
+  }
+  /*element: A14.other:[exact=A14]*/
+  A14.other() {
+    /*update: [exact=A14]*/ f14 = 2;
+  }
+}
+
+/*element: test14:[null]*/
+test14() {
+  // ignore: unused_local_variable
+  A14 a = new A14();
+  a = new A14.other();
+}
+
+class A15 {
+  /*element: A15.f15:Union([exact=JSExtendableArray], [exact=JSString])*/
+  var f15;
+
+  /*element: A15.:[exact=A15]*/
+  A15() {
+    /*update: [exact=A15]*/ f15 = "1";
+  }
+
+  /*element: A15.other:[exact=A15]*/
+  A15.other() {
+    /*update: [exact=A15]*/ f15 = new List();
+  }
+}
+
+/*element: test15:[null]*/
+test15() {
+  // ignore: unused_local_variable
+  A15 a = new A15();
+  a = new A15.other();
+}
+
+class A16 {
+  // TODO(johnniwinther): Investigate with these differ.
+  /*ast.element: A16.f16:Union([exact=JSString], [exact=JSUInt31])*/
+  /*kernel.element: A16.f16:Union([exact=JSString], [null|exact=JSUInt31])*/
+  var f16;
+
+  /*element: A16.:[exact=A16]*/
+  A16() {
+    /*update: [exact=A16]*/ f16 = "1";
+  }
+
+  /*element: A16.other:[exact=A16]*/
+  A16.other() : f16 = 1 {}
+}
+
+/*element: test16:[null]*/
+test16() {
+  // ignore: unused_local_variable
+  A16 a = new A16();
+  a = new A16.other();
+}
+
+/*element: g17:[exact=JSUInt31]*/
+g17([/*[exact=A17]*/ p]) => p. /*update: [exact=A17]*/ f17 = 1;
+
+class A17 {
+/*element: A17.f17:[null|exact=JSUInt31]*/
+  var f17;
+
+  /*element: A17.:[exact=A17]*/
+  A17(/*[exact=JSBool]*/ x) {
+    var a;
+    if (x) {
+      a = this;
+    } else {
+      a = g17;
+    }
+    a(this);
+  }
+}
+
+/*element: test17:[null]*/
+test17() {
+  new A17(true);
+  new A17(false);
+}
+
+class A18 {
+  /*element: A18.f18a:[exact=JSUInt31]*/
+  var f18a;
+
+  /*element: A18.f18b:Value([exact=JSString], value: "1")*/
+  var f18b;
+
+  /*element: A18.f18c:Union([exact=JSUInt31], [null|exact=A18])*/
+  var f18c;
+
+  /*element: A18.:[exact=A18]*/
+  A18(/*[exact=JSBool]*/ x) {
+    /*update: [exact=A18]*/ f18a = 1;
+    var a;
+    if (x) {
+      /*update: [exact=A18]*/ f18b = "1";
+      a = this;
+    } else {
+      a = 1;
+      /*update: [exact=A18]*/ f18b = "1";
+    }
+    /*update: [exact=A18]*/ f18c = a;
+  }
+}
+
+/*element: test18:[null]*/
+test18() {
+  new A18(true);
+  new A18(false);
+}
+
+class A19 {
+  /*element: A19.f19a:[exact=JSUInt31]*/
+  var f19a;
+
+  /*element: A19.f19b:Value([exact=JSString], value: "1")*/
+  var f19b;
+
+  /*element: A19.f19c:Union([exact=JSUInt31], [null|exact=A19])*/
+  var f19c;
+
+  /*element: A19.:[exact=A19]*/
+  A19(/*[exact=JSBool]*/ x) {
+    /*update: [exact=A19]*/ f19a = 1;
+    var a;
+    if (x) {
+      /*update: [exact=A19]*/ f19b = "1";
+      a = this;
+    } else {
+      a = 1;
+      /*update: [exact=A19]*/ f19b = "1";
+    }
+    /*update: [exact=A19]*/ f19c = a;
+    a();
+  }
+}
+
+/*element: test19:[null]*/
+test19() {
+  new A19(true);
+  new A19(false);
+}
+
+class A20 {
+  /*element: A20.f20:[null|exact=JSUInt31]*/
+  var f20;
+
+  /*element: A20.:[exact=A20]*/
+  A20() {
+    // TODO(johnniwinther): Fix ast equivalence on instance fields in for.
+    /*iterator: [exact=A20]*/
+    /*current: [exact=A20]*/
+    /*moveNext: [exact=A20]*/
+    for (/*kernel.update: [exact=A20]*/ f20 in
+        // ignore: for_in_of_invalid_type
+        this) {}
+  }
+
+  /*element: A20.iterator:[exact=A20]*/
+  get iterator => this;
+
+  /*element: A20.current:[exact=JSUInt31]*/
+  get current => 42;
+
+  /*element: A20.moveNext:Value([exact=JSBool], value: false)*/
+  bool moveNext() => false;
+}
+
+/*element: test20:[null]*/
+test20() {
+  new A20();
+}
+
+class A21 {
+  /*element: A21.f21:[null|exact=JSUInt31]*/
+  var f21;
+
+  /*element: A21.:[exact=A21]*/
+  A21() {
+    /*iterator: [exact=A21]*/
+    /*current: [null]*/
+    /*moveNext: [null]*/
+    for (
+        // ignore: unused_local_variable
+        var i
+        // ignore: for_in_of_invalid_type
+        in this) {}
+    /*update: [exact=A21]*/ f21 = 42;
+  }
+  /*element: A21.iterator:[null]*/
+  get iterator => null;
+}
+
+/*element: test21:[null]*/
+test21() {
+  new A21();
+}
+
+class A22 {
+  /*element: A22.f22a:[exact=JSUInt31]*/
+  var f22a;
+
+  /*element: A22.f22b:[exact=JSUInt31]*/
+  var f22b;
+
+  /*element: A22.f22c:Value([null|exact=JSString], value: "foo")*/
+  var f22c;
+
+  /*element: A22.:[exact=A22]*/
+  A22() {
+    /*update: [exact=A22]*/ f22a = 42;
+    /*update: [exact=A22]*/ f22b = /*[exact=A22]*/ f22a == null
+        ? 42
+        : /*[exact=A22]*/ f22c == null ? 41 : 43;
+    /*update: [exact=A22]*/ f22c = 'foo';
+  }
+}
+
+/*element: test22:[null]*/
+test22() {
+  new A22();
+}
+
+class A23 {
+  /*element: A23.f23a:[null|exact=JSUInt31]*/
+  var f23a = 42;
+
+  /*element: A23.f23b:[null|exact=JSUInt31]*/
+  var f23b = 42;
+
+  /*element: A23.f23c:[null|exact=JSUInt31]*/
+  var f23c = 42;
+
+  /*element: A23.f23d:[null|exact=JSUInt31]*/
+  var f23d = 42;
+
+  /*element: A23.:[exact=A23]*/
+  A23() {
+    // Test string interpolation.
+    '${/*update: [exact=A23]*/f23a = null}';
+    // Test string juxtaposition.
+    ''
+        '${/*update: [exact=A23]*/f23b = null}';
+    // Test list literal.
+    [/*update: [exact=A23]*/ f23c = null];
+    // Test map literal.
+    // ignore: unused_local_variable
+    var c = {'foo': /*update: [exact=A23]*/ f23d = null};
+  }
+}
+
+/*element: test23:[null]*/
+test23() {
+  new A23();
+}
+
+class A24 {
+  /*element: A24.f24a:[subclass=JSPositiveInt]*/
+  var f24a = 42;
+
+  /*element: A24.f24b:[subclass=JSPositiveInt]*/
+  var f24b = 42;
+
+  /*element: A24.f24c:[exact=JSUInt31]*/
+  var f24c = 42;
+
+  /*element: A24.f24d:[exact=JSUInt31]*/
+  final f24d;
+
+  /*element: A24.f24e:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+  var f24e;
+
+/*element: A24.f24f:Value([null|exact=JSString], value: "foo")*/
+  var f24f = null;
+
+  /*element: A24.:[exact=A24]*/
+  A24() : f24d = 42 {
+    /*[subclass=A24]*/ /*update: [subclass=A24]*/ f24a
+        /*invoke: [subclass=JSPositiveInt]*/ ++;
+    /*[subclass=A24]*/ /*update: [subclass=A24]*/ f24b
+        /*invoke: [subclass=JSPositiveInt]*/ += 42;
+    var f24f = 'foo';
+    this. /*update: [subclass=A24]*/ f24f = f24f;
+  }
+
+  /*element: A24.foo:[exact=A24]*/
+  A24.foo(/*[subclass=A24]*/ other)
+      : f24c = other. /*[subclass=A24]*/ f24c,
+        f24d = other. /*[subclass=A24]*/ f24d,
+        f24e = other
+            . /*invoke: [subclass=A24]*/
+            bar24();
+
+  /*element: A24.+:Value([exact=JSString], value: "foo")*/
+  operator +(/*[exact=JSUInt31]*/ other) => 'foo';
+
+  /*element: A24.bar24:[exact=JSDouble]*/
+  bar24() => 42.5;
+}
+
+/*element: B24.:[exact=B24]*/
+class B24 extends A24 {
+  /*element: B24.bar24:[exact=JSUInt31]*/
+  bar24() => 42;
+}
+
+/*element: test24:[null]*/
+test24() {
+  new A24();
+  new A24.foo(new A24());
+  new A24.foo(new B24());
+}
+
+/*element: A25.:[exact=A25]*/
+class A25 {
+  /*element: A25.f25:[exact=JSUInt31]*/
+  var f25 = 42;
+}
+
+/*element: B25.:[exact=B25]*/
+class B25 {
+  /*element: B25.f25:Value([exact=JSString], value: "42")*/
+  var f25 = '42';
+}
+
+/*element: test25:[null]*/
+test25() {
+  new B25();
+  new A25(). /*update: [exact=A25]*/ f25 = new A25(). /*[exact=A25]*/ f25;
+}
+
+/*element: A26.:[exact=A26]*/
+class A26 {
+  /*element: A26.f26:[subclass=JSPositiveInt]*/
+  var f26 = 42;
+}
+
+/*element: B26.:[exact=B26]*/
+class B26 {
+  /*element: B26.f26:[exact=JSUInt31]*/
+  var f26 = 54;
+}
+
+/*element: test26:[null]*/
+test26() {
+  new A26(). /*update: [exact=A26]*/ f26 = [new B26(), new A26()]
+              /*Container([exact=JSExtendableArray], element: Union([exact=A26], [exact=B26]), length: 2)*/
+              [0]
+          // ignore: undefined_getter
+          . /*Union([exact=A26], [exact=B26])*/ f26
+      /*invoke: [subclass=JSPositiveInt]*/ +
+      42;
+}
+
+class A27 {
+  /*element: A27.f27a:[exact=JSUInt31]*/
+  var f27a;
+
+  /*element: A27.f27b:[null|exact=JSUInt31]*/
+  var f27b;
+
+  /*element: A27.:[exact=A27]*/
+  A27() {
+    this. /*update: [subclass=A27]*/ f27a = 42;
+    this. /*update: [subclass=A27]*/ f27b = 42;
+  }
+}
+
+/*element: B27.:[exact=B27]*/
+class B27 extends A27 {
+  set f27b(/*[exact=JSUInt31]*/ value) {}
+}
+
+/*element: test27:[null]*/
+test27() {
+  new A27();
+  new B27();
+}
+
+class A28 {
+  /*element: A28.f28a:[exact=JSUInt31]*/
+  var f28a;
+
+  /*element: A28.f28b:[null|exact=JSUInt31]*/
+  var f28b;
+
+  /*element: A28.:[exact=A28]*/
+  A28(/*[exact=JSUInt31]*/ x) {
+    this. /*update: [exact=A28]*/ f28a = x;
+    if (x /*invoke: [exact=JSUInt31]*/ == 0) return;
+    this. /*update: [exact=A28]*/ f28b = x;
+  }
+}
+
+/*element: test28:[null]*/
+test28() {
+  new A28(0);
+  new A28(1);
+}
+
+class A29 {
+  /*element: A29.f29a:[exact=JSUInt31]*/
+  var f29a;
+
+  /*element: A29.f29b:[null|exact=JSUInt31]*/
+  var f29b;
+
+  /*element: A29.:[exact=A29]*/
+  A29(/*[exact=JSUInt31]*/ x) {
+    this. /*update: [exact=A29]*/ f29a = x;
+    if (x /*invoke: [exact=JSUInt31]*/ == 0) {} else {
+      return;
+    }
+    this. /*update: [exact=A29]*/ f29b = x;
+  }
+}
+
+/*element: test29:[null]*/
+test29() {
+  new A29(0);
+  new A29(1);
+}
+
+class A30 {
+  /*element: A30.f30a:[exact=JSUInt31]*/
+  var f30a;
+
+  /*element: A30.f30b:[exact=JSUInt31]*/
+  var f30b;
+
+  /*element: A30.f30c:[null|exact=JSUInt31]*/
+  var f30c;
+
+  /*element: A30.:[exact=A30]*/
+  A30(/*[exact=JSUInt31]*/ x) {
+    this. /*update: [exact=A30]*/ f30a = x;
+    if (x /*invoke: [exact=JSUInt31]*/ == 0) {
+      this. /*update: [exact=A30]*/ f30b = 1;
+    } else {
+      this. /*update: [exact=A30]*/ f30b = x;
+      return;
+    }
+    this. /*update: [exact=A30]*/ f30c = x;
+  }
+}
+
+/*element: test30:[null]*/
+test30() {
+  new A30(0);
+  new A30(1);
+}
diff --git a/tests/compiler/dart2js/inference/data/final_field.dart b/tests/compiler/dart2js/inference/data/final_field.dart
new file mode 100644
index 0000000..0a1c13e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/final_field.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  /*element: A.intField:[exact=JSUInt31]*/
+  final intField;
+
+  /*element: A.giveUpField1:Union([exact=JSString], [exact=JSUInt31])*/
+  final giveUpField1;
+
+  /*element: A.giveUpField2:Union([exact=A], [exact=JSString])*/
+  final giveUpField2;
+
+  /*element: A.fieldParameter:[exact=JSUInt31]*/
+  final fieldParameter;
+
+  /*element: A.:[exact=A]*/
+  A()
+      : intField = 42,
+        giveUpField1 = 'foo',
+        giveUpField2 = 'foo',
+        fieldParameter = 54;
+
+  /*element: A.bar:[exact=A]*/
+  A.bar()
+      : intField = 54,
+        giveUpField1 = 42,
+        giveUpField2 = new A(),
+        fieldParameter = 87;
+
+  /*element: A.foo:[exact=A]*/
+  A.foo(this. /*[exact=JSUInt31]*/ fieldParameter)
+      : intField = 87,
+        giveUpField1 = 42,
+        giveUpField2 = 'foo';
+}
+
+/*element: main:[null]*/
+main() {
+  new A();
+  new A.bar();
+  new A.foo(42);
+}
diff --git a/tests/compiler/dart2js/inference/data/final_field2.dart b/tests/compiler/dart2js/inference/data/final_field2.dart
new file mode 100644
index 0000000..7b7a9aff
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/final_field2.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that a non-used generative constructor does not prevent
+// inferring types for fields.
+
+class A {
+  /*element: A.intField:[exact=JSUInt31]*/
+  final intField;
+
+  /*element: A.stringField:Value([exact=JSString], value: "foo")*/
+  final stringField;
+
+  /*element: A.:[exact=A]*/
+  A()
+      : intField = 42,
+        stringField = 'foo';
+
+  A.bar()
+      : intField = 'bar',
+        stringField = 42;
+}
+
+/*element: main:[null]*/
+main() {
+  new A();
+}
diff --git a/tests/compiler/dart2js/inference/data/final_field3.dart b/tests/compiler/dart2js/inference/data/final_field3.dart
new file mode 100644
index 0000000..f39e555
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/final_field3.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that we are analyzing field parameters correctly.
+
+class A {
+  /*element: A.dynamicField:Union([exact=JSString], [exact=JSUInt31])*/
+  final dynamicField;
+
+  /*element: A.:[exact=A]*/
+  A() : dynamicField = 42;
+
+  /*element: A.bar:[exact=A]*/
+  A.bar(this. /*Value([exact=JSString], value: "foo")*/ dynamicField);
+}
+
+/*element: main:[null]*/
+main() {
+  new A();
+  new A.bar('foo');
+}
diff --git a/tests/compiler/dart2js/inference/data/general.dart b/tests/compiler/dart2js/inference/data/general.dart
new file mode 100644
index 0000000..8616dce
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general.dart
@@ -0,0 +1,931 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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: returnNum1:Union([exact=JSDouble], [exact=JSUInt31])*/
+returnNum1(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a)
+    return 1;
+  else
+    return 2.5;
+}
+
+/*element: returnNum2:Union([exact=JSDouble], [exact=JSUInt31])*/
+returnNum2(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a)
+    return 1.4;
+  else
+    return 2;
+}
+
+/*element: returnInt1:[exact=JSUInt31]*/
+returnInt1(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a)
+    return 1;
+  else
+    return 2;
+}
+
+/*element: returnDouble:[exact=JSDouble]*/
+returnDouble(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a)
+    return 1.5;
+  else
+    return 2.5;
+}
+
+/*element: returnGiveUp:Union([exact=JSString], [exact=JSUInt31])*/
+returnGiveUp(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a)
+    return 1;
+  else
+    return 'foo';
+}
+
+/*element: returnInt2:[exact=JSUInt31]*/
+returnInt2() {
+  var a = 42;
+  return a /*invoke: [exact=JSUInt31]*/ ++;
+}
+
+/*element: returnInt5:[subclass=JSUInt32]*/
+returnInt5() {
+  var a = 42;
+  return /*invoke: [exact=JSUInt31]*/ ++a;
+}
+
+/*element: returnInt6:[subclass=JSUInt32]*/
+returnInt6() {
+  var a = 42;
+  a /*invoke: [exact=JSUInt31]*/ ++;
+  return a;
+}
+
+/*element: returnIntOrNull:[null|exact=JSUInt31]*/
+returnIntOrNull(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a) return 42;
+}
+
+/*element: returnInt3:[exact=JSUInt31]*/
+returnInt3(/*Value([exact=JSBool], value: true)*/ a) {
+  if (a) return 42;
+  throw 42;
+}
+
+/*element: returnInt4:[exact=JSUInt31]*/
+returnInt4() {
+  return (42);
+}
+
+/*element: returnInt7:[subclass=JSPositiveInt]*/
+returnInt7() {
+  return 42. /*invoke: [exact=JSUInt31]*/ abs();
+}
+
+/*element: returnInt8:[subclass=JSPositiveInt]*/
+returnInt8() {
+  return 42. /*invoke: [exact=JSUInt31]*/ remainder(54);
+}
+
+/*element: returnEmpty1:[empty]*/
+returnEmpty1() {
+  // Ensure that we don't intrisify a wrong call to [int.remainder].
+  // ignore: not_enough_required_arguments
+  return 42. /*invoke: [exact=JSUInt31]*/ remainder();
+}
+
+/*element: returnEmpty2:[empty]*/
+returnEmpty2() {
+  // Ensure that we don't intrisify a wrong call to [int.abs].
+  // ignore: extra_positional_arguments
+  return 42. /*invoke: [exact=JSUInt31]*/ abs(42);
+}
+
+/*element: testIsCheck1:[subclass=JSInt]*/
+testIsCheck1(/*[null|subclass=Object]*/ a) {
+  if (a is int) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck2:[subclass=JSInt]*/
+testIsCheck2(/*[null|subclass=Object]*/ a) {
+  if (a is! int) {
+    return 0;
+  } else {
+    return a;
+  }
+}
+
+/*element: testIsCheck3:[null|subclass=JSInt]*/
+testIsCheck3(/*[null|subclass=Object]*/ a) {
+  if (a is! int) {
+    print('hello');
+  } else {
+    return a;
+  }
+}
+
+/*element: testIsCheck4:[subclass=JSInt]*/
+testIsCheck4(/*[null|subclass=Object]*/ a) {
+  if (a is int) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck5:[subclass=JSInt]*/
+testIsCheck5(/*[null|subclass=Object]*/ a) {
+  if (a is! int) {
+    return 42;
+  } else {
+    return a;
+  }
+}
+
+/*element: testIsCheck6:[null|subclass=Object]*/
+testIsCheck6(/*[null|subclass=Object]*/ a) {
+  if (a is! int) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck7:[subclass=JSInt]*/
+testIsCheck7(/*[null|subclass=Object]*/ a) {
+  if (a == 'foo' && a is int) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck8:[null|subclass=Object]*/
+testIsCheck8(/*[null|subclass=Object]*/ a) {
+  if (a == 'foo' || a is int) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck9:[subclass=JSInt]*/
+testIsCheck9(/*[null|subclass=Object]*/ a) {
+  return a is int ? a : 42;
+}
+
+/*element: testIsCheck10:[null|subclass=Object]*/
+testIsCheck10(/*[null|subclass=Object]*/ a) {
+  return a is! int ? a : 42;
+}
+
+/*element: testIsCheck11:[subclass=JSInt]*/
+testIsCheck11(/*[null|subclass=Object]*/ a) {
+  return a is! int ? 42 : a;
+}
+
+/*element: testIsCheck12:[null|subclass=Object]*/
+testIsCheck12(/*[null|subclass=Object]*/ a) {
+  return a is int ? 42 : a;
+}
+
+/*element: testIsCheck13:[subclass=JSInt]*/
+testIsCheck13(/*[null|subclass=Object]*/ a) {
+  while (a is int) {
+    return a;
+  }
+  return 42;
+}
+
+/*element: testIsCheck14:[null|subclass=Object]*/
+testIsCheck14(/*[null|subclass=Object]*/ a) {
+  while (a is! int) {
+    return 42;
+  }
+  return a;
+}
+
+// TODO(29309): Change to [subclass=JSInt] when 29309 is fixed.
+/*element: testIsCheck15:[null|subclass=Object]*/
+testIsCheck15(/*[null|subclass=Object]*/ a) {
+  var c = 42;
+  do {
+    if (a) return c;
+    c = topLevelGetter();
+  } while (c is int);
+  return 42;
+}
+
+/*element: testIsCheck16:[null|subclass=Object]*/
+testIsCheck16(/*[null|subclass=Object]*/ a) {
+  var c = 42;
+  do {
+    if (a) return c;
+    c = topLevelGetter();
+  } while (c is! int);
+  return 42;
+}
+
+/*element: testIsCheck17:[subclass=JSInt]*/
+testIsCheck17(/*[null|subclass=Object]*/ a) {
+  var c = 42;
+  for (; c is int;) {
+    if (a) return c;
+    c = topLevelGetter();
+  }
+  return 42;
+}
+
+/*element: testIsCheck18:[null|subclass=Object]*/
+testIsCheck18(/*[null|subclass=Object]*/ a) {
+  var c = 42;
+  for (; c is int;) {
+    if (a) return c;
+    c = topLevelGetter();
+  }
+  return c;
+}
+
+/*element: testIsCheck19:[null|subclass=Object]*/
+testIsCheck19(/*[null|subclass=Object]*/ a) {
+  var c = 42;
+  for (; c is! int;) {
+    if (a) return c;
+    c = topLevelGetter();
+  }
+  return 42;
+}
+
+/*element: testIsCheck20:Union([exact=JSString], [exact=JSUInt31])*/
+testIsCheck20() {
+  var c = topLevelGetter();
+  if (c != null && c is! bool && c is! int) {
+    return 42;
+  } else if (c is String) {
+    return c;
+  } else {
+    return 68;
+  }
+}
+
+/*element: testIsCheck21:[null|subclass=Object]*/
+testIsCheck21(/*[null|subclass=Object]*/ a) {
+  if (a is int || a is List) {
+    return a;
+  } else {
+    return 42;
+  }
+}
+
+/*element: testIsCheck22:[null|subclass=Object]*/
+testIsCheck22(/*[null|subclass=Object]*/ a) {
+  return (a is int || a is List) ? a : 42;
+}
+
+/*element: testIsCheck23:[subclass=JSInt]*/
+testIsCheck23(/*[null|subclass=Object]*/ a) {
+  if (a is! int) throw 'foo';
+  return a;
+}
+
+/*element: testIsCheck24:[subclass=JSInt]*/
+testIsCheck24(/*[null|subclass=Object]*/ a) {
+  if (a is! int) return 42;
+  return a;
+}
+
+/*element: testIsCheck25:[null|subclass=Object]*/
+testIsCheck25(/*[null|subclass=Object]*/ a) {
+  if (a is int) throw 'foo';
+  return a;
+}
+
+/*element: testIsCheck26:[subclass=JSInt]*/
+testIsCheck26(/*[null|subclass=Object]*/ a) {
+  if (a is int) {} else {
+    throw 42;
+  }
+  return a;
+}
+
+/*element: testIsCheck27:[subclass=JSInt]*/
+testIsCheck27(/*[null|subclass=Object]*/ a) {
+  if (a is int) {} else {
+    return 42;
+  }
+  return a;
+}
+
+/*element: testIsCheck28:[null|subclass=Object]*/
+testIsCheck28(/*[null|subclass=Object]*/ a) {
+  if (a is int) {} else {}
+  return a;
+}
+
+/*element: testIsCheck29:[null|subclass=Object]*/
+testIsCheck29(/*[null|subclass=Object]*/ a) {
+  if (a is int) {}
+  return a;
+}
+
+/*element: testIf1:[null|exact=JSUInt31]*/
+testIf1(/*[null|subclass=Object]*/ a) {
+  var c = null;
+  if (a) {
+    c = 10;
+  } else {}
+  return c;
+}
+
+/*element: testIf2:[null|exact=JSUInt31]*/
+testIf2(/*[null|subclass=Object]*/ a) {
+  var c = null;
+  if (a) {} else {
+    c = 10;
+  }
+  return c;
+}
+
+/*element: returnAsString:[null|exact=JSString]*/
+returnAsString() {
+  return topLevelGetter() as String;
+}
+
+/*element: returnIntAsNum:[exact=JSUInt31]*/
+returnIntAsNum() {
+  // ignore: unnecessary_cast
+  return 0 as num;
+}
+
+typedef int Foo();
+
+/*element: returnAsTypedef:[null|subclass=Closure]*/
+returnAsTypedef() {
+  return topLevelGetter() as Foo;
+}
+
+/*element: testDeadCode:[exact=JSUInt31]*/
+testDeadCode() {
+  return 42;
+  // ignore: dead_code
+  return 'foo';
+}
+
+/*element: testLabeledIf:[null|exact=JSUInt31]*/
+testLabeledIf(/*Value([exact=JSBool], value: true)*/ a) {
+  var c;
+  L1:
+  if (a /*invoke: Value([exact=JSBool], value: true)*/ > 1) {
+    if (a /*invoke: [empty]*/ == 2) {
+      break L1;
+    }
+    c = 42;
+  } else {
+    c = 38;
+  }
+  return c;
+}
+
+/*element: testSwitch1:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+testSwitch1() {
+  var a = null;
+  switch (topLevelGetter) {
+    case 100:
+      a = 42.5;
+      break;
+    case 200:
+      a = 42;
+      break;
+  }
+  return a;
+}
+
+/*element: testSwitch2:[exact=JSUInt31]*/
+testSwitch2() {
+  var a = null;
+  switch (topLevelGetter) {
+    case 100:
+      a = 42;
+      break;
+    case 200:
+      a = 42;
+      break;
+    default:
+      a = 43;
+  }
+  return a;
+}
+
+/*element: testSwitch3:Union([null|exact=JSString], [subclass=JSNumber])*/
+testSwitch3() {
+  dynamic a = 42;
+  var b;
+  switch (topLevelGetter) {
+    L1:
+    case 1:
+      b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 42;
+      break;
+    case 2:
+      a = 'foo';
+      continue L1;
+  }
+  return b;
+}
+
+/*element: testSwitch4:[exact=JSUInt31]*/
+testSwitch4() {
+  switch (topLevelGetter) {
+    case 1:
+      break;
+    default:
+      break;
+  }
+  return 42;
+}
+
+/*element: testSwitch5:[exact=JSUInt31]*/
+testSwitch5() {
+  switch (topLevelGetter) {
+    case 1:
+      return 1;
+    default:
+      return 2;
+  }
+}
+
+/*element: testContinue1:Union([null|exact=JSString], [subclass=JSNumber])*/
+testContinue1() {
+  dynamic a = 42;
+  var b;
+  while (true) {
+    b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 54;
+    if (b /*invoke: Union([exact=JSString], [subclass=JSNumber])*/ == 42)
+      continue;
+    a = 'foo';
+  }
+  // ignore: dead_code
+  return b;
+}
+
+/*element: testBreak1:Union([null|exact=JSString], [subclass=JSUInt32])*/
+testBreak1() {
+  var a = 42;
+  var b;
+  while (true) {
+    b = a /*invoke: [exact=JSUInt31]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32]*/ == 42) break;
+    b = 'foo';
+  }
+  return b;
+}
+
+/*element: testContinue2:Union([exact=JSString], [null|subclass=JSUInt32])*/
+testContinue2() {
+  var a = 42;
+  var b;
+  while (true) {
+    b = a /*invoke: [exact=JSUInt31]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+      b = 'foo';
+      continue;
+    }
+  }
+  // ignore: dead_code
+  return b;
+}
+
+/*element: testBreak2:[null|subclass=JSUInt32]*/
+testBreak2() {
+  dynamic a = 42;
+  var b;
+  while (true) {
+    b = a /*invoke: [exact=JSUInt31]*/ + 54;
+    if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+      a = 'foo';
+      break;
+    }
+  }
+  return b;
+}
+
+/*element: testReturnElementOfConstList1:[exact=JSUInt31]*/
+testReturnElementOfConstList1() {
+  return const [
+    42
+  ] /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [
+      0];
+}
+
+/*element: testReturnElementOfConstList2:[exact=JSUInt31]*/
+testReturnElementOfConstList2() {
+  return topLevelConstList /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [
+      0];
+}
+
+/*element: testReturnItselfOrInt:[exact=JSUInt31]*/
+testReturnItselfOrInt(/*[null|subclass=Object]*/ a) {
+  if (a) return 42;
+  return testReturnItselfOrInt(a);
+}
+
+/*element: testDoWhile1:Value([exact=JSString], value: "foo")*/
+testDoWhile1() {
+  dynamic a = 42;
+  do {
+    a = 'foo';
+  } while (true);
+  // ignore: dead_code
+  return a;
+}
+
+/*element: testDoWhile2:[null]*/
+testDoWhile2() {
+  dynamic a = 42;
+  do {
+    a = 'foo';
+    // ignore: mixed_return_types
+    return;
+  } while (true);
+  // ignore: dead_code,mixed_return_types
+  return a;
+}
+
+/*element: testDoWhile3:[exact=JSUInt31]*/
+testDoWhile3() {
+  dynamic a = 42;
+  do {
+    a = 'foo';
+    if (true) continue;
+    return 42;
+  } while (true);
+  // ignore: dead_code
+  return a;
+}
+
+/*element: testDoWhile4:Union([exact=JSDouble], [exact=JSUInt31])*/
+testDoWhile4() {
+  dynamic a = 'foo';
+  do {
+    a = 54;
+    if (true) break;
+    return 3.5;
+  } while (true);
+  return a;
+}
+
+/*element: testSpecialization1:[subclass=JSNumber]*/
+testSpecialization1() {
+  var a = topLevelGetter();
+  a - 42;
+  return a;
+}
+
+/*element: testSpecialization2:[null|subclass=Object]*/
+testSpecialization2() {
+  var a = topLevelGetter();
+  // Make [a] a captured variable. This should disable receiver
+  // specialization on [a].
+  (/*[null|subclass=Object]*/ () => a.toString())();
+  a - 42;
+  return a;
+}
+
+/*element: testSpecialization3:[null|exact=JSUInt31]*/
+testSpecialization3() {
+  var a = returnDynamic() ? null : 42;
+  a. /*invoke: [null|exact=JSUInt31]*/ toString();
+  // Test that calling an [Object] method on [a] will not lead to
+  // infer that [a] is not null;
+  return a;
+}
+
+/*element: testReturnNull1:[null]*/
+testReturnNull1(/*[null|subclass=Object]*/ a) {
+  if (a == null) return a;
+  return null;
+}
+
+/*element: testReturnNull2:[null]*/
+testReturnNull2(/*[null|subclass=Object]*/ a) {
+  if (a != null) return null;
+  return a;
+}
+
+/*element: testReturnNull3:[null|subclass=Object]*/
+testReturnNull3(/*[null|subclass=Object]*/ a) {
+  if (a == null) return 42;
+  return a;
+}
+
+/*element: testReturnNull4:[null]*/
+testReturnNull4() {
+  var a = topLevelGetter();
+  if (a == null) return a;
+  return null;
+}
+
+/*element: testReturnNull5:[null]*/
+testReturnNull5() {
+  var a = topLevelGetter();
+  if (a != null) return null;
+  return a;
+}
+
+/*element: testReturnNull6:[null|subclass=Object]*/
+testReturnNull6() {
+  var a = topLevelGetter();
+  if (a == null) return 42;
+  return a;
+}
+
+/*element: testReturnNotEquals:[exact=JSBool]*/
+testReturnNotEquals() {
+  return new A() /*invoke: [exact=A]*/ != 54;
+}
+
+/*element: testReturnInvokeDynamicGetter:[null|subclass=Object]*/
+testReturnInvokeDynamicGetter() => new A(). /*invoke: [exact=A]*/ myFactory();
+
+/*element: topLevelConstList:Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/
+var topLevelConstList = const [42];
+
+/*element: topLevelGetter:[exact=JSUInt31]*/
+get topLevelGetter => 42;
+
+/*element: returnDynamic:[null|subclass=Object]*/
+returnDynamic() => topLevelGetter(42);
+
+/*element: returnTopLevelGetter:[exact=JSUInt31]*/
+returnTopLevelGetter() => topLevelGetter;
+
+class A {
+  factory A() = A.generative;
+  /*element: A.generative:[exact=A]*/
+  A.generative();
+  /*element: A.==:Union([exact=JSBool], [exact=JSUInt31])*/
+  operator ==(/*Union([exact=JSString], [exact=JSUInt31])*/ other) =>
+      42 as dynamic;
+
+  /*element: A.myField:[exact=JSUInt31]*/
+  get myField => 42;
+
+  set myField(/*[subclass=JSUInt32]*/ a) {}
+
+  /*element: A.returnInt1:[subclass=JSUInt32]*/
+  returnInt1() => /*invoke: [exact=JSUInt31]*/ ++ /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+
+  /*element: A.returnInt2:[subclass=JSUInt32]*/
+  returnInt2() => /*invoke: [exact=JSUInt31]*/ ++this
+      . /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+
+  /*element: A.returnInt3:[subclass=JSUInt32]*/
+  returnInt3() =>
+      this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+          42;
+
+  /*element: A.returnInt4:[subclass=JSUInt32]*/
+  returnInt4() => /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+      42;
+
+  /*element: A.[]:[exact=JSUInt31]*/
+  operator [](/*[exact=JSUInt31]*/ index) => 42;
+
+  /*element: A.[]=:[null]*/
+  operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+
+  /*element: A.returnInt5:[subclass=JSUInt32]*/
+  returnInt5() => /*invoke: [exact=JSUInt31]*/ ++this /*[subclass=A]*/ /*update: [subclass=A]*/ [
+      0];
+
+  /*element: A.returnInt6:[subclass=JSUInt32]*/
+  returnInt6() => this /*[subclass=A]*/ /*update: [subclass=A]*/ [
+      0] /*invoke: [exact=JSUInt31]*/ += 1;
+
+  /*element: A.myFactory:[subclass=Closure]*/
+  get myFactory => /*[exact=JSUInt31]*/ () => 42;
+}
+
+class B extends A {
+  /*element: B.:[exact=B]*/
+  B() : super.generative();
+
+  /*element: B.returnInt1:[subclass=JSUInt32]*/
+  returnInt1() => /*invoke: [exact=JSUInt31]*/ ++new A()
+      . /*[exact=A]*/ /*update: [exact=A]*/ myField;
+
+  /*element: B.returnInt2:[subclass=JSUInt32]*/
+  returnInt2() => new A()
+      . /*[exact=A]*/ /*update: [exact=A]*/ myField /*invoke: [exact=JSUInt31]*/ += 4;
+
+  /*element: B.returnInt3:[subclass=JSUInt32]*/
+  returnInt3() => /*invoke: [exact=JSUInt31]*/ ++new A() /*[exact=A]*/ /*update: [exact=A]*/ [
+      0];
+
+  /*element: B.returnInt4:[subclass=JSUInt32]*/
+  returnInt4() => new A() /*[exact=A]*/ /*update: [exact=A]*/ [
+      0] /*invoke: [exact=JSUInt31]*/ += 42;
+
+  /*element: B.returnInt5:[subclass=JSUInt32]*/
+  returnInt5() => /*invoke: [exact=JSUInt31]*/ ++super.myField;
+
+  /*element: B.returnInt6:[subclass=JSUInt32]*/
+  returnInt6() => super.myField /*invoke: [exact=JSUInt31]*/ += 4;
+
+  /*element: B.returnInt7:[subclass=JSUInt32]*/
+  returnInt7() => /*invoke: [exact=JSUInt31]*/ ++super[0];
+
+  /*element: B.returnInt8:[subclass=JSUInt32]*/
+  returnInt8() => super[0] /*invoke: [exact=JSUInt31]*/ += 54;
+
+  /*element: B.returnInt9:[exact=JSUInt31]*/
+  returnInt9() => super.myField;
+}
+
+class C {
+  /*element: C.myField:[subclass=JSPositiveInt]*/
+  var myField = 42;
+
+  /*element: C.:[exact=C]*/
+  C();
+
+  /*element: C.returnInt1:[subclass=JSPositiveInt]*/
+  returnInt1() => /*invoke: [subclass=JSPositiveInt]*/ ++ /*[exact=C]*/ /*update: [exact=C]*/ myField;
+
+  /*element: C.returnInt2:[subclass=JSPositiveInt]*/
+  returnInt2() => /*invoke: [subclass=JSPositiveInt]*/ ++this
+      . /*[exact=C]*/ /*update: [exact=C]*/ myField;
+
+  /*element: C.returnInt3:[subclass=JSPositiveInt]*/
+  returnInt3() =>
+      this. /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ +=
+          42;
+
+  /*element: C.returnInt4:[subclass=JSPositiveInt]*/
+  returnInt4() => /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ +=
+      42;
+
+  /*element: C.[]:[subclass=JSPositiveInt]*/
+  operator [](/*[exact=JSUInt31]*/ index) => /*[exact=C]*/ myField;
+
+  /*element: C.[]=:[null]*/
+  operator []=(
+      /*[exact=JSUInt31]*/ index,
+      /*[subclass=JSPositiveInt]*/ value) {}
+
+  /*element: C.returnInt5:[subclass=JSPositiveInt]*/
+  returnInt5() => /*invoke: [subclass=JSPositiveInt]*/ ++this /*[exact=C]*/ /*update: [exact=C]*/ [
+      0];
+
+  /*element: C.returnInt6:[subclass=JSPositiveInt]*/
+  returnInt6() => this /*[exact=C]*/ /*update: [exact=C]*/ [
+      0] /*invoke: [subclass=JSPositiveInt]*/ += 1;
+}
+
+/*element: testCascade1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+testCascade1() {
+  return [1, 2, 3]
+    .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+        add(4)
+    .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+        add(5);
+}
+
+/*element: testCascade2:[exact=CascadeHelper]*/
+testCascade2() {
+  return new CascadeHelper()
+    .. /*update: [exact=CascadeHelper]*/ a = "hello"
+    .. /*update: [exact=CascadeHelper]*/ b = 42
+    .. /*[exact=CascadeHelper]*/ /*update: [exact=CascadeHelper]*/ i
+        /*invoke: [subclass=JSPositiveInt]*/ += 1;
+}
+
+/*element: CascadeHelper.:[exact=CascadeHelper]*/
+class CascadeHelper {
+  /*element: CascadeHelper.a:Value([null|exact=JSString], value: "hello")*/
+  var a;
+
+  /*element: CascadeHelper.b:[null|exact=JSUInt31]*/
+  var b;
+
+  /*element: CascadeHelper.i:[subclass=JSPositiveInt]*/
+  var i = 0;
+}
+
+/*element: main:[null]*/
+main() {
+  // Ensure a function class is being instantiated.
+  /*[exact=JSUInt31]*/ () => 42;
+  returnNum1(true);
+  returnNum2(true);
+  returnInt1(true);
+  returnInt2();
+  returnInt3(true);
+  returnInt4();
+  returnDouble(true);
+  returnGiveUp(true);
+  returnInt5();
+  returnInt6();
+  returnInt7();
+  returnInt8();
+  returnIntOrNull(true);
+  returnDynamic();
+  returnEmpty1();
+  returnEmpty2();
+  testIsCheck1(topLevelGetter());
+  testIsCheck2(topLevelGetter());
+  testIsCheck3(topLevelGetter());
+  testIsCheck4(topLevelGetter());
+  testIsCheck5(topLevelGetter());
+  testIsCheck6(topLevelGetter());
+  testIsCheck7(topLevelGetter());
+  testIsCheck8(topLevelGetter());
+  testIsCheck9(topLevelGetter());
+  testIsCheck10(topLevelGetter());
+  testIsCheck11(topLevelGetter());
+  testIsCheck12(topLevelGetter());
+  testIsCheck13(topLevelGetter());
+  testIsCheck14(topLevelGetter());
+  testIsCheck15(topLevelGetter());
+  testIsCheck16(topLevelGetter());
+  testIsCheck17(topLevelGetter());
+  testIsCheck18(topLevelGetter());
+  testIsCheck19(topLevelGetter());
+  testIsCheck20();
+  testIsCheck21(topLevelGetter());
+  testIsCheck22(topLevelGetter());
+  testIsCheck23(topLevelGetter());
+  testIsCheck24(topLevelGetter());
+  testIsCheck25(topLevelGetter());
+  testIsCheck26(topLevelGetter());
+  testIsCheck27(topLevelGetter());
+  testIsCheck28(topLevelGetter());
+  testIsCheck29(topLevelGetter());
+  testIf1(topLevelGetter());
+  testIf2(topLevelGetter());
+  returnAsString();
+  returnIntAsNum();
+  returnAsTypedef();
+  returnTopLevelGetter();
+  testDeadCode();
+  testLabeledIf(true);
+  testSwitch1();
+  testSwitch2();
+  testSwitch3();
+  testSwitch4();
+  testSwitch5();
+  testContinue1();
+  testBreak1();
+  testContinue2();
+  testBreak2();
+  testDoWhile1();
+  testDoWhile2();
+  testDoWhile3();
+  testDoWhile4();
+  new A() == null;
+  new A()
+    .. /*invoke: [exact=A]*/ returnInt1()
+    .. /*invoke: [exact=A]*/ returnInt2()
+    .. /*invoke: [exact=A]*/ returnInt3()
+    .. /*invoke: [exact=A]*/ returnInt4()
+    .. /*invoke: [exact=A]*/ returnInt5()
+    .. /*invoke: [exact=A]*/ returnInt6();
+
+  new B()
+    .. /*invoke: [exact=B]*/ returnInt1()
+    .. /*invoke: [exact=B]*/ returnInt2()
+    .. /*invoke: [exact=B]*/ returnInt3()
+    .. /*invoke: [exact=B]*/ returnInt4()
+    .. /*invoke: [exact=B]*/ returnInt5()
+    .. /*invoke: [exact=B]*/ returnInt6()
+    .. /*invoke: [exact=B]*/ returnInt7()
+    .. /*invoke: [exact=B]*/ returnInt8()
+    .. /*invoke: [exact=B]*/ returnInt9();
+
+  new C()
+    .. /*invoke: [exact=C]*/ returnInt1()
+    .. /*invoke: [exact=C]*/ returnInt2()
+    .. /*invoke: [exact=C]*/ returnInt3()
+    .. /*invoke: [exact=C]*/ returnInt4()
+    .. /*invoke: [exact=C]*/ returnInt5()
+    .. /*invoke: [exact=C]*/ returnInt6();
+  testReturnElementOfConstList1();
+  testReturnElementOfConstList2();
+  testReturnItselfOrInt(topLevelGetter());
+  testReturnInvokeDynamicGetter();
+  testCascade1();
+  testCascade2();
+  testSpecialization1();
+  testSpecialization2();
+  testSpecialization3();
+  testReturnNull1(topLevelGetter());
+  testReturnNull2(topLevelGetter());
+  testReturnNull3(topLevelGetter());
+  testReturnNull4();
+  testReturnNull5();
+  testReturnNull6();
+  testReturnNotEquals();
+}
diff --git a/tests/compiler/dart2js/inference/data/general6.dart b/tests/compiler/dart2js/inference/data/general6.dart
new file mode 100644
index 0000000..f28acc0
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general6.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.
+
+/*element: foo:[exact=JSUInt31]*/
+foo() {
+  var a = [1, 2, 3];
+  return a
+      . /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
+      first;
+}
+
+/*element: main:[null]*/
+main() {
+  foo();
+}
diff --git a/tests/compiler/dart2js/inference/data/general7.dart b/tests/compiler/dart2js/inference/data/general7.dart
new file mode 100644
index 0000000..2fb6105
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general7.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.
+
+/// This file contains tests of assertions when assertions are _disabled_. The
+/// file 'general7_ea.dart' contains similar tests for when assertions are
+/// _enabled_.
+
+/*element: foo:[null]*/
+foo(/*[exact=JSUInt31]*/ x, [/*[null]*/ y]) => y;
+
+/*element: main:[null]*/
+main() {
+  assert(foo('Hi', true), foo(true));
+  foo(1);
+}
diff --git a/tests/compiler/dart2js/inference/data/general7_ea.dart b/tests/compiler/dart2js/inference/data/general7_ea.dart
new file mode 100644
index 0000000..50e5667
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general7_ea.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This file contains tests of assertions when assertions are _enabled_. The
+/// file 'general7.dart' contains similar tests for when assertions are
+/// _disabled_.
+
+/*element: foo:Value([null|exact=JSBool], value: true)*/
+foo(
+        /*Union([exact=JSBool], [exact=JSString], [exact=JSUInt31])*/ x,
+        [/*Value([null|exact=JSBool], value: true)*/ y]) =>
+    y;
+
+/*element: main:[null]*/
+main() {
+  assert(foo('Hi', true), foo(true));
+  foo(1);
+}
diff --git a/tests/compiler/dart2js/inference/data/general8a.dart b/tests/compiler/dart2js/inference/data/general8a.dart
new file mode 100644
index 0000000..d94138e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general8a.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.
+
+/*element: foo:Value([exact=JSBool], value: false)*/
+foo(/*Value([exact=JSBool], value: false)*/ x) {
+  return x;
+}
+
+/*element: bar:[null]*/
+bar(/*Value([exact=JSBool], value: false)*/ x) {
+  if (x) {
+    print("aaa");
+  } else {
+    print("bbb");
+  }
+}
+
+/*element: main:[null]*/
+main() {
+  bar(foo(false));
+  bar(foo(foo(false)));
+}
diff --git a/tests/compiler/dart2js/inference/data/general8b.dart b/tests/compiler/dart2js/inference/data/general8b.dart
new file mode 100644
index 0000000..594a093
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/general8b.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.
+
+/*element: foo:[exact=JSBool]*/
+foo(/*[exact=JSUInt31]*/ x) {
+  if (x /*invoke: [exact=JSUInt31]*/ > 3) return true;
+  return false;
+}
+
+/*element: bar:[null]*/
+bar(/*[exact=JSBool]*/ x) {
+  if (x) {
+    print("aaa");
+  } else {
+    print("bbb");
+  }
+}
+
+/*element: main:[null]*/ main() {
+  bar(foo(5));
+  bar(foo(6));
+}
diff --git a/tests/compiler/dart2js/inference/data/global_field_closure.dart b/tests/compiler/dart2js/inference/data/global_field_closure.dart
new file mode 100644
index 0000000..d2fd3bc
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/global_field_closure.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.
+
+/*element: method1:[exact=JSUInt31]*/
+method1() {
+  return 42;
+}
+
+/*element: method2:[exact=JSUInt31]*/
+// Called only via [foo2] with a small integer.
+method2(/*[exact=JSUInt31]*/ a) {
+  return a;
+}
+
+/*element: foo1:[null|subclass=Closure]*/
+var foo1 = method1;
+
+/*element: foo2:[null|subclass=Closure]*/
+var foo2 = method2;
+
+/*element: returnInt1:[null|subclass=Object]*/
+returnInt1() {
+  return foo1();
+}
+
+/*element: returnInt2:[null|subclass=Object]*/
+returnInt2() {
+  return foo2(54);
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt1();
+  returnInt2();
+}
diff --git a/tests/compiler/dart2js/inference/data/global_field_closure2.dart b/tests/compiler/dart2js/inference/data/global_field_closure2.dart
new file mode 100644
index 0000000..765913e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/global_field_closure2.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: method:[exact=JSUInt31]*/
+// Called only via [foo] with a small integer.
+method(/*[exact=JSUInt31]*/ a) {
+  return a;
+}
+
+/*element: foo:[null|subclass=Closure]*/
+var foo = method;
+
+/*element: returnInt:[null|subclass=Object]*/
+returnInt() {
+  return foo(54);
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt();
+}
diff --git a/tests/compiler/dart2js/inference/data/index_postfix.dart b/tests/compiler/dart2js/inference/data/index_postfix.dart
new file mode 100644
index 0000000..5eefc77
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/index_postfix.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  listIndexPostfixIncrement();
+  listIndexPostfixDecrement();
+  superIndexPostfixIncrement();
+}
+
+/*element: listIndexPostfixIncrement:[subclass=JSPositiveInt]*/
+listIndexPostfixIncrement() {
+  var list = [0];
+  return list
+          /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
+          /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
+          [0]
+      /*invoke: [subclass=JSPositiveInt]*/ ++;
+}
+
+/*element: listIndexPostfixDecrement:[subclass=JSInt]*/
+listIndexPostfixDecrement() {
+  var list = [0];
+  return list
+          /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
+          /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
+          [0]
+      /*invoke: [subclass=JSInt]*/ --;
+}
+
+/*element: Super1.:[exact=Super1]*/
+class Super1 {
+  /*element: Super1.[]:[exact=JSUInt31]*/
+  operator [](/*[exact=JSUInt31]*/ index) => 42;
+
+  /*element: Super1.[]=:[null]*/
+  operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+}
+
+/*element: Class1.:[exact=Class1]*/
+class Class1 extends Super1 {
+  /*element: Class1.method:[exact=JSUInt31]*/
+  method() => super[0] /*invoke: [exact=JSUInt31]*/ ++;
+}
+
+/*element: superIndexPostfixIncrement:[null]*/
+superIndexPostfixIncrement() {
+  new Class1(). /*invoke: [exact=Class1]*/ method();
+}
diff --git a/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
new file mode 100644
index 0000000..a042a6c
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.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 'dart:typed_data';
+
+/*element: myList:Container([null|exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+var myList = new Float32List(42);
+
+/*element: myOtherList:Container([null|exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+var myOtherList = new Uint8List(32);
+
+/*element: main:[subclass=JSNumber]*/
+main() {
+  // ignore: unused_local_variable
+  var a = new Float32List(9);
+  return myList
+          /*Container([null|exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+          [0] /*invoke: [subclass=JSNumber]*/ +
+      myOtherList
+          /*Container([null|exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+          [0];
+}
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_const.dart b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
new file mode 100644
index 0000000..4b2bd43
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: closure:Union([exact=JSDouble], [exact=JSUInt31])*/
+int closure(int /*Union([exact=JSDouble], [exact=JSUInt31])*/ x) {
+  return x;
+}
+
+class A {
+  /*element: A.DEFAULT:Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+  static const DEFAULT = const {'fun': closure};
+
+  /*element: A.map:Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+  final map;
+
+  /*element: A.:[exact=A]*/
+  A([/*[null]*/ maparg]) : map = maparg == null ? DEFAULT : maparg;
+}
+
+/*element: main:[null]*/
+main() {
+  var a = new A();
+  a. /*[exact=A]*/ map
+      /*Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+      ['fun'](3.3);
+  print(closure(22));
+}
diff --git a/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values.dart b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values.dart
new file mode 100644
index 0000000..909a33e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Ensure that the inferrer looks at default values for parameters in
+// synthetic constructors using the correct context. If the constructor call
+// to D without optional parameters is inferred using D's context, the default
+// value `_SECRET` will not be visible and compilation will fail.
+
+import '../libs/mixin_constructor_default_parameter_values_lib.dart';
+
+class Mixin {
+  /*element: Mixin.foo:[exact=JSString]*/
+  String get foo => "Mixin:$this";
+}
+
+// ignore: MIXIN_HAS_NO_CONSTRUCTORS
+class D = C with Mixin;
+
+/*element: main:[null]*/
+main() {
+  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
+  print(new D.a(42). /*[exact=D]*/ foo);
+  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
+  print(new D.b(42). /*[exact=D]*/ foo);
+  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
+  print(new D.a(42, "overt"). /*[exact=D]*/ foo);
+  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
+  print(new D.b(42, b: "odvert"). /*[exact=D]*/ foo);
+}
diff --git a/tests/compiler/dart2js/inference/data/no_such_method1.dart b/tests/compiler/dart2js/inference/data/no_such_method1.dart
new file mode 100644
index 0000000..9bf8eba
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/no_such_method1.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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: A.:[exact=A]*/
+class A {
+  /*element: A.noSuchMethod:[exact=JSUInt31]*/
+  noSuchMethod(/*[null|subclass=Object]*/ im) => 42;
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+  foo();
+}
+
+/*element: C.:[exact=C]*/
+class C extends B {
+  /*element: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+}
+
+/*element: a:[null|subclass=B]*/
+dynamic a = [new B(), new C()]
+    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    [0];
+
+/*element: test1:[exact=JSUInt31]*/
+test1() => new A()
+    // ignore: undefined_method
+    . /*invoke: [exact=A]*/ foo();
+
+/*element: test2:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+test2() => a. /*invoke: [null|subclass=B]*/ foo();
+
+/*element: test3:[exact=JSUInt31]*/
+test3() => new B(). /*invoke: [exact=B]*/ foo();
+
+/*element: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test4() => new C(). /*invoke: [exact=C]*/ foo();
+
+/*element: test5:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+test5() => (a ? new A() : new B())
+    // ignore: undefined_method
+    . /*invoke: [subclass=A]*/ foo();
+
+/*element: test6:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
diff --git a/tests/compiler/dart2js/inference/data/no_such_method2.dart b/tests/compiler/dart2js/inference/data/no_such_method2.dart
new file mode 100644
index 0000000..434e82a
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/no_such_method2.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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: A.:[subclass=B]*/
+abstract class A {
+  /*element: A.noSuchMethod:[exact=JSUInt31]*/
+  noSuchMethod(/*[null|subclass=Object]*/ im) => 42;
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+  /*element: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+}
+
+/*element: C.:[exact=C]*/
+class C extends B {
+  /*element: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+}
+
+/*element: D.:[exact=D]*/
+class D implements A {
+  /*element: D.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+
+  /*element: D.noSuchMethod:[exact=JSDouble]*/
+  noSuchMethod(/*[null|subclass=Object]*/ im) => 42.5;
+}
+
+/*element: a:Union([exact=D], [null|subclass=B])*/
+dynamic a = [new B(), new C(), new D()]
+    /*Container([exact=JSExtendableArray], element: Union([exact=D], [subclass=B]), length: 3)*/
+    [0];
+
+/*element: test1:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test1() => a. /*invoke: Union([exact=D], [null|subclass=B])*/ foo();
+
+/*element: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test2() => new B(). /*invoke: [exact=B]*/ foo();
+
+/*element: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test3() => new C(). /*invoke: [exact=C]*/ foo();
+
+/*element: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test4() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
+
+/*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test5() => (a ? new B() : new D())
+    // ignore: undefined_method
+    . /*invoke: Union([exact=B], [exact=D])*/ foo();
+
+// Can hit A.noSuchMethod, D.noSuchMethod and Object.noSuchMethod.
+/*element: test6:Union([exact=JSDouble], [exact=JSUInt31])*/
+test6() => a. /*invoke: Union([exact=D], [null|subclass=B])*/ bar();
+
+// Can hit A.noSuchMethod.
+/*element: test7:[exact=JSUInt31]*/
+test7() => new B()
+    // ignore: undefined_method
+    . /*invoke: [exact=B]*/ bar();
+
+/*element: test8:[exact=JSUInt31]*/
+test8() => new C()
+    // ignore: undefined_method
+    . /*invoke: [exact=C]*/ bar();
+
+/*element: test9:[exact=JSUInt31]*/
+test9() => (a ? new B() : new C())
+    // ignore: undefined_method
+    . /*invoke: [subclass=B]*/ bar();
+
+// Can hit A.noSuchMethod and D.noSuchMethod.
+/*element: test10:Union([exact=JSDouble], [exact=JSUInt31])*/
+test10() => (a ? new B() : new D())
+    // ignore: undefined_method
+    . /*invoke: Union([exact=B], [exact=D])*/ bar();
+
+// Can hit D.noSuchMethod.
+/*element: test11:[exact=JSDouble]*/
+test11() => new D()
+    // ignore: undefined_method
+    . /*invoke: [exact=D]*/ bar();
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+  test9();
+  test10();
+  test11();
+}
diff --git a/tests/compiler/dart2js/inference/data/no_such_method3.dart b/tests/compiler/dart2js/inference/data/no_such_method3.dart
new file mode 100644
index 0000000..2b31564
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/no_such_method3.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: A.:[exact=A]*/
+class A {
+  // We may ignore this for type inference because syntactically it always
+  // throws an exception.
+  /*element: A.noSuchMethod:[empty]*/
+  noSuchMethod(/*[null|subclass=Object]*/ im) => throw 'foo';
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+  /*element: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+}
+
+/*element: C.:[exact=C]*/
+class C extends B {
+  /*element: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+  foo() => {};
+}
+
+/*element: a:[null|subclass=B]*/
+dynamic a = [new B(), new C()]
+    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    [0];
+/*element: test1:[empty]*/
+test1() => new A()
+    // ignore: undefined_method
+    . /*invoke: [exact=A]*/ foo();
+
+/*element: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test2() => a. /*invoke: [null|subclass=B]*/ foo();
+
+/*element: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test3() => new B(). /*invoke: [exact=B]*/ foo();
+
+/*element: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test4() => new C(). /*invoke: [exact=C]*/ foo();
+
+/*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test5() => (a ? new A() : new B())
+    // ignore: undefined_method
+    . /*invoke: [subclass=A]*/ foo();
+
+/*element: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
diff --git a/tests/compiler/dart2js/inference/data/no_such_method4.dart b/tests/compiler/dart2js/inference/data/no_such_method4.dart
new file mode 100644
index 0000000..1eaaf15
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/no_such_method4.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: A.:[exact=A]*/
+class A {
+  // We may ignore this for type inference because it forwards to a default
+  // noSuchMethod implementation, which always throws an exception.
+  noSuchMethod(im) => super.noSuchMethod(im);
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+  /*element: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/ foo() =>
+      {};
+}
+
+/*element: C.:[exact=C]*/
+class C extends B {
+  /*element: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/ foo() =>
+      {};
+}
+
+/*element: a:[null|subclass=B]*/
+dynamic a = [new B(), new C()]
+    /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+    [0];
+
+/*element: test1:[empty]*/
+test1() => new A()
+    // ignore: undefined_method
+    . /*invoke: [exact=A]*/ foo();
+
+/*element: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test2() => a. /*invoke: [null|subclass=B]*/ foo();
+
+/*element: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test3() => new B(). /*invoke: [exact=B]*/ foo();
+
+/*element: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test4() => new C(). /*invoke: [exact=C]*/ foo();
+
+/*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test5() => (a ? new A() : new B())
+    // ignore: undefined_method
+    . /*invoke: [subclass=A]*/ foo();
+
+/*element: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
diff --git a/tests/compiler/dart2js/inference/data/postfix_prefix.dart b/tests/compiler/dart2js/inference/data/postfix_prefix.dart
new file mode 100644
index 0000000..0e54d55
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/postfix_prefix.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.
+
+/*element: A.:[exact=A]*/
+class A {
+  /*element: A.foo:Value([exact=JSString], value: "string")*/
+  get foo => 'string';
+
+  set foo(/*[subclass=JSNumber]*/ value) {}
+
+  /*element: A.[]:Value([exact=JSString], value: "string")*/
+  operator [](/*[empty]*/ index) => 'string';
+
+  /*element: A.[]=:[null]*/
+  operator []=(/*[empty]*/ index, /*[subclass=JSNumber]*/ value) {}
+
+  // TODO(johnniwinther): Investigate why these differ.
+  /*ast.element: A.returnDynamic1:Union([exact=JSString], [exact=JSUInt31])*/
+  /*kernel.element: A.returnDynamic1:[exact=JSUInt31]*/
+  returnDynamic1() => /*[subclass=A]*/ /*update: [subclass=A]*/ foo
+      /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
+
+  /*element: A.returnNum1:[subclass=JSNumber]*/
+  returnNum1() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --
+      /*[subclass=A]*/ /*update: [subclass=A]*/ foo;
+
+  /*element: A.returnNum2:[subclass=JSNumber]*/
+  returnNum2() => /*[subclass=A]*/ /*update: [subclass=A]*/ foo
+      /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -= 42;
+
+  // TODO(johnniwinther): Investigate why these differ.
+  /*ast.element: A.returnDynamic2:Union([exact=JSString], [exact=JSUInt31])*/
+  /*kernel.element: A.returnDynamic2:[exact=JSUInt31]*/
+  returnDynamic2() => this
+          // ignore: undefined_identifier
+          /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index]
+      /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
+
+  /*element: A.returnNum3:[subclass=JSNumber]*/
+  returnNum3() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --this
+      // ignore: undefined_identifier
+      /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index];
+
+  /*element: A.returnNum4:[subclass=JSNumber]*/
+  returnNum4() => this
+          // ignore: undefined_identifier
+          /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index]
+      /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -= 42;
+
+  /*element: A.returnEmpty3:[empty]*/
+  returnEmpty3() =>
+      // ignore: undefined_setter
+      this. /*[subclass=A]*/ /*update: [subclass=A]*/ bar
+      /*invoke: [empty]*/ --;
+
+  /*element: A.returnEmpty1:[empty]*/
+  returnEmpty1() => /*invoke: [empty]*/ --this
+      // ignore: undefined_setter
+      . /*[subclass=A]*/ /*update: [subclass=A]*/ bar;
+
+  /*element: A.returnEmpty2:[empty]*/
+  returnEmpty2() => this
+          // ignore: undefined_setter
+          . /*[subclass=A]*/ /*update: [subclass=A]*/ bar
+      /*invoke: [empty]*/ -= 42;
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+  /*element: B.foo:[exact=JSUInt31]*/
+  get foo => 42;
+  /*element: B.[]:[exact=JSUInt31]*/
+  operator [](/*[empty]*/ index) => 42;
+
+  // TODO(johnniwinther): Investigate why these differ.
+  /*ast.element: B.returnString1:Value([exact=JSString], value: "string")*/
+  /*kernel.element: B.returnString1:[empty]*/
+  returnString1() =>
+      super.foo /*invoke: Value([exact=JSString], value: "string")*/ --;
+
+  /*element: B.returnDynamic1:[empty]*/
+  returnDynamic1() =>
+      /*invoke: Value([exact=JSString], value: "string")*/
+      --super.foo;
+
+  /*element: B.returnDynamic2:[empty]*/
+  returnDynamic2() =>
+      super.foo /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+
+  // TODO(johnniwinther): Investigate why these differ.
+  /*ast.element: B.returnString2:Value([exact=JSString], value: "string")*/
+  /*kernel.element: B.returnString2:[empty]*/
+  returnString2() =>
+      // ignore: undefined_identifier
+      super[/*[exact=B]*/ index]
+      /*invoke: Value([exact=JSString], value: "string")*/ --;
+
+  /*element: B.returnDynamic3:[empty]*/
+  returnDynamic3() =>
+      /*invoke: Value([exact=JSString], value: "string")*/
+      --super
+          // ignore: undefined_identifier
+          [/*[exact=B]*/ index];
+
+  /*element: B.returnDynamic4:[empty]*/
+  returnDynamic4() =>
+      // ignore: undefined_identifier
+      super[/*[exact=B]*/ index]
+          /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+}
+
+/*element: main:[null]*/
+main() {
+  new A()
+    .. /*invoke: [exact=A]*/ returnNum1()
+    .. /*invoke: [exact=A]*/ returnNum2()
+    .. /*invoke: [exact=A]*/ returnNum3()
+    .. /*invoke: [exact=A]*/ returnNum4()
+    .. /*invoke: [exact=A]*/ returnDynamic1()
+    .. /*invoke: [exact=A]*/ returnDynamic2()
+    .. /*invoke: [exact=A]*/ returnEmpty1()
+    .. /*invoke: [exact=A]*/ returnEmpty2()
+    .. /*invoke: [exact=A]*/ returnEmpty3();
+
+  new B()
+    .. /*invoke: [exact=B]*/ returnString1()
+    .. /*invoke: [exact=B]*/ returnString2()
+    .. /*invoke: [exact=B]*/ returnDynamic1()
+    .. /*invoke: [exact=B]*/ returnDynamic2()
+    .. /*invoke: [exact=B]*/ returnDynamic3()
+    .. /*invoke: [exact=B]*/ returnDynamic4();
+}
diff --git a/tests/compiler/dart2js/inference/data/prefix.dart b/tests/compiler/dart2js/inference/data/prefix.dart
new file mode 100644
index 0000000..32118ab
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/prefix.dart
@@ -0,0 +1,163 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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() {
+  localPrefixInc();
+  localPrefixDec();
+  staticFieldPrefixInc();
+  staticFieldPrefixDec();
+  instanceFieldPrefixInc();
+  instanceFieldPrefixDec();
+  conditionalInstanceFieldPrefixInc();
+  conditionalInstanceFieldPrefixDec();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix increment on local variable.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: localPrefixInc:[subclass=JSUInt32]*/
+localPrefixInc() {
+  var local;
+  if (local == null) {
+    local = 0;
+  }
+  return /*invoke: [null|exact=JSUInt31]*/ ++local;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix decrement on local variable.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: localPrefixDec:[subclass=JSInt]*/
+localPrefixDec() {
+  var local;
+  if (local == null) {
+    local = 0;
+  }
+  return /*invoke: [null|exact=JSUInt31]*/ --local;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix increment on static field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: _staticField1:[null|subclass=JSPositiveInt]*/
+var _staticField1;
+
+/*element: staticFieldPrefixInc:[subclass=JSPositiveInt]*/
+staticFieldPrefixInc() {
+  if (_staticField1 == null) {
+    _staticField1 = 0;
+  }
+  return /*invoke: [null|subclass=JSPositiveInt]*/ ++_staticField1;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix decrement on static field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: _staticField2:[null|subclass=JSInt]*/
+var _staticField2;
+
+/*element: staticFieldPrefixDec:[subclass=JSInt]*/
+staticFieldPrefixDec() {
+  if (_staticField2 == null) {
+    _staticField2 = 0;
+  }
+  return /*invoke: [null|subclass=JSInt]*/ --_staticField2;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix increment on instance field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class1.:[exact=Class1]*/
+class Class1 {
+  /*element: Class1.field1:[null|subclass=JSPositiveInt]*/
+  var field1;
+}
+
+/*element: instanceFieldPrefixInc:[subclass=JSPositiveInt]*/
+instanceFieldPrefixInc() {
+  var c = new Class1();
+  if (c. /*[exact=Class1]*/ field1 == null) {
+    c. /*update: [exact=Class1]*/ field1 = 0;
+  }
+  return
+      /*invoke: [null|subclass=JSPositiveInt]*/ ++c.
+          /*[exact=Class1]*/
+          /*update: [exact=Class1]*/
+          field1;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Prefix decrement on instance field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class2.:[exact=Class2]*/
+class Class2 {
+  /*element: Class2.field2:[null|subclass=JSInt]*/
+  var field2;
+}
+
+/*element: instanceFieldPrefixDec:[subclass=JSInt]*/
+instanceFieldPrefixDec() {
+  var c = new Class2();
+  if (c. /*[exact=Class2]*/ field2 == null) {
+    c. /*update: [exact=Class2]*/ field2 = 0;
+  }
+  return
+      /*invoke: [null|subclass=JSInt]*/ --c.
+          /*[exact=Class2]*/
+          /*update: [exact=Class2]*/
+          field2;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Conditional prefix increment on instance field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class3.:[exact=Class3]*/
+class Class3 {
+  /*element: Class3.field3:[null|subclass=JSPositiveInt]*/
+  var field3;
+}
+
+/*element: conditionalInstanceFieldPrefixInc:[null|subclass=JSPositiveInt]*/
+conditionalInstanceFieldPrefixInc() {
+  var c = new Class3();
+  if (c. /*[exact=Class3]*/ field3 == null) {
+    c. /*update: [exact=Class3]*/ field3 = 0;
+  }
+  return
+      /*invoke: [null|subclass=JSPositiveInt]*/ ++c?.
+          /*[exact=Class3]*/
+          /*update: [exact=Class3]*/
+          field3;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Conditional prefix decrement on instance field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class4.:[exact=Class4]*/
+class Class4 {
+  /*element: Class4.field4:[null|subclass=JSInt]*/
+  var field4;
+}
+
+/*element: conditionalInstanceFieldPrefixDec:[null|subclass=JSInt]*/
+conditionalInstanceFieldPrefixDec() {
+  var c = new Class4();
+  if (c. /*[exact=Class4]*/ field4 == null) {
+    c. /*update: [exact=Class4]*/ field4 = 0;
+  }
+  return
+      /*invoke: [null|subclass=JSInt]*/ --c?.
+          /*[exact=Class4]*/
+          /*update: [exact=Class4]*/
+          field4;
+}
diff --git a/tests/compiler/dart2js/inference/data/switch1.dart b/tests/compiler/dart2js/inference/data/switch1.dart
new file mode 100644
index 0000000..036ccba
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch1.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.
+
+/*element: foo:[exact=JSString]*/
+foo(int /*[subclass=JSInt]*/ x) {
+  var a = "one";
+  switch (x) {
+    case 1:
+      a = "two";
+      break;
+    case 2:
+      break;
+  }
+
+  return a;
+}
+
+/*element: main:[null]*/ main() {
+  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+}
diff --git a/tests/compiler/dart2js/inference/data/switch2.dart b/tests/compiler/dart2js/inference/data/switch2.dart
new file mode 100644
index 0000000..ed9a38e
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch2.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: foo:Value([null|exact=JSString], value: "two")*/
+foo(int /*[subclass=JSInt]*/ x) {
+  var a;
+  switch (x) {
+    case 1:
+      a = "two";
+      break;
+    case 2:
+      break;
+  }
+
+  return a;
+}
+
+/*element: main:[null]*/
+main() {
+  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+}
diff --git a/tests/compiler/dart2js/inference/data/switch3.dart b/tests/compiler/dart2js/inference/data/switch3.dart
new file mode 100644
index 0000000..1ebcd71
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch3.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.
+
+/*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
new file mode 100644
index 0000000..579bab4
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch4.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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/switch5.dart b/tests/compiler/dart2js/inference/data/switch5.dart
new file mode 100644
index 0000000..1ce09a6
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch5.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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) {
+    case 1:
+      a = 1;
+      break;
+    case 2:
+      a = 2;
+      break;
+    default:
+  }
+
+  return a;
+}
+
+/*element: main:[null]*/
+main() {
+  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+}
diff --git a/tests/compiler/dart2js/inference/data/switch6.dart b/tests/compiler/dart2js/inference/data/switch6.dart
new file mode 100644
index 0000000..8761199
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/switch6.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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;
+  do {
+    // add extra locals scope
+    switch (x) {
+      case 1:
+        a = 1;
+        break;
+      case 2:
+        a = 2;
+        break;
+    }
+  } while (false);
+
+  return a;
+}
+
+/*element: main:[null]*/
+main() {
+  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+}
diff --git a/tests/compiler/dart2js/inference/data/try_catch.dart b/tests/compiler/dart2js/inference/data/try_catch.dart
new file mode 100644
index 0000000..b4209bb
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/try_catch.dart
@@ -0,0 +1,168 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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: returnInt1:[exact=JSUInt31]*/
+returnInt1() {
+  var a = 42;
+  try {
+    a = 54;
+  } catch (e) {}
+  return a;
+}
+
+/*element: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn1() {
+  dynamic a = 42;
+  try {
+    a = 'foo';
+  } catch (e) {}
+  return a;
+}
+
+/*element: returnInt2:[exact=JSUInt31]*/
+returnInt2() {
+  var a = 42;
+  try {
+    a = 54;
+  } catch (e) {
+    a = 2;
+  }
+  return a;
+}
+
+/*element: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn2() {
+  dynamic a = 42;
+  try {
+    a = 54;
+  } catch (e) {
+    a = 'foo';
+  }
+  return a;
+}
+
+/*element: returnInt3:[exact=JSUInt31]*/
+returnInt3() {
+  dynamic a = 42;
+  try {
+    a = 54;
+  } catch (e) {
+    a = 'foo';
+  } finally {
+    a = 4;
+  }
+  return a;
+}
+
+/*element: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn3() {
+  dynamic a = 42;
+  try {
+    a = 54;
+    // ignore: unused_catch_clause
+  } on String catch (e) {
+    a = 2;
+    // ignore: unused_catch_clause
+  } on Object catch (e) {
+    a = 'foo';
+  }
+  return a;
+}
+
+/*element: returnInt4:[exact=JSUInt31]*/
+returnInt4() {
+  var a = 42;
+  try {
+    a = 54;
+    // ignore: unused_catch_clause
+  } on String catch (e) {
+    a = 2;
+    // ignore: unused_catch_clause
+  } on Object catch (e) {
+    a = 32;
+  }
+  return a;
+}
+
+/*element: returnDyn4:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn4() {
+  dynamic a = 42;
+  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+    try {
+      a = 'foo';
+    } catch (e) {}
+  }
+  return a;
+}
+
+/*element: returnInt5:[exact=JSUInt31]*/
+returnInt5() {
+  var a = 42;
+  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+    try {
+      a = 42;
+    } catch (e) {}
+  }
+  return a;
+}
+
+/*element: returnDyn5:Union([exact=JSString], [exact=JSUInt31])*/
+returnDyn5() {
+  dynamic a = 42;
+  if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+    try {
+      a = 'foo';
+      print(a);
+      a = 42;
+    } catch (e) {}
+  }
+  return a;
+}
+
+/*element: returnInt6:[subclass=JSInt]*/
+returnInt6() {
+  try {
+    throw 42;
+  } on int catch (e) {
+    return e;
+  }
+  // ignore: dead_code
+  return 42;
+}
+
+/*element: returnDyn6:[null|subclass=Object]*/
+returnDyn6() {
+  try {
+    throw 42;
+  } catch (e) {
+    return e;
+  }
+}
+
+/*element: returnInt7:[exact=JSUInt31]*/
+returnInt7() {
+  dynamic a = 'foo';
+  try {
+    a = 42;
+    return a;
+  } catch (e) {}
+  return 2;
+}
+
+/*element: main:[null]*/
+main() {
+  returnInt1();
+  returnDyn1();
+  returnInt2();
+  returnDyn2();
+  returnInt3();
+  returnDyn3();
+  returnInt4();
+  returnDyn4();
+  returnInt5();
+  returnDyn5();
+  returnInt6();
+  returnDyn6();
+  returnInt7();
+}
diff --git a/tests/compiler/dart2js/inference/data/unregister_call.dart b/tests/compiler/dart2js/inference/data/unregister_call.dart
new file mode 100644
index 0000000..cfe5be7
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/unregister_call.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: a:Value([exact=JSString], value: "")*/
+var a = '';
+
+/*element: A.:[exact=A]*/
+class A {
+  /*element: A.+:[exact=JSUInt31]*/
+  operator +(/*[exact=JSUInt31]*/ other) => other;
+}
+
+/*element: foo:[exact=JSString]*/
+foo() {
+  // The following '+' call will first say that it may call A::+,
+  // String::+, or int::+. After all methods have been analyzed, we know
+  // that a is of type String, and therefore, this method cannot call
+  // A::+. Therefore, the type of the parameter of A::+ will be the
+  // one given by the other calls.
+  return a /*invoke: Value([exact=JSString], value: "")*/ + 'foo';
+}
+
+/*element: main:[null]*/
+main() {
+  new A() /*invoke: [exact=A]*/ + 42;
+  foo();
+}
diff --git a/tests/compiler/dart2js/inference/inference_equivalence.dart b/tests/compiler/dart2js/inference/inference_equivalence.dart
index 2641692..b308a29 100644
--- a/tests/compiler/dart2js/inference/inference_equivalence.dart
+++ b/tests/compiler/dart2js/inference/inference_equivalence.dart
@@ -76,7 +76,7 @@
   return compareData(
       uri, const {}, computeMemberAstTypeMasks, computeMemberIrTypeMasks,
       options: [stopAfterTypeInference],
-      forMainLibraryOnly: false,
+      forUserLibrariesOnly: false,
       skipUnprocessedMembers: true,
       skipFailedCompilations: true,
       verbose: verbose,
diff --git a/tests/compiler/dart2js/inference/inference_test.dart b/tests/compiler/dart2js/inference/inference_test.dart
index 0d8bc02..ac40734 100644
--- a/tests/compiler/dart2js/inference/inference_test.dart
+++ b/tests/compiler/dart2js/inference/inference_test.dart
@@ -7,11 +7,20 @@
 import '../equivalence/id_equivalence_helper.dart';
 import 'inference_test_helper.dart';
 
+const List<String> skipForKernel = const <String>[
+  // TODO(johnniwinther): Remove this when issue 31767 is fixed.
+  'mixin_constructor_default_parameter_values.dart',
+];
+
 main(List<String> args) {
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(
         dataDir, computeMemberAstTypeMasks, computeMemberIrTypeMasks,
-        args: args, options: [stopAfterTypeInference]);
+        libDirectory: new Directory.fromUri(Platform.script.resolve('libs')),
+        forUserLibrariesOnly: true,
+        args: args,
+        options: [stopAfterTypeInference],
+        skipForKernel: skipForKernel);
   });
 }
diff --git a/tests/compiler/dart2js/inference/libs/mixin_constructor_default_parameter_values_lib.dart b/tests/compiler/dart2js/inference/libs/mixin_constructor_default_parameter_values_lib.dart
new file mode 100644
index 0000000..0578297
--- /dev/null
+++ b/tests/compiler/dart2js/inference/libs/mixin_constructor_default_parameter_values_lib.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.
+
+class _SECRET {
+  /*element: _SECRET.:[exact=_SECRET]*/
+  const _SECRET();
+  /*element: _SECRET.toString:Value([exact=JSString], value: "SECRET!")*/
+  String toString() => "SECRET!";
+}
+
+class C {
+  /*element: C.x:[exact=JSUInt31]*/
+  final int x;
+
+  /*element: C.y:Union([exact=JSString], [exact=_SECRET])*/
+  final y;
+
+  /*element: C.a:[exact=C]*/
+  C.a(int /*[exact=JSUInt31]*/ x,
+      [var /*Union([exact=JSString], [exact=_SECRET])*/ b = const _SECRET()])
+      : this.x = x,
+        this.y = b;
+
+  /*element: C.b:[exact=C]*/
+  C.b(int /*[exact=JSUInt31]*/ x,
+      {var /*Union([exact=JSString], [exact=_SECRET])*/ b: const _SECRET()})
+      : this.x = x,
+        this.y = b;
+
+  /*element: C.toString:[exact=JSString]*/
+  String toString() => "C(${/*[exact=D]*/x},${/*[exact=D]*/y})";
+}
diff --git a/tests/compiler/dart2js/inference/list_tracer_typed_data_length_test.dart b/tests/compiler/dart2js/inference/list_tracer_typed_data_length_test.dart
deleted file mode 100644
index f0c9780..0000000
--- a/tests/compiler/dart2js/inference/list_tracer_typed_data_length_test.dart
+++ /dev/null
@@ -1,58 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/types.dart' show TypeMask, ContainerTypeMask;
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const TEST = const {
-  'main.dart': r'''
-import 'dart:typed_data';
-
-var myList = new Float32List(42);
-var myOtherList = new Uint8List(32);
-
-main() {
-  var a = new Float32List(9);
-  return myList[0] + myOtherList[0];
-}
-'''
-};
-
-void main() {
-  runTest({bool useKernel}) async {
-    var result = await runCompiler(
-        memorySourceFiles: TEST, options: useKernel ? [Flags.useKernel] : []);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var elementEnvironment = closedWorld.elementEnvironment;
-
-    checkType(String name, type, length) {
-      MemberEntity element = elementEnvironment.lookupLibraryMember(
-          elementEnvironment.mainLibrary, name);
-      TypeMask mask = typesInferrer.getTypeOfMember(element);
-      Expect.isTrue(mask.isContainer);
-      ContainerTypeMask container = mask;
-      Expect.equals(type, simplify(container.elementType, closedWorld), name);
-      Expect.equals(container.length, length);
-    }
-
-    checkType('myList', closedWorld.commonMasks.numType, 42);
-    checkType('myOtherList', closedWorld.commonMasks.uint31Type, 32);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/map_tracer_const_test.dart b/tests/compiler/dart2js/inference/map_tracer_const_test.dart
deleted file mode 100644
index 391a38e..0000000
--- a/tests/compiler/dart2js/inference/map_tracer_const_test.dart
+++ /dev/null
@@ -1,57 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = '''
-int closure(int x) {
-  return x;
-}
-
-class A {
-  static const DEFAULT = const {'fun' : closure};
-
-  final map;
-
-  A([maparg]) : map = maparg == null ? DEFAULT : maparg;
-}
-
-main() {
-  var a = new A();
-  a.map['fun'](3.3);
-  print(closure(22));
-}
-''';
-
-void main() {
-  runTest({bool useKernel}) async {
-    var result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var elementEnvironment = closedWorld.elementEnvironment;
-    var commonMasks = closedWorld.commonMasks;
-
-    MemberEntity element = elementEnvironment.lookupLibraryMember(
-        elementEnvironment.mainLibrary, 'closure');
-    var mask = typesInferrer.getReturnTypeOfMember(element);
-    Expect.equals(commonMasks.numType, simplify(mask, closedWorld));
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/mixin_constructor_default_parameter_values_test.dart b/tests/compiler/dart2js/inference/mixin_constructor_default_parameter_values_test.dart
deleted file mode 100644
index c0d8ade..0000000
--- a/tests/compiler/dart2js/inference/mixin_constructor_default_parameter_values_test.dart
+++ /dev/null
@@ -1,59 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// Ensure that the inferrer looks at default values for parameters in
-// synthetic constructors using the correct context. If the constructor call
-// to D without optional parameters is inferred using D's context, the default
-// value `_SECRET` will not be visible and compilation will fail.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import '../memory_compiler.dart';
-
-const Map MEMORY_SOURCE_FILES = const {
-  "main.dart": r"""
-  import "liba.dart";
-
-  class Mixin {
-      String get foo => "Mixin:$this";
-  }
-
-  class D = C with Mixin;
-
-  main() {
-    print(new D.a(42).foo);
-    print(new D.b(42).foo);
-    print(new D.a(42, "overt").foo);
-    print(new D.b(42, b:"odvert").foo);
-  }
-""",
-  "liba.dart": r"""
-  class _SECRET { const _SECRET(); String toString() => "SECRET!"; }
-
-  class C {
-    final int x;
-    final y;
-    C.a(int x, [var b = const _SECRET()]) : this.x = x, this.y = b;
-    C.b(int x, {var b : const _SECRET()}) : this.x = x, this.y = b;
-    String toString() => "C($x,$y)";
-  }
-"""
-};
-
-main() {
-  runTest({bool useKernel}) async {
-    await runCompiler(
-        memorySourceFiles: MEMORY_SOURCE_FILES,
-        options: useKernel ? [Flags.useKernel] : []);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart
deleted file mode 100644
index e990edb..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-class X {}
-returnDyn1() {
-  var a;
-  ((a = 52) == true) || ((a = 'foo') == true);
-  return a;
-}
-
-returnDyn2() {
-  var a;
-  ((a = 52) == true) && ((a = 'foo') == true);
-  return a;
-}
-
-returnDyn3() {
-  var a;
-  a = a == 54 ? 'foo' : 31;
-  return a;
-}
-
-returnDyn4() {
-  var a;
-  ((a = 52) == true) || ((a = new X()) == true);
-  return a;
-}
-
-returnDyn5() {
-  var a;
-  ((a = 52) == true) && ((a = new X()) == true);
-  return a;
-}
-
-returnDyn6() {
-  var a;
-  a = a == 54 ? 'foo' : new X();
-  return a;
-}
-
-returnDyn7b(x) => x;
-
-returnDyn7() {
-  var a = "foo";
-  if (a.length == 3) a = 52;
-  if ((a is int) || (a is String && true)) returnDyn7b(a);
-  return a;
-}
-
-returnDyn8(x) => x;
-
-test8() {
-  var a = "foo";
-  if (a.length == 3) a = 52;
-  if ((false && a is! String) || returnDyn8(a)) return a;
-}
-
-returnDyn9(x) => x;
-
-test9() {
-  var a = "foo";
-  if (a.length == 3) a = 52;
-  if (!(a is bool && a is bool)) returnDyn9(a);
-}
-
-returnString(x) => x;
-
-test10() {
-  var a = "foo";
-  if (a.length == 3) a = 52;
-  if (!(a is num) && a is String) returnString(a);
-}
-
-main() {
-  returnDyn1();
-  returnDyn2();
-  returnDyn3();
-  returnDyn4();
-  returnDyn5();
-  returnDyn6();
-  returnDyn7();
-  test8();
-  test9();
-  test10();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkReturn(String name, type) {
-      MemberEntity element = findMember(closedWorld, name);
-      Expect.equals(type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
-    }
-
-    var subclassOfInterceptor = interceptorOrComparable(closedWorld);
-
-    checkReturn('returnDyn1', subclassOfInterceptor);
-    checkReturn('returnDyn2', subclassOfInterceptor);
-    checkReturn('returnDyn3', subclassOfInterceptor);
-    checkReturn(
-        'returnDyn4', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn(
-        'returnDyn5', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn(
-        'returnDyn6', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn('returnDyn7', subclassOfInterceptor);
-    checkReturn('returnDyn7b', subclassOfInterceptor);
-    checkReturn('returnDyn8', subclassOfInterceptor);
-    checkReturn('returnDyn9', subclassOfInterceptor);
-    checkReturn('returnString', closedWorld.commonMasks.stringType);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart
deleted file mode 100644
index 915eeb4..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-returnInt1() {
-  var a = 42;
-  var f = () {
-    return a;
-  };
-  return a;
-}
-
-returnDyn1() {
-  var a = 42;
-  var f = () {
-    a = {};
-  };
-  return a;
-}
-
-returnInt2() {
-  var a = 42;
-  var f = () {
-    a = 54;
-  };
-  return a;
-}
-
-returnDyn2() {
-  var a = 42;
-  var f = () {
-    a = 54;
-  };
-  var g = () {
-    a = {};
-  };
-  return a;
-}
-
-returnInt3() {
-  var a = 42;
-  if (a == 53) {
-    var f = () {
-      return a;
-    };
-  }
-  return a;
-}
-
-returnDyn3() {
-  var a = 42;
-  if (a == 53) {
-    var f = () {
-      a = {};
-    };
-  }
-  return a;
-}
-
-returnInt4() {
-  var a = 42;
-  g() { return a; }
-  return g();
-}
-
-returnNum1() {
-  var a = 42.5;
-  try {
-    g() {
-      var b = {};
-      b = 42;
-      return b;
-    }
-    a = g();
-  } finally {
-  }
-  return a;
-}
-
-returnIntOrNull() {
-  for (var b in [42]) {
-    var bar = 42;
-    f() => bar;
-    bar = null;
-    return f();
-  }
-  return 42;
-}
-
-class A {
-  foo() {
-    f() => this;
-    return f();
-  }
-}
-
-main() {
-  returnInt1();
-  returnDyn1();
-  returnInt2();
-  returnDyn2();
-  returnInt3();
-  returnDyn3();
-  returnInt4();
-  returnNum1();
-  returnIntOrNull();
-  new A().foo();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkReturn(String name, type) {
-      MemberEntity element = findMember(closedWorld, name);
-      Expect.equals(
-          type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
-          name);
-    }
-
-    checkReturn('returnInt1', closedWorld.commonMasks.uint31Type);
-    checkReturn('returnInt2', closedWorld.commonMasks.uint31Type);
-    checkReturn('returnInt3', closedWorld.commonMasks.uint31Type);
-    checkReturn('returnInt4', closedWorld.commonMasks.uint31Type);
-    checkReturn(
-        'returnIntOrNull', closedWorld.commonMasks.uint31Type.nullable());
-
-    checkReturn(
-        'returnDyn1', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn(
-        'returnDyn2', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn(
-        'returnDyn3', closedWorld.commonMasks.dynamicType.nonNullable());
-    checkReturn('returnNum1', closedWorld.commonMasks.numType);
-
-    checkReturnInClass(String className, String methodName, type) {
-      var element = findClassMember(closedWorld, className, methodName);
-      Expect.equals(type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
-    }
-
-    dynamic cls = findClass(closedWorld, 'A');
-    checkReturnInClass('A', 'foo', new TypeMask.nonNullExact(cls, closedWorld));
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart
deleted file mode 100644
index 3b418e7..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart
+++ /dev/null
@@ -1,58 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-
-method(a) {  // Called via [foo] with integer then double.
-  return a;
-}
-
-const foo = method;
-
-returnNum(x) {
-  return foo(x);
-}
-
-main() {
-  returnNum(10);
-  returnNum(10.5);
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkReturn(String name, type) {
-      MemberEntity element = findMember(closedWorld, name);
-      TypeMask returnType = typesInferrer.getReturnTypeOfMember(element);
-      Expect.equals(type, simplify(returnType, closedWorld), name);
-    }
-
-    checkReturn('method', closedWorld.commonMasks.numType);
-    checkReturn('returnNum', closedWorld.commonMasks.numType);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure3_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure3_test.dart
deleted file mode 100644
index 0904d1c..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure3_test.dart
+++ /dev/null
@@ -1,48 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method(a) {  // Called only via [foo2] with a small integer.
-  return a;
-}
-
-const foo = method;
-
-returnInt() {
-  return foo(54);
-}
-
-main() {
-  returnInt();
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkArgument(String functionName, type) {
-          dynamic functionElement = findElement(compiler, functionName);
-          var signature = functionElement.functionSignature;
-          var element = signature.requiredParameters.first;
-          Expect.equals(
-              type,
-              simplify(typesInferrer.getTypeOfParameter(element), closedWorld),
-              functionName);
-        }
-
-        checkArgument('method', closedWorld.commonMasks.uint31Type);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure4_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure4_test.dart
deleted file mode 100644
index 31af6f6..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure4_test.dart
+++ /dev/null
@@ -1,50 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method(a) {  // Called via [foo] with integer then double.
-  return a;
-}
-
-const foo = method;
-
-returnNum(x) {
-  return foo(x);
-}
-
-main() {
-  returnNum(10);
-  returnNum(10.5);
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkArgument(String functionName, type) {
-          dynamic functionElement = findElement(compiler, functionName);
-          var signature = functionElement.functionSignature;
-          var element = signature.requiredParameters.first;
-          Expect.equals(
-              type,
-              simplify(typesInferrer.getTypeOfParameter(element), closedWorld),
-              functionName);
-        }
-
-        checkArgument('method', closedWorld.commonMasks.numType);
-        checkArgument('returnNum', closedWorld.commonMasks.numType);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure5_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure5_test.dart
deleted file mode 100644
index 3546e9c..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure5_test.dart
+++ /dev/null
@@ -1,49 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method(a) {  // Called only via [foo2] with a small integer.
-  return a;
-}
-
-const foo = method;
-
-returnInt() {
-  return foo(54);
-}
-
-main() {
-  returnInt();
-  method(55.2);
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkArgument(String functionName, type) {
-          dynamic functionElement = findElement(compiler, functionName);
-          var signature = functionElement.functionSignature;
-          var element = signature.requiredParameters.first;
-          Expect.equals(
-              type,
-              simplify(typesInferrer.getTypeOfParameter(element), closedWorld),
-              functionName);
-        }
-
-        checkArgument('method', typesInferrer.closedWorld.commonMasks.numType);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure_default_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure_default_test.dart
deleted file mode 100644
index b16c576..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure_default_test.dart
+++ /dev/null
@@ -1,100 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-// [defaultFn_i] is called only via [foo_i]'s default value with a small integer.
-
-defaultFn1(a) => a;
-defaultFn2(a) => a;
-defaultFn3(a) => a;
-defaultFn4(a) => a;
-defaultFn5(a) => a;
-defaultFn6(a) => a;
-
-foo1([fn = defaultFn1]) => fn(54);
-foo2({fn: defaultFn2}) => fn(54);
-foo3([fn = defaultFn3]) => fn(54);
-foo4({fn: defaultFn4}) => fn(54);
-foo5([fn = defaultFn5]) => fn(54);
-foo6({fn: defaultFn6}) => fn(54);
-
-main() {
-  // Direct calls.
-  foo1();
-  foo2();
-  // Indirect calls.
-  (foo3)();
-  (foo4)();
-  // Calls via Function.apply.
-  Function.apply(foo5, []);
-  Function.apply(foo6, []);
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkArgument(String functionName, type) {
-          dynamic functionElement = findElement(compiler, functionName);
-          var signature = functionElement.functionSignature;
-          var element = signature.requiredParameterCount > 0
-              ? signature.requiredParameters.first
-              : signature.optionalParameters.first;
-          Expect.equals(
-              type,
-              simplify(typesInferrer.getTypeOfParameter(element), closedWorld),
-              functionName);
-        }
-
-        checkArgument('foo1', closedWorld.commonMasks.functionType);
-
-        /// 01: ok
-        checkArgument('foo2', closedWorld.commonMasks.functionType);
-
-        /// 02: ok
-        checkArgument('foo3', closedWorld.commonMasks.functionType);
-
-        /// 03: ok
-        checkArgument('foo4', closedWorld.commonMasks.functionType);
-
-        /// 04: ok
-        checkArgument('foo5', closedWorld.commonMasks.dynamicType);
-
-        /// 05: ok
-        checkArgument('foo6', closedWorld.commonMasks.dynamicType);
-
-        /// 06: ok
-
-        checkArgument('defaultFn1', closedWorld.commonMasks.uint31Type);
-
-        /// 07: ok
-        checkArgument('defaultFn2', closedWorld.commonMasks.uint31Type);
-
-        /// 08: ok
-        checkArgument('defaultFn3', closedWorld.commonMasks.uint31Type);
-
-        /// 09: ok
-        checkArgument('defaultFn4', closedWorld.commonMasks.uint31Type);
-
-        /// 10: ok
-        checkArgument('defaultFn5', closedWorld.commonMasks.uint31Type);
-
-        /// 11: ok
-        checkArgument('defaultFn6', closedWorld.commonMasks.uint31Type);
-
-        /// 12: ok
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure_test.dart
deleted file mode 100644
index 0c2d202..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure_test.dart
+++ /dev/null
@@ -1,57 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method1() {
-  return 42;
-}
-
-method2(a) {  // Called only via [foo2] with a small integer.
-  return a;
-}
-
-const foo1 = method1;
-const foo2 = method2;
-
-returnInt1() {
-  return foo1();
-}
-
-returnInt2() {
-  return foo2(54);
-}
-
-main() {
-  returnInt1();
-  returnInt2();
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkReturn(String name, type) {
-          MemberElement element = findElement(compiler, name);
-          dynamic returnType = typesInferrer.getReturnTypeOfMember(element);
-          Expect.equals(type, returnType.simplify(compiler), name);
-        }
-
-        checkReturn('method1', closedWorld.commonMasks.uint31Type);
-        checkReturn('returnInt1', closedWorld.commonMasks.uint31Type);
-
-        checkReturn('method2', closedWorld.commonMasks.uint31Type);
-        checkReturn('returnInt2', closedWorld.commonMasks.uint31Type);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart
deleted file mode 100644
index 47349b4..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// Test that a non-used generative constructor does not prevent
-// inferring types for fields.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-
-class A {
-  final intField;
-  final stringField;
-  A() : intField = 42, stringField = 'foo';
-  A.bar() : intField = 'bar', stringField = 42;
-}
-
-main() {
-  new A();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkFieldTypeInClass(String className, String fieldName, type) {
-      var element = findClassMember(closedWorld, className, fieldName);
-      Expect.isTrue(typesInferrer.getTypeOfMember(element).containsOnly(type));
-    }
-
-    checkFieldTypeInClass('A', 'intField',
-        typesInferrer.closedWorld.commonElements.jsUInt31Class);
-    checkFieldTypeInClass('A', 'stringField',
-        typesInferrer.closedWorld.commonElements.jsStringClass);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart
deleted file mode 100644
index 613466e..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// Test that we are analyzing field parameters correctly.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-
-class A {
-  final dynamicField;
-  A() : dynamicField = 42;
-  A.bar(this.dynamicField);
-}
-
-main() {
-  new A();
-  new A.bar('foo');
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkFieldTypeInClass(String className, String fieldName, type) {
-      var element = findClassMember(closedWorld, className, fieldName);
-      Expect.equals(
-          type, simplify(typesInferrer.getTypeOfMember(element), closedWorld));
-    }
-
-    checkFieldTypeInClass(
-        'A', 'dynamicField', interceptorOrComparable(closedWorld));
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_final_field_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_final_field_test.dart
deleted file mode 100644
index 233ab02..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_final_field_test.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-class A {
-  final intField;
-  final giveUpField1;
-  final giveUpField2;
-  final fieldParameter;
-  A() : intField = 42, giveUpField1 = 'foo', giveUpField2 = 'foo';
-  A.bar() : intField = 54, giveUpField1 = 42, giveUpField2 = new A();
-  A.foo(this.fieldParameter);
-}
-
-main() {
-  new A();
-  new A.bar();
-  new A.foo(42);
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkFieldTypeInClass(String className, String fieldName, type) {
-          dynamic cls = findElement(compiler, className);
-          var element = cls.lookupLocalMember(fieldName);
-          Expect.equals(type,
-              simplify(typesInferrer.getTypeOfMember(element), closedWorld));
-        }
-
-        checkFieldTypeInClass(
-            'A', 'intField', closedWorld.commonMasks.uint31Type);
-        checkFieldTypeInClass(
-            'A', 'giveUpField1', closedWorld.commonMasks.interceptorType);
-        checkFieldTypeInClass('A', 'giveUpField2',
-            closedWorld.commonMasks.dynamicType.nonNullable());
-        checkFieldTypeInClass(
-            'A', 'fieldParameter', closedWorld.commonMasks.uint31Type);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure2_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure2_test.dart
deleted file mode 100644
index 45bcf56..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure2_test.dart
+++ /dev/null
@@ -1,48 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method(a) {  // Called only via [foo] with a small integer.
-  return a;
-}
-
-var foo = method;
-
-returnInt() {
-  return foo(54);
-}
-
-main() {
-  returnInt();
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkArgument(String functionName, type) {
-          dynamic functionElement = findElement(compiler, functionName);
-          var signature = functionElement.functionSignature;
-          var element = signature.requiredParameters.first;
-          Expect.equals(
-              type,
-              simplify(typesInferrer.getTypeOfParameter(element), closedWorld),
-              functionName);
-        }
-
-        checkArgument('method', closedWorld.commonMasks.uint31Type);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure_test.dart
deleted file mode 100644
index c087cf8..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_global_field_closure_test.dart
+++ /dev/null
@@ -1,57 +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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-method1() {
-  return 42;
-}
-
-method2(a) {  // Called only via [foo2] with a small integer.
-  return a;
-}
-
-var foo1 = method1;
-var foo2 = method2;
-
-returnInt1() {
-  return foo1();
-}
-
-returnInt2() {
-  return foo2(54);
-}
-
-main() {
-  returnInt1();
-  returnInt2();
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-
-        checkReturn(String name, type) {
-          MemberElement element = findElement(compiler, name);
-          dynamic returnType = typesInferrer.getReturnTypeOfMember(element);
-          Expect.equals(type, returnType.simplify(compiler), name);
-        }
-
-        checkReturn('method1', closedWorld.commonMasks.uint31Type);
-        checkReturn('returnInt1', closedWorld.commonMasks.uint31Type);
-
-        checkReturn('method2', closedWorld.commonMasks.uint31Type);
-        checkReturn('returnInt2', closedWorld.commonMasks.uint31Type);
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_no_such_method_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_no_such_method_test.dart
deleted file mode 100644
index 50a2f86..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_no_such_method_test.dart
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:expect/expect.dart';
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/types/types.dart';
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST1 = """
-class A {
-  noSuchMethod(im) => 42;
-}
-
-class B extends A {
-  foo();
-}
-
-class C extends B {
-  foo() => {};
-}
-
-var a = [new B(), new C()][0];
-test1() => new A().foo();
-test2() => a.foo();
-test3() => new B().foo();
-test4() => new C().foo();
-test5() => (a ? new A() : new B()).foo();
-test6() => (a ? new B() : new C()).foo();
-
-main() {
-  test1();
-  test2();
-  test3();
-  test4();
-  test5();
-  test6();
-}
-""";
-
-const String TEST2 = """
-abstract class A {
-  noSuchMethod(im) => 42;
-}
-
-class B extends A {
-  foo() => {};
-}
-
-class C extends B {
-  foo() => {};
-}
-
-class D implements A {
-  foo() => {};
-  noSuchMethod(im) => 42.5;
-}
-
-var a = [new B(), new C(), new D()][0];
-test1() => a.foo();
-test2() => new B().foo();
-test3() => new C().foo();
-test4() => (a ? new B() : new C()).foo();
-test5() => (a ? new B() : new D()).foo();
-
-// Can hit A.noSuchMethod, D.noSuchMethod and Object.noSuchMethod.
-test6() => a.bar();
-
-// Can hit A.noSuchMethod.
-test7() => new B().bar();
-test8() => new C().bar();
-test9() => (a ? new B() : new C()).bar();
-
-// Can hit A.noSuchMethod and D.noSuchMethod.
-test10() => (a ? new B() : new D()).bar();
-
-// Can hit D.noSuchMethod.
-test11() => new D().bar();
-
-main() {
-  test1();
-  test2();
-  test3();
-  test4();
-  test5();
-  test6();
-  test7();
-  test8();
-  test9();
-  test10();
-  test11();
-}
-""";
-
-const String TEST3 = """
-class A {
-  // We may ignore this for type inference because syntactically it always
-  // throws an exception.
-  noSuchMethod(im) => throw 'foo';
-}
-
-class B extends A {
-  foo() => {};
-}
-
-class C extends B {
-  foo() => {};
-}
-
-var a = [new B(), new C()][0];
-test1() => new A().foo();
-test2() => a.foo();
-test3() => new B().foo();
-test4() => new C().foo();
-test5() => (a ? new A() : new B()).foo();
-test6() => (a ? new B() : new C()).foo();
-
-main() {
-  test1();
-  test2();
-  test3();
-  test4();
-  test5();
-  test6();
-}
-""";
-
-const String TEST4 = """
-class A {
-  // We may ignore this for type inference because it forwards to a default
-  // noSuchMethod implementation, which always throws an exception.
-  noSuchMethod(im) => super.noSuchMethod(im);
-}
-
-class B extends A {
-  foo() => {};
-}
-
-class C extends B {
-  foo() => {};
-}
-
-var a = [new B(), new C()][0];
-test1() => new A().foo();
-test2() => a.foo();
-test3() => new B().foo();
-test4() => new C().foo();
-test5() => (a ? new A() : new B()).foo();
-test6() => (a ? new B() : new C()).foo();
-
-main() {
-  test1();
-  test2();
-  test3();
-  test4();
-  test5();
-  test6();
-}
-""";
-
-checkReturn(MockCompiler compiler, String name, type) {
-  var typesInferrer = compiler.globalInference.typesInferrerInternal;
-  MemberElement element = findElement(compiler, name);
-  Expect.equals(
-      type,
-      simplify(typesInferrer.getReturnTypeOfMember(element),
-          typesInferrer.closedWorld),
-      name);
-}
-
-test1() async {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST1, uri);
-  await compiler.run(uri);
-  var closedWorld = compiler.resolutionWorldBuilder.closedWorldForTesting;
-  checkReturn(compiler, 'test1', closedWorld.commonMasks.uint31Type);
-  checkReturn(
-      compiler, 'test2', closedWorld.commonMasks.dynamicType.nonNullable());
-  checkReturn(compiler, 'test3', closedWorld.commonMasks.uint31Type);
-  checkReturn(compiler, 'test4', closedWorld.commonMasks.mapType);
-  checkReturn(
-      compiler, 'test5', closedWorld.commonMasks.dynamicType.nonNullable());
-  checkReturn(
-      compiler, 'test6', closedWorld.commonMasks.dynamicType.nonNullable());
-}
-
-test2() async {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST2, uri);
-  await compiler.run(uri);
-  var closedWorld = compiler.resolutionWorldBuilder.closedWorldForTesting;
-  checkReturn(compiler, 'test1', closedWorld.commonMasks.mapType.nonNullable());
-  checkReturn(compiler, 'test2', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test3', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test4', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test5', closedWorld.commonMasks.mapType);
-
-  checkReturn(compiler, 'test6', closedWorld.commonMasks.numType);
-  checkReturn(compiler, 'test7', closedWorld.commonMasks.uint31Type);
-  checkReturn(compiler, 'test8', closedWorld.commonMasks.uint31Type);
-  checkReturn(compiler, 'test9', closedWorld.commonMasks.uint31Type);
-  checkReturn(compiler, 'test10', closedWorld.commonMasks.numType);
-  checkReturn(compiler, 'test11', closedWorld.commonMasks.doubleType);
-}
-
-test3() async {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST3, uri);
-  await compiler.run(uri);
-  var closedWorld = compiler.resolutionWorldBuilder.closedWorldForTesting;
-  checkReturn(compiler, 'test1', const TypeMask.nonNullEmpty());
-  checkReturn(compiler, 'test2', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test3', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test4', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test5', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test6', closedWorld.commonMasks.mapType);
-}
-
-test4() async {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST4, uri);
-  await compiler.run(uri);
-  var closedWorld = compiler.resolutionWorldBuilder.closedWorldForTesting;
-  checkReturn(compiler, 'test1', const TypeMask.nonNullEmpty());
-  checkReturn(compiler, 'test2', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test3', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test4', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test5', closedWorld.commonMasks.mapType);
-  checkReturn(compiler, 'test6', closedWorld.commonMasks.mapType);
-}
-
-main() {
-  asyncTest(() async {
-    await test1();
-    await test2();
-    await test3();
-    await test4();
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_postfix_prefix_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_postfix_prefix_test.dart
deleted file mode 100644
index ff472fb..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_postfix_prefix_test.dart
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = """
-
-class A {
-  get foo => 'string';
-  set foo(value) {}
-  operator[](index) => 'string';
-  operator[]=(index, value) {}
-
-  returnDynamic1() => foo--;
-  returnNum1() => --foo;
-  returnNum2() => foo -= 42;
-
-  returnDynamic2() => this[index]--;
-  returnNum3() => --this[index];
-  returnNum4() => this[index] -= 42;
-
-  returnEmpty3() => this.bar--;
-  returnEmpty1() => --this.bar;
-  returnEmpty2() => this.bar -= 42;
-}
-
-class B extends A {
-  get foo => 42;
-  operator[](index) => 42;
-
-  returnString1() => super.foo--;
-  returnDynamic1() => --super.foo;
-  returnDynamic2() => super.foo -= 42;
-
-  returnString2() => super[index]--;
-  returnDynamic3() => --super[index];
-  returnDynamic4() => super[index] -= 42;
-}
-
-main() {
-  new A()..returnNum1()
-         ..returnNum2()
-         ..returnNum3()
-         ..returnNum4()
-         ..returnNum5()
-         ..returnNum6()
-         ..returnDynamic1()
-         ..returnDynamic2()
-         ..returnDynamic3();
-
-  new B()..returnString1()
-         ..returnString2()
-         ..returnDynamic1()
-         ..returnDynamic2()
-         ..returnDynamic3()
-         ..returnDynamic4();
-}
-""";
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-        var commonMasks = closedWorld.commonMasks;
-
-        checkReturnInClass(String className, String methodName, type) {
-          dynamic cls = findElement(compiler, className);
-          var element = cls.lookupLocalMember(methodName);
-          Expect.equals(
-              type,
-              simplify(
-                  typesInferrer.getReturnTypeOfMember(element), closedWorld),
-              methodName);
-        }
-
-        var subclassOfInterceptor = commonMasks.interceptorType;
-
-        checkReturnInClass('A', 'returnNum1', commonMasks.numType);
-        checkReturnInClass('A', 'returnNum2', commonMasks.numType);
-        checkReturnInClass('A', 'returnNum3', commonMasks.numType);
-        checkReturnInClass('A', 'returnNum4', commonMasks.numType);
-        checkReturnInClass('A', 'returnEmpty1', const TypeMask.nonNullEmpty());
-        checkReturnInClass('A', 'returnEmpty2', const TypeMask.nonNullEmpty());
-        checkReturnInClass('A', 'returnDynamic1', subclassOfInterceptor);
-        checkReturnInClass('A', 'returnDynamic2', subclassOfInterceptor);
-        checkReturnInClass('A', 'returnEmpty3', const TypeMask.nonNullEmpty());
-
-        checkReturnInClass('B', 'returnString1', commonMasks.stringType);
-        checkReturnInClass('B', 'returnString2', commonMasks.stringType);
-        checkReturnInClass(
-            'B', 'returnDynamic1', const TypeMask.nonNullEmpty());
-        checkReturnInClass(
-            'B', 'returnDynamic2', const TypeMask.nonNullEmpty());
-        checkReturnInClass(
-            'B', 'returnDynamic3', const TypeMask.nonNullEmpty());
-        checkReturnInClass(
-            'B', 'returnDynamic4', const TypeMask.nonNullEmpty());
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_test.dart
deleted file mode 100644
index 97d1ff9..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_test.dart
+++ /dev/null
@@ -1,888 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-returnNum1(a) {
-  if (a) return 1;
-  else return 2.5;
-}
-
-returnNum2(a) {
-  if (a) return 1.4;
-  else return 2;
-}
-
-returnInt1(a) {
-  if (a) return 1;
-  else return 2;
-}
-
-returnDouble(a) {
-  if (a) return 1.5;
-  else return 2.5;
-}
-
-returnGiveUp(a) {
-  if (a) return 1;
-  else return 'foo';
-}
-
-returnInt2() {
-  var a = 42;
-  return a++;
-}
-
-returnInt5() {
-  var a = 42;
-  return ++a;
-}
-
-returnInt6() {
-  var a = 42;
-  a++;
-  return a;
-}
-
-returnIntOrNull(a) {
-  if (a) return 42;
-}
-
-returnInt3(a) {
-  if (a) return 42;
-  throw 42;
-}
-
-returnInt4() {
-  return (42);
-}
-
-returnInt7() {
-  return 42.abs();
-}
-
-returnInt8() {
-  return 42.remainder(54);
-}
-
-returnEmpty1() {
-  // Ensure that we don't intrisify a wrong call to [int.remainder].
-  return 42.remainder();
-}
-
-returnEmpty2() {
-  // Ensure that we don't intrisify a wrong call to [int.abs].
-  return 42.abs(42);
-}
-
-testIsCheck1(a) {
-  if (a is int) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck2(a) {
-  if (a is !int) {
-    return 0;
-  } else {
-    return a;
-  }
-}
-
-testIsCheck3(a) {
-  if (a is !int) {
-    print('hello');
-  } else {
-    return a;
-  }
-}
-
-testIsCheck4(a) {
-  if (a is int) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck5(a) {
-  if (a is !int) {
-    return 42;
-  } else {
-    return a;
-  }
-}
-
-testIsCheck6(a) {
-  if (a is !int) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck7(a) {
-  if (a == 'foo' && a is int) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck8(a) {
-  if (a == 'foo' || a is int) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck9(a) {
-  return a is int ? a : 42;
-}
-
-testIsCheck10(a) {
-  return a is !int ? a : 42;
-}
-
-testIsCheck11(a) {
-  return a is !int ? 42 : a;
-}
-
-testIsCheck12(a) {
-  return a is int ? 42 : a;
-}
-
-testIsCheck13(a) {
-  while (a is int) {
-    return a;
-  }
-  return 42;
-}
-
-testIsCheck14(a) {
-  while (a is !int) {
-    return 42;
-  }
-  return a;
-}
-
-testIsCheck15(a) {
-  var c = 42;
-  do {
-    if (a) return c;
-    c = topLevelGetter();
-  } while (c is int);
-  return 42;
-}
-
-testIsCheck16(a) {
-  var c = 42;
-  do {
-    if (a) return c;
-    c = topLevelGetter();
-  } while (c is !int);
-  return 42;
-}
-
-testIsCheck17(a) {
-  var c = 42;
-  for (; c is int;) {
-    if (a) return c;
-    c = topLevelGetter();
-  }
-  return 42;
-}
-
-testIsCheck18(a) {
-  var c = 42;
-  for (; c is int;) {
-    if (a) return c;
-    c = topLevelGetter();
-  }
-  return c;
-}
-
-testIsCheck19(a) {
-  var c = 42;
-  for (; c is !int;) {
-    if (a) return c;
-    c = topLevelGetter();
-  }
-  return 42;
-}
-
-testIsCheck20() {
-  var c = topLevelGetter();
-  if (c != null && c is! bool && c is! int) {
-    return 42;
-  } else if (c is String) {
-    return c;
-  } else {
-    return 68;
-  }
-}
-
-testIsCheck21(a) {
-  if (a is int || a is List) {
-    return a;
-  } else {
-    return 42;
-  }
-}
-
-testIsCheck22(a) {
-  return (a is int || a is List) ? a : 42;
-}
-
-testIsCheck23(a) {
-  if (a is! int) throw 'foo';
-  return a;
-}
-
-testIsCheck24(a) {
-  if (a is! int) return 42;
-  return a;
-}
-
-testIsCheck25(a) {
-  if (a is int) throw 'foo';
-  return a;
-}
-
-testIsCheck26(a) {
-  if (a is int) {
-  } else {
-    throw 42;
-  }
-  return a;
-}
-
-testIsCheck27(a) {
-  if (a is int) {
-  } else {
-    return 42;
-  }
-  return a;
-}
-
-testIsCheck28(a) {
-  if (a is int) {
-  } else {
-  }
-  return a;
-}
-
-testIsCheck29(a) {
-  if (a is int) {}
-  return a;
-}
-
-testIf1(a) {
-  var c = null;
-  if (a) {
-    c = 10;
-  } else {
-  }
-  return c;
-}
-
-testIf2(a) {
-  var c = null;
-  if (a) {
-  } else {
-    c = 10;
-  }
-  return c;
-}
-
-returnAsString() {
-  return topLevelGetter() as String;
-}
-
-returnIntAsNum() {
-  return 0 as num;
-}
-
-typedef int Foo();
-
-returnAsTypedef() {
-  return topLevelGetter() as Foo;
-}
-
-testDeadCode() {
-  return 42;
-  return 'foo';
-}
-
-testLabeledIf(a) {
-  var c;
-  L1: if (a > 1) {
-    if (a == 2) {
-      break L1;
-    }
-    c = 42;
-  } else {
-    c = 38;
-  }
-  return c;
-}
-
-testSwitch1() {
-  var a = null;
-  switch (topLevelGetter) {
-    case 100: a = 42.5; break;
-    case 200: a = 42; break;
-  }
-  return a;
-}
-
-testSwitch2() {
-  var a = null;
-  switch (topLevelGetter) {
-    case 100: a = 42; break;
-    case 200: a = 42; break;
-    default:
-      a = 43;
-  }
-  return a;
-}
-
-testSwitch3() {
-  var a = 42;
-  var b;
-  switch (topLevelGetter) {
-    L1: case 1: b = a + 42; break;
-    case 2: a = 'foo'; continue L1;
-  }
-  return b;
-}
-
-testSwitch4() {
-  switch (topLevelGetter) {
-    case 1: break;
-    default: break;
-  }
-  return 42;
-}
-
-testSwitch5() {
-  switch (topLevelGetter) {
-    case 1: return 1;
-    default: return 2;
-  }
-}
-
-testContinue1() {
-  var a = 42;
-  var b;
-  while (true) {
-    b = a + 54;
-    if (b == 42) continue;
-    a = 'foo';
-  }
-  return b;
-}
-
-testBreak1() {
-  var a = 42;
-  var b;
-  while (true) {
-    b = a + 54;
-    if (b == 42) break;
-    b = 'foo';
-  }
-  return b;
-}
-
-testContinue2() {
-  var a = 42;
-  var b;
-  while (true) {
-    b = a + 54;
-    if (b == 42) {
-      b = 'foo';
-      continue;
-    }
-  }
-  return b;
-}
-
-testBreak2() {
-  var a = 42;
-  var b;
-  while (true) {
-    b = a + 54;
-    if (b == 42) {
-      a = 'foo';
-      break;
-    }
-  }
-  return b;
-}
-
-testReturnElementOfConstList1() {
-  return const [42][0];
-}
-
-testReturnElementOfConstList2() {
-  return topLevelConstList[0];
-}
-
-testReturnItselfOrInt(a) {
-  if (a) return 42;
-  return testReturnItselfOrInt(a);
-}
-
-testDoWhile1() {
-  var a = 42;
-  do {
-    a = 'foo';
-  } while (true);
-  return a;
-}
-
-testDoWhile2() {
-  var a = 42;
-  do {
-    a = 'foo';
-    return;
-  } while (true);
-  return a;
-}
-
-testDoWhile3() {
-  var a = 42;
-  do {
-    a = 'foo';
-    if (true) continue;
-    return 42;
-  } while (true);
-  return a;
-}
-
-testDoWhile4() {
-  var a = 'foo';
-  do {
-    a = 54;
-    if (true) break;
-    return 3.5;
-  } while (true);
-  return a;
-}
-
-testSpecialization1() {
-  var a = topLevelGetter();
-  a - 42;
-  return a;
-}
-
-testSpecialization2() {
-  var a = topLevelGetter();
-  // Make [a] a captured variable. This should disable receiver
-  // specialization on [a].
-  (() => a.toString())();
-  a - 42;
-  return a;
-}
-
-testSpecialization3() {
-  var a = returnDynamic() ? null : 42;
-  a.toString();
-  // Test that calling an [Object] method on [a] will not lead to
-  // infer that [a] is not null;
-  return a;
-}
-
-testReturnNull1(a) {
-  if (a == null) return a;
-  return null;
-}
-
-testReturnNull2(a) {
-  if (a != null) return null;
-  return a;
-}
-
-testReturnNull3(a) {
-  if (a == null) return 42;
-  return a;
-}
-
-testReturnNull4() {
-  var a = topLevelGetter();
-  if (a == null) return a;
-  return null;
-}
-
-testReturnNull5() {
-  var a = topLevelGetter();
-  if (a != null) return null;
-  return a;
-}
-
-testReturnNull6() {
-  var a = topLevelGetter();
-  if (a == null) return 42;
-  return a;
-}
-
-testReturnNotEquals() {
-  return new A() != 54;
-}
-
-testReturnInvokeDynamicGetter() => new A().myFactory();
-
-var topLevelConstList = const [42];
-
-get topLevelGetter => 42;
-returnDynamic() => topLevelGetter(42);
-returnTopLevelGetter() => topLevelGetter;
-
-class A {
-  factory A() = A.generative;
-  A.generative();
-  operator==(other) => 42;
-
-  get myField => 42;
-  set myField(a) {}
-  returnInt1() => ++myField;
-  returnInt2() => ++this.myField;
-  returnInt3() => this.myField += 42;
-  returnInt4() => myField += 42;
-  operator[](index) => 42;
-  operator[]= (index, value) {}
-  returnInt5() => ++this[0];
-  returnInt6() => this[0] += 1;
-
-  get myFactory => () => 42;
-}
-
-class B extends A {
-  B() : super.generative();
-  returnInt1() => ++new A().myField;
-  returnInt2() => new A().myField += 4;
-  returnInt3() => ++new A()[0];
-  returnInt4() => new A()[0] += 42;
-  returnInt5() => ++super.myField;
-  returnInt6() => super.myField += 4;
-  returnInt7() => ++super[0];
-  returnInt8() => super[0] += 54;
-  returnInt9() => super.myField;
-}
-
-class C {
-  var myField = 42;
-  C();
-
-  returnInt1() => ++myField;
-  returnInt2() => ++this.myField;
-  returnInt3() => this.myField += 42;
-  returnInt4() => myField += 42;
-  operator[](index) => myField;
-  operator[]= (index, value) {}
-  returnInt5() => ++this[0];
-  returnInt6() => this[0] += 1;
-}
-
-testCascade1() {
-  return [1, 2, 3]..add(4)..add(5);
-}
-
-testCascade2() {
-  return new CascadeHelper()
-      ..a = "hello"
-      ..b = 42
-      ..i += 1;
-}
-
-class CascadeHelper {
-  var a, b;
-  var i = 0;
-}
-
-main() {
-  // Ensure a function class is being instantiated.
-  () => 42;
-  returnNum1(true);
-  returnNum2(true);
-  returnInt1(true);
-  returnInt2();
-  returnInt3(true);
-  returnInt4();
-  returnDouble(true);
-  returnGiveUp(true);
-  returnInt5();
-  returnInt6();
-  returnInt7();
-  returnInt8();
-  returnIntOrNull(true);
-  returnDynamic();
-  returnEmpty1();
-  returnEmpty2();
-  testIsCheck1(topLevelGetter());
-  testIsCheck2(topLevelGetter());
-  testIsCheck3(topLevelGetter());
-  testIsCheck4(topLevelGetter());
-  testIsCheck5(topLevelGetter());
-  testIsCheck6(topLevelGetter());
-  testIsCheck7(topLevelGetter());
-  testIsCheck8(topLevelGetter());
-  testIsCheck9(topLevelGetter());
-  testIsCheck10(topLevelGetter());
-  testIsCheck11(topLevelGetter());
-  testIsCheck12(topLevelGetter());
-  testIsCheck13(topLevelGetter());
-  testIsCheck14(topLevelGetter());
-  testIsCheck15(topLevelGetter());
-  testIsCheck16(topLevelGetter());
-  testIsCheck17(topLevelGetter());
-  testIsCheck18(topLevelGetter());
-  testIsCheck19(topLevelGetter());
-  testIsCheck20();
-  testIsCheck21(topLevelGetter());
-  testIsCheck22(topLevelGetter());
-  testIsCheck23(topLevelGetter());
-  testIsCheck24(topLevelGetter());
-  testIsCheck25(topLevelGetter());
-  testIsCheck26(topLevelGetter());
-  testIsCheck27(topLevelGetter());
-  testIsCheck28(topLevelGetter());
-  testIsCheck29(topLevelGetter());
-  testIf1(topLevelGetter());
-  testIf2(topLevelGetter());
-  returnAsString();
-  returnIntAsNum();
-  returnAsTypedef();
-  returnTopLevelGetter();
-  testDeadCode();
-  testLabeledIf(true);
-  testSwitch1();
-  testSwitch2();
-  testSwitch3();
-  testSwitch4();
-  testSwitch5();
-  testContinue1();
-  testBreak1();
-  testContinue2();
-  testBreak2();
-  testDoWhile1();
-  testDoWhile2();
-  testDoWhile3();
-  testDoWhile4();
-  new A() == null;
-  new A()..returnInt1()
-         ..returnInt2()
-         ..returnInt3()
-         ..returnInt4()
-         ..returnInt5()
-         ..returnInt6();
-
-  new B()..returnInt1()
-         ..returnInt2()
-         ..returnInt3()
-         ..returnInt4()
-         ..returnInt5()
-         ..returnInt6()
-         ..returnInt7()
-         ..returnInt8()
-         ..returnInt9();
-
-  new C()..returnInt1()
-         ..returnInt2()
-         ..returnInt3()
-         ..returnInt4()
-         ..returnInt5()
-         ..returnInt6();
-  testReturnElementOfConstList1();
-  testReturnElementOfConstList2();
-  testReturnItselfOrInt(topLevelGetter());
-  testReturnInvokeDynamicGetter();
-  testCascade1();
-  testCascade2();
-  testSpecialization1();
-  testSpecialization2();
-  testSpecialization3();
-  testReturnNull1(topLevelGetter());
-  testReturnNull2(topLevelGetter());
-  testReturnNull3(topLevelGetter());
-  testReturnNull4();
-  testReturnNull5();
-  testReturnNull6();
-  testReturnNotEquals();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var commonMasks = closedWorld.commonMasks;
-
-    checkReturn(String name, type) {
-      MemberEntity element = findMember(closedWorld, name);
-      Expect.equals(
-          type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
-          name);
-    }
-
-    var interceptorType = commonMasks.interceptorType;
-    var interceptorOrComparableType = interceptorOrComparable(closedWorld);
-
-    checkReturn('returnNum1', commonMasks.numType);
-    checkReturn('returnNum2', commonMasks.numType);
-    checkReturn('returnInt1', commonMasks.uint31Type);
-    checkReturn('returnInt2', commonMasks.uint31Type);
-    checkReturn('returnDouble', commonMasks.doubleType);
-    checkReturn('returnGiveUp', interceptorOrComparableType);
-    checkReturn('returnInt5', commonMasks.uint32Type); // uint31+uint31->uint32
-    checkReturn('returnInt6', commonMasks.uint32Type); // uint31+uint31->uint32
-    checkReturn('returnIntOrNull', commonMasks.uint31Type.nullable());
-    checkReturn('returnInt3', commonMasks.uint31Type);
-    checkReturn('returnDynamic', commonMasks.dynamicType);
-    checkReturn('returnInt4', commonMasks.uint31Type);
-    checkReturn('returnInt7', commonMasks.positiveIntType);
-    checkReturn('returnInt8', commonMasks.positiveIntType);
-    checkReturn('returnEmpty1', const TypeMask.nonNullEmpty());
-    checkReturn('returnEmpty2', const TypeMask.nonNullEmpty());
-    TypeMask intType = new TypeMask.nonNullSubtype(
-        closedWorld.commonElements.intClass, closedWorld);
-    checkReturn('testIsCheck1', intType);
-    checkReturn('testIsCheck2', intType);
-    checkReturn('testIsCheck3', intType.nullable());
-    checkReturn('testIsCheck4', intType);
-    checkReturn('testIsCheck5', intType);
-    checkReturn('testIsCheck6', commonMasks.dynamicType);
-    checkReturn('testIsCheck7', intType);
-    checkReturn('testIsCheck8', commonMasks.dynamicType);
-    checkReturn('testIsCheck9', intType);
-    checkReturn('testIsCheck10', commonMasks.dynamicType);
-    checkReturn('testIsCheck11', intType);
-    checkReturn('testIsCheck12', commonMasks.dynamicType);
-    checkReturn('testIsCheck13', intType);
-    checkReturn('testIsCheck14', commonMasks.dynamicType);
-    // TODO(29309): Re-enable when 29309 is fixed.
-    // checkReturn('testIsCheck15', intType);
-    checkReturn('testIsCheck16', commonMasks.dynamicType);
-    checkReturn('testIsCheck17', intType);
-    checkReturn('testIsCheck18', commonMasks.dynamicType);
-    checkReturn('testIsCheck19', commonMasks.dynamicType);
-    checkReturn('testIsCheck20', interceptorOrComparableType);
-    checkReturn('testIsCheck21', commonMasks.dynamicType);
-    checkReturn('testIsCheck22', commonMasks.dynamicType);
-    checkReturn('testIsCheck23', intType);
-    checkReturn('testIsCheck24', intType);
-    checkReturn('testIsCheck25', commonMasks.dynamicType);
-    checkReturn('testIsCheck26', intType);
-    checkReturn('testIsCheck27', intType);
-    checkReturn('testIsCheck28', commonMasks.dynamicType);
-    checkReturn('testIsCheck29', commonMasks.dynamicType);
-    checkReturn('testIf1', commonMasks.uint31Type.nullable());
-    checkReturn('testIf2', commonMasks.uint31Type.nullable());
-    checkReturn(
-        'returnAsString',
-        new TypeMask.subtype(
-            closedWorld.commonElements.stringClass, closedWorld));
-    checkReturn('returnIntAsNum', commonMasks.uint31Type);
-    checkReturn('returnAsTypedef', commonMasks.functionType.nullable());
-    checkReturn('returnTopLevelGetter', commonMasks.uint31Type);
-    checkReturn('testDeadCode', commonMasks.uint31Type);
-    checkReturn('testLabeledIf', commonMasks.uint31Type.nullable());
-    checkReturn(
-        'testSwitch1',
-        simplify(
-            commonMasks.intType
-                .union(commonMasks.doubleType, closedWorld)
-                .nullable(),
-            closedWorld));
-    checkReturn('testSwitch2', commonMasks.uint31Type);
-    checkReturn('testSwitch3', interceptorOrComparableType.nullable());
-    checkReturn('testSwitch4', commonMasks.uint31Type);
-    checkReturn('testSwitch5', commonMasks.uint31Type);
-    checkReturn('testContinue1', interceptorOrComparableType.nullable());
-    checkReturn('testBreak1', interceptorOrComparableType.nullable());
-    checkReturn('testContinue2', interceptorOrComparableType.nullable());
-    checkReturn('testBreak2', commonMasks.uint32Type.nullable());
-    checkReturn('testReturnElementOfConstList1', commonMasks.uint31Type);
-    checkReturn('testReturnElementOfConstList2', commonMasks.uint31Type);
-    checkReturn('testReturnItselfOrInt', commonMasks.uint31Type);
-    checkReturn('testReturnInvokeDynamicGetter', commonMasks.dynamicType);
-
-    checkReturn('testDoWhile1', commonMasks.stringType);
-    checkReturn('testDoWhile2', commonMasks.nullType);
-    checkReturn('testDoWhile3', commonMasks.uint31Type);
-    checkReturn('testDoWhile4', commonMasks.numType);
-
-    checkReturnInClass(String className, String methodName, type) {
-      var element = findClassMember(closedWorld, className, methodName);
-      Expect.equals(
-          type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
-          '$className:$methodName');
-    }
-
-    checkReturnInClass('A', 'returnInt1', commonMasks.uint32Type);
-    checkReturnInClass('A', 'returnInt2', commonMasks.uint32Type);
-    checkReturnInClass('A', 'returnInt3', commonMasks.uint32Type);
-    checkReturnInClass('A', 'returnInt4', commonMasks.uint32Type);
-    checkReturnInClass('A', 'returnInt5', commonMasks.uint32Type);
-    checkReturnInClass('A', 'returnInt6', commonMasks.uint32Type);
-    checkReturnInClass('A', '==', interceptorType);
-
-    checkReturnInClass('B', 'returnInt1', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt2', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt3', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt4', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt5', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt6', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt7', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt8', commonMasks.uint32Type);
-    checkReturnInClass('B', 'returnInt9', commonMasks.uint31Type);
-
-    checkReturnInClass('C', 'returnInt1', commonMasks.positiveIntType);
-    checkReturnInClass('C', 'returnInt2', commonMasks.positiveIntType);
-    checkReturnInClass('C', 'returnInt3', commonMasks.positiveIntType);
-    checkReturnInClass('C', 'returnInt4', commonMasks.positiveIntType);
-    checkReturnInClass('C', 'returnInt5', commonMasks.positiveIntType);
-    checkReturnInClass('C', 'returnInt6', commonMasks.positiveIntType);
-
-    checkReturn('testCascade1', commonMasks.growableListType);
-    ClassEntity clsCascadeHelper = findClass(closedWorld, 'CascadeHelper');
-    checkReturn('testCascade2',
-        new TypeMask.nonNullExact(clsCascadeHelper, closedWorld));
-    checkReturn('testSpecialization1', commonMasks.numType);
-    checkReturn('testSpecialization2', commonMasks.dynamicType);
-    checkReturn('testSpecialization3', commonMasks.uint31Type.nullable());
-    checkReturn('testReturnNull1', commonMasks.nullType);
-    checkReturn('testReturnNull2', commonMasks.nullType);
-    checkReturn('testReturnNull3', commonMasks.dynamicType);
-    checkReturn('testReturnNull4', commonMasks.nullType);
-    checkReturn('testReturnNull5', commonMasks.nullType);
-    checkReturn('testReturnNull6', commonMasks.dynamicType);
-    checkReturn('testReturnNotEquals', commonMasks.boolType);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart
deleted file mode 100644
index bfe19ca..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-returnInt1() {
-  var a = 42;
-  try {
-    a = 54;
-  } catch (e){
-  }
-  return a;
-}
-
-returnDyn1() {
-  var a = 42;
-  try {
-    a = 'foo';
-  } catch (e){
-  }
-  return a;
-}
-
-returnInt2() {
-  var a = 42;
-  try {
-    a = 54;
-  } catch (e){
-    a = 2;
-  }
-  return a;
-}
-
-returnDyn2() {
-  var a = 42;
-  try {
-    a = 54;
-  } catch (e){
-    a = 'foo';
-  }
-  return a;
-}
-
-returnInt3() {
-  var a = 42;
-  try {
-    a = 54;
-  } catch (e){
-    a = 'foo';
-  } finally {
-    a = 4;
-  }
-  return a;
-}
-
-returnDyn3() {
-  var a = 42;
-  try {
-    a = 54;
-  } on String catch (e) {
-    a = 2;
-  } on Object catch (e) {
-    a = 'foo';
-  }
-  return a;
-}
-
-returnInt4() {
-  var a = 42;
-  try {
-    a = 54;
-  } on String catch (e) {
-    a = 2;
-  } on Object catch (e) {
-    a = 32;
-  }
-  return a;
-}
-
-returnDyn4() {
-  var a = 42;
-  if (a == 54) {
-    try {
-      a = 'foo';
-    } catch (e) {
-    }
-  }
-  return a;
-}
-
-returnInt5() {
-  var a = 42;
-  if (a == 54) {
-    try {
-      a = 42;
-    } catch (e) {
-    }
-  }
-  return a;
-}
-
-returnDyn5() {
-  var a = 42;
-  if (a == 54) {
-    try {
-      a = 'foo';
-      print(a);
-      a = 42;
-    } catch (e) {
-    }
-  }
-  return a;
-}
-
-returnInt6() {
-  try {
-    throw 42;
-  } on int catch (e) {
-    return e;
-  }
-  return 42;
-}
-
-returnDyn6() {
-  try {
-    throw 42;
-  } catch (e) {
-    return e;
-  }
-}
-
-returnInt7() {
-  var a = 'foo';
-  try {
-    a = 42;
-    return a;
-  } catch (e) {
-  }
-  return 2;
-}
-
-main() {
-  returnInt1();
-  returnDyn1();
-  returnInt2();
-  returnDyn2();
-  returnInt3();
-  returnDyn3();
-  returnInt4();
-  returnDyn4();
-  returnInt5();
-  returnDyn5();
-  returnInt6();
-  returnDyn6();
-  returnInt7();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var commonMasks = closedWorld.commonMasks;
-
-    checkReturn(String name, type) {
-      MemberEntity element = findMember(closedWorld, name);
-      Expect.equals(type,
-          simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
-    }
-
-    checkReturn('returnInt1', commonMasks.uint31Type);
-    checkReturn('returnInt2', commonMasks.uint31Type);
-    checkReturn('returnInt3', commonMasks.uint31Type);
-    checkReturn('returnInt4', commonMasks.uint31Type);
-    checkReturn('returnInt5', commonMasks.uint31Type);
-    checkReturn(
-        'returnInt6',
-        new TypeMask.nonNullSubtype(
-            closedWorld.commonElements.intClass, closedWorld));
-
-    var subclassOfInterceptor = interceptorOrComparable(closedWorld);
-
-    checkReturn('returnDyn1', subclassOfInterceptor);
-    checkReturn('returnDyn2', subclassOfInterceptor);
-    checkReturn('returnDyn3', subclassOfInterceptor);
-    checkReturn('returnDyn4', subclassOfInterceptor);
-    checkReturn('returnDyn5', subclassOfInterceptor);
-    checkReturn('returnDyn6', commonMasks.dynamicType);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart
deleted file mode 100644
index ae5835a..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-var a = '';
-class A {
-  operator+(other) => other;
-}
-
-foo() {
-  // The following '+' call will first say that it may call A::+,
-  // String::+, or int::+. After all methods have been analyzed, we know
-  // that a is of type String, and therefore, this method cannot call
-  // A::+. Therefore, the type of the parameter of A::+ will be the
-  // one given by the other calls.
-  return a + 'foo';
-}
-
-main() {
-  new A() + 42;
-  foo();
-}
-""";
-
-void main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-
-    checkReturnInClass(String className, String methodName, type) {
-      var element = findClassMember(closedWorld, className, methodName);
-      Expect.equals(type, typesInferrer.getReturnTypeOfMember(element));
-    }
-
-    checkReturnInClass(
-        'A', '+', typesInferrer.closedWorld.commonMasks.uint31Type);
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/type_inference6_test.dart b/tests/compiler/dart2js/inference/type_inference6_test.dart
deleted file mode 100644
index 659e104..0000000
--- a/tests/compiler/dart2js/inference/type_inference6_test.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = r"""
-foo() {
-  var a = [1, 2, 3];
-  return a.first;
-}
-
-main() {
-  foo();
-}
-""";
-
-main() {
-  runTest({bool useKernel}) async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': TEST},
-        options: useKernel ? [Flags.useKernel] : []);
-    Expect.isTrue(result.isSuccess);
-    var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var commonMasks = closedWorld.commonMasks;
-    MemberEntity element = findMember(closedWorld, "foo");
-    var mask = typesInferrer.getReturnTypeOfMember(element);
-    Expect.equals(commonMasks.uint31Type, simplify(mask, closedWorld));
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTest(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTest(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/type_inference7_test.dart b/tests/compiler/dart2js/inference/type_inference7_test.dart
deleted file mode 100644
index fd12b55..0000000
--- a/tests/compiler/dart2js/inference/type_inference7_test.dart
+++ /dev/null
@@ -1,84 +0,0 @@
-// 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import "package:async_helper/async_helper.dart";
-import "package:expect/expect.dart";
-import '../compiler_helper.dart';
-import 'type_mask_test_helper.dart';
-import 'dart:async';
-
-const String TEST = r"""
-foo(x, [y]) => y;
-
-main() {
-  assert(foo('Hi', true), foo(true));
-  foo(1);
-}
-""";
-
-Future runTest() async {
-  Uri uri = new Uri(scheme: 'source');
-  {
-    // Assertions enabled:
-    var compiler = mockCompilerFor(TEST, uri, enableUserAssertions: true);
-    await compiler.run(uri);
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var commonMasks = closedWorld.commonMasks;
-    MethodElement foo = findElement(compiler, "foo");
-    // Return type is null|bool.
-    var mask = typesInferrer.getReturnTypeOfMember(foo);
-    Expect.isTrue(mask.isNullable);
-    Expect.equals(
-        commonMasks.boolType, simplify(mask.nonNullable(), closedWorld));
-    // First parameter is uint31|String|bool.
-    dynamic mask1 = typesInferrer.getTypeOfParameter(foo.parameters[0]);
-    Expect.isTrue(mask1.isUnion);
-    var expectedTypes = new Set.from(
-        [commonMasks.uint31Type, commonMasks.stringType, commonMasks.boolType]);
-    for (var typeMask in mask1.disjointMasks) {
-      Expect.isFalse(typeMask.isNullable);
-      var simpleType = simplify(typeMask, closedWorld);
-      Expect.isTrue(expectedTypes.remove(simpleType), "$simpleType");
-    }
-    Expect.isTrue(expectedTypes.isEmpty);
-    // Second parameter is bool or null.
-    var mask2 = typesInferrer.getTypeOfParameter(foo.parameters[1]);
-    Expect.isTrue(mask2.isNullable);
-    Expect.equals(
-        commonMasks.boolType, simplify(mask2.nonNullable(), closedWorld));
-  }
-
-  {
-    // Assertions disabled:
-    var compiler = mockCompilerFor(TEST, uri, enableUserAssertions: false);
-    await compiler.run(uri);
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
-    var commonMasks = closedWorld.commonMasks;
-    MethodElement foo = findElement(compiler, "foo");
-    // Return type is null.
-    var mask = typesInferrer.getReturnTypeOfMember(foo);
-    Expect.isTrue(mask.isNullable);
-    Expect.isTrue(mask.nonNullable().isEmpty);
-    // First parameter is uint31.
-    var mask1 = typesInferrer.getTypeOfParameter(foo.parameters[0]);
-    Expect.isFalse(mask1.isNullable);
-    Expect.equals(commonMasks.uint31Type, simplify(mask1, closedWorld));
-    // Second parameter is null.
-    var mask2 = typesInferrer.getTypeOfParameter(foo.parameters[1]);
-    Expect.isTrue(mask2.isNullable);
-    Expect.isTrue(simplify(mask2.nonNullable(), closedWorld).isEmpty);
-  }
-}
-
-main() {
-  asyncStart();
-  runTest().then((_) {
-    // Make sure that the type is still correct when we do a second compilation.
-    return runTest();
-  }).whenComplete(asyncEnd);
-}
diff --git a/tests/compiler/dart2js/inference/type_inference8_test.dart b/tests/compiler/dart2js/inference/type_inference8_test.dart
index 18c4aa7..9c37e97 100644
--- a/tests/compiler/dart2js/inference/type_inference8_test.dart
+++ b/tests/compiler/dart2js/inference/type_inference8_test.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.
 
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
+/// TODO(johnniwinther): Move this test to the codegen folder.
 
 import "package:async_helper/async_helper.dart";
 import "package:compiler/src/constants/values.dart";
diff --git a/tests/compiler/dart2js/inference/type_inference_switch_test.dart b/tests/compiler/dart2js/inference/type_inference_switch_test.dart
deleted file mode 100644
index 9823a26..0000000
--- a/tests/compiler/dart2js/inference/type_inference_switch_test.dart
+++ /dev/null
@@ -1,170 +0,0 @@
-// 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST1 = r"""
-foo(int x) {
-  var a = "one";
-  switch (x) {
-    case 1:
-      a = "two";
-      break;
-    case 2:
-      break;
-  }
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-const String TEST2 = r"""
-foo(int x) {
-  var a;
-  switch (x) {
-    case 1:
-      a = "two";
-      break;
-    case 2:
-      break;
-  }
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-const String TEST3 = r"""
-foo(int x) {
-  var a;
-  switch (x) {
-    case 1:
-      a = 1;
-    case 2:  // illegal fall through
-      a = 2;
-      break;
-  }
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-const String TEST4 = r"""
-foo(int x) {
-  var a;
-  switch (x) {
-    case 1:
-      a = 1;
-    case 2:  // illegal fall through
-      a = 2;
-      break;
-    default:
-      a = 0;
-  }
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-const String TEST5 = r"""
-foo(int x) {
-  var a;
-  switch (x) {
-    case 1:
-      a = 1;
-      break;
-    case 2:
-      a = 2;
-      break;
-    default:
-  }
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-const String TEST6 = r"""
-foo(int x) {
-  var a;
-  do {  // add extra locals scope
-    switch (x) {
-      case 1:
-        a = 1;
-        break;
-      case 2:
-        a = 2;
-        break;
-    }
-  } while (false);
-
-  return a;
-}
-
-main() {
-  foo(new DateTime.now().millisecondsSinceEpoch);
-}
-""";
-
-main() {
-  runTests({bool useKernel}) async {
-    runTest(String test, checker) async {
-      CompilationResult result = await runCompiler(
-          memorySourceFiles: {'main.dart': test},
-          options: useKernel ? [Flags.useKernel] : []);
-      Expect.isTrue(result.isSuccess);
-      var compiler = result.compiler;
-      var typesInferrer = compiler.globalInference.typesInferrerInternal;
-      var closedWorld = typesInferrer.closedWorld;
-      var commonMasks = closedWorld.commonMasks;
-
-      checkTypeOf(String name, TypeMask type) {
-        FunctionEntity element = findMember(closedWorld, name);
-        var mask = typesInferrer.getReturnTypeOfMember(element);
-        Expect.equals(type, simplify(mask, closedWorld));
-      }
-
-      checker(commonMasks, checkTypeOf);
-    }
-
-    await runTest(TEST1, (t, c) => c("foo", t.stringType));
-    await runTest(TEST2, (t, c) => c("foo", t.stringType.nullable()));
-    await runTest(TEST3, (t, c) => c("foo", t.uint31Type.nullable()));
-    await runTest(TEST4, (t, c) => c("foo", t.uint31Type));
-    await runTest(TEST5, (t, c) => c("foo", t.uint31Type.nullable()));
-    await runTest(TEST6, (t, c) => c("foo", t.uint31Type.nullable()));
-  }
-
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTests(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTests(useKernel: true);
-  });
-}
diff --git a/tests/compiler/dart2js/inlining/inlining_test.dart b/tests/compiler/dart2js/inlining/inlining_test.dart
index aeb1207..d3a6f0b 100644
--- a/tests/compiler/dart2js/inlining/inlining_test.dart
+++ b/tests/compiler/dart2js/inlining/inlining_test.dart
@@ -28,7 +28,7 @@
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(
         dataDir, computeMemberAstInlinings, computeMemberIrInlinings,
-        args: args, skipforAst: ['external.dart'], skipForKernel: []);
+        args: args, skipForAst: ['external.dart'], skipForKernel: []);
   });
 }
 
diff --git a/tests/compiler/dart2js/mirrors/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors/mirrors_used_test.dart
index f82d85d..6aa3ca8 100644
--- a/tests/compiler/dart2js/mirrors/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors/mirrors_used_test.dart
@@ -70,7 +70,7 @@
     // 2. Some code was refactored, and there are more methods.
     // Either situation could be problematic, but in situation 2, it is often
     // acceptable to increase [expectedMethodCount] a little.
-    int expectedMethodCount = 477;
+    int expectedMethodCount = 478;
     Expect.isTrue(
         generatedCode.length <= expectedMethodCount,
         'Too many compiled methods: '
diff --git a/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart b/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
index 7abf3d1..e289b2c 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
@@ -37,6 +37,30 @@
   "third_party/pkg/collection/lib/src/functions.dart": const [
     "Method type variables are treated as `dynamic` in `as` expressions."
   ],
+  "pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/front_end/lib/src/fasta/kernel/body_builder.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/visitor.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/text/ast_to_text.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/target/vm.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/clone.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_to_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_from_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
 };
 
 void main() {
diff --git a/tests/compiler/dart2js/old_frontend/analyze_test_test.dart b/tests/compiler/dart2js/old_frontend/analyze_test_test.dart
index 3cf3f42..573c380 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_test_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_test_test.dart
@@ -23,6 +23,30 @@
   "pkg/kernel/lib/transformations/closure/": const [
     "Duplicated library name 'kernel.transformations.closure.converter'",
   ],
+  "pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/front_end/lib/src/fasta/kernel/body_builder.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/visitor.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/text/ast_to_text.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/target/vm.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/clone.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_to_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_from_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
 };
 
 const List<String> SKIP_LIST = const <String>[
diff --git a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
index f0e1c8d..6ee6b5c 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
@@ -58,6 +58,30 @@
   "pkg/kernel/lib/transformations/closure/": const [
     "Duplicated library name 'kernel.transformations.closure.converter'",
   ],
+  "pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/front_end/lib/src/fasta/kernel/body_builder.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/visitor.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/text/ast_to_text.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/target/vm.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/clone.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_to_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
+  "pkg/kernel/lib/binary/ast_from_binary.dart": const [
+    "Library 'dart:core' doesn't export a 'MapEntry' declaration.",
+  ],
 };
 
 void main() {
diff --git a/tests/compiler/dart2js/old_frontend/method_type_variable_test.dart b/tests/compiler/dart2js/old_frontend/method_type_variable_test.dart
new file mode 100644
index 0000000..b0c0d4e
--- /dev/null
+++ b/tests/compiler/dart2js/old_frontend/method_type_variable_test.dart
@@ -0,0 +1,141 @@
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/diagnostics/messages.dart';
+import 'package:expect/expect.dart';
+import '../memory_compiler.dart';
+
+runTest(String code,
+    {List<MessageKind> expectedWarnings: const <MessageKind>[],
+    List<MessageKind> expectedHints: const <MessageKind>[]}) async {
+  print('--test--------------------------------------------------------------');
+  print(code);
+  DiagnosticCollector collector = new DiagnosticCollector();
+  await runCompiler(
+      memorySourceFiles: {'main.dart': code}, diagnosticHandler: collector);
+  Expect.equals(0, collector.errors.length, "Unexpected errors.");
+  Expect.listEquals(
+      expectedWarnings,
+      collector.warnings.map((m) => m.messageKind).toList(),
+      "Unexpected warnings.");
+  Expect.listEquals(expectedHints,
+      collector.hints.map((m) => m.messageKind).toList(), "Unexpected hints.");
+}
+
+class Test {
+  final String code;
+  final List<MessageKind> warnings;
+  final List<MessageKind> hints;
+
+  const Test(this.code,
+      {this.warnings: const <MessageKind>[],
+      this.hints: const <MessageKind>[]});
+}
+
+const List<Test> tests = const <Test>[
+  /// Is-test on method type variable in unused static method.
+  const Test('''
+method<T>(T t) => t is T;
+main() {}
+'''),
+
+  /// Is-test on method type variable in used static method.
+  const Test('''
+method<T>(T t) => t is T;
+main() => method<int>(0);
+''', warnings: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED
+  ]),
+
+  /// Is-test on method type variable in unused instance method.
+  const Test('''
+class C {
+  method<T>(T t) => t is T;
+}
+main() => new C();
+'''),
+
+  /// Is-test on method type variable in used instance method.
+  const Test('''
+class C {
+  method<T>(T t) => t is T;
+}
+main() => new C().method<int>(0);
+''', warnings: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED
+  ]),
+
+  /// As-cast on method type variable in unused static method.
+  const Test('''
+method<T>(T t) => t as T;
+main() {}
+'''),
+
+  /// As-cast on method type variable in used static method.
+  const Test('''
+method<T>(T t) => t as T;
+main() => method<int>(0);
+''', hints: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC
+  ]),
+
+  /// As-cast on method type variable in unused instance method.
+  const Test('''
+class C {
+  method<T>(T t) => t as T;
+}
+main() => new C();
+'''),
+
+  /// As-cast on method type variable in used instance method.
+  const Test('''
+class C {
+  method<T>(T t) => t as T;
+}
+main() => new C().method<int>(0);
+''', hints: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_CONSIDERED_DYNAMIC
+  ]),
+
+  /// Method type variable literal in unused static method.
+  const Test('''
+method<T>() => T;
+main() {}
+'''),
+
+  /// Method type variable literal in used static method.
+  const Test('''
+method<T>() => T;
+main() => method<int>();
+''', warnings: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED
+  ]),
+
+  /// Method type variable literal in unused instance method.
+  const Test('''
+class C {
+  method<T>() => T;
+}
+main() => new C();
+'''),
+
+  /// Method type variable literal in used instance method.
+  const Test('''
+class C {
+  method<T>() => T;
+}
+main() => new C().method<int>();
+''', warnings: const <MessageKind>[
+    MessageKind.TYPE_VARIABLE_FROM_METHOD_NOT_REIFIED
+  ]),
+];
+
+main() {
+  asyncTest(() async {
+    for (Test test in tests) {
+      await runTest(
+        test.code,
+        expectedWarnings: test.warnings,
+        expectedHints: test.hints,
+      );
+    }
+  });
+}
diff --git a/tests/compiler/dart2js/rti/data/closure.dart b/tests/compiler/dart2js/rti/data/closure.dart
index 408d0ae..6baf68e 100644
--- a/tests/compiler/dart2js/rti/data/closure.dart
+++ b/tests/compiler/dart2js/rti/data/closure.dart
@@ -2,15 +2,19 @@
 // for 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: A.:classNeedsRti*/
+/*class: A:needsArgs*/
 class A<T> {
-  /*element: A.m:*/
   m() {
-    return /*methodNeedsRti*/ (T t) {};
+    return /*needsSignature*/ (T t) {};
+  }
+
+  /*element: A.f:*/
+  f() {
+    return /**/ (int t) {};
   }
 }
 
-/*element: main:*/
 main() {
   new A<int>().m() is void Function(int);
+  new A<int>().f() is void Function(int);
 }
diff --git a/tests/compiler/dart2js/rti/data/dependency.dart b/tests/compiler/dart2js/rti/data/dependency.dart
index 5c0a3e1..8dac33c 100644
--- a/tests/compiler/dart2js/rti/data/dependency.dart
+++ b/tests/compiler/dart2js/rti/data/dependency.dart
@@ -2,16 +2,13 @@
 // for 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: A.:*/
 class A<T> {
-  /*element: A.m:*/
   m() => new B<T>();
 }
 
-/*element: B.:deps=[A]*/
+/*class: B:deps=[A]*/
 class B<T> {}
 
-/*element: main:*/
 main() {
   new A<int>().m();
 }
diff --git a/tests/compiler/dart2js/rti/data/direct.dart b/tests/compiler/dart2js/rti/data/direct.dart
index 6b322cf..e88b892b 100644
--- a/tests/compiler/dart2js/rti/data/direct.dart
+++ b/tests/compiler/dart2js/rti/data/direct.dart
@@ -2,10 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*element: A.:classNeedsRti,explicit=[A<int>]*/
+/*class: A:needsArgs,explicit=[A<int>]*/
 class A<T> {}
 
-/*element: main:*/
 main() {
   new A<int>() is A<int>;
 }
diff --git a/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
new file mode 100644
index 0000000..5bb8df4
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_class_instantiate.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: A:explicit=[B<A>]*/
+class A {}
+
+/*class: B:needsArgs,deps=[C],explicit=[B<A>]*/
+class B<T> {}
+
+/*class: C:needsArgs*/
+class C<T> {
+  method() => new B<T>();
+}
+
+main() {
+  new C<A>().method() is B<A>;
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is.dart b/tests/compiler/dart2js/rti/data/generic_class_is.dart
new file mode 100644
index 0000000..f65ea09
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_class_is.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*class: A:implicit=[A]*/
+class A {}
+
+/*class: B:needsArgs,test,explicit=[B.T]*/
+class B<T> {
+  method(T t) => t is T;
+}
+
+main() {
+  new B<A>().method(new A());
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
new file mode 100644
index 0000000..55c0236
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*class: A:explicit=[B<A>]*/
+class A {}
+
+/*class: B:needsArgs,deps=[closure],explicit=[B<A>]*/
+class B<T> {}
+
+main() {
+  /*kernel.needsArgs*/ closure<T>() => new B<T>();
+
+  closure<A>() is B<A>;
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
new file mode 100644
index 0000000..9cf55c6
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*class: A:explicit=[B<A>]*/
+class A {}
+
+/*class: B:needsArgs,deps=[method],explicit=[B<A>]*/
+class B<T> {}
+
+/*ast.element: method:*/
+/*kernel.element: method:needsArgs*/
+method<T>() => new B<T>();
+
+main() {
+  method<A>() is B<A>;
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is.dart b/tests/compiler/dart2js/rti/data/generic_method_is.dart
new file mode 100644
index 0000000..7195656
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method_is.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.
+
+/*ast.element: method:explicit=[method.T]*/
+/*kernel.element: method:needsArgs,explicit=[method.T]*/
+method<T>(T t) => t is T;
+
+main() {
+  method<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable.dart b/tests/compiler/dart2js/rti/data/is_type_variable.dart
index ba682ba..f83c4b1 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable.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.
 
-/*element: A.:classNeedsRti,test,explicit=[A.T]*/
+/*class: A:needsArgs,test,explicit=[A.T]*/
 class A<T> {
-  /*element: A.m:*/
   m(T t) => t is T;
 }
 
-/*element: main:*/
 main() {
   new A<int>().m(0);
 }
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
index a4569b8..a8432a9 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
@@ -2,16 +2,13 @@
 // for 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: A.:*/
 class A<T> {}
 
-/*element: B.:classNeedsRti,test,explicit=[B.T],implicit=[B.T]*/
+/*class: B:needsArgs,test,explicit=[B.T],implicit=[B.T]*/
 class B<T> extends A<T> {
-  /*element: B.m:*/
   m(T t) => t is T;
 }
 
-/*element: main:*/
 main() {
   new B<int>().m(0);
 }
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
index c0d1f0a..83eec30 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
@@ -2,16 +2,13 @@
 // for 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: A.:*/
 class A<T> {}
 
-/*element: B.:classNeedsRti,test,explicit=[B.T],implicit=[List<B.T>]*/
+/*class: B:needsArgs,test,explicit=[B.T],implicit=[List<B.T>]*/
 class B<T> extends A<List<T>> {
-  /*element: B.m:*/
   m(T t) => t is T;
 }
 
-/*element: main:*/
 main() {
   new B<int>().m(0);
 }
diff --git a/tests/compiler/dart2js/rti/data/subclass.dart b/tests/compiler/dart2js/rti/data/subclass.dart
index 8bb50fb..cd04108 100644
--- a/tests/compiler/dart2js/rti/data/subclass.dart
+++ b/tests/compiler/dart2js/rti/data/subclass.dart
@@ -2,13 +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.
 
-/*element: A.:classNeedsRti,explicit=[A<int>]*/
+/*class: A:needsArgs,explicit=[A<int>]*/
 class A<T> {}
 
-/*element: B.:classNeedsRti*/
+/*class: B:needsArgs*/
 class B<T> extends A<T> {}
 
-/*element: main:*/
 main() {
   new B<int>() is A<int>;
 }
diff --git a/tests/compiler/dart2js/rti/data/subclass_fixed.dart b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
index b0c5b26..42badb5 100644
--- a/tests/compiler/dart2js/rti/data/subclass_fixed.dart
+++ b/tests/compiler/dart2js/rti/data/subclass_fixed.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.
 
-/*element: A.:classNeedsRti,explicit=[A<int>]*/
+/*class: A:needsArgs,explicit=[A<int>]*/
 class A<T> {}
 
-/*element: B.:*/
 class B extends A<int> {}
 
-/*element: main:*/
 main() {
   new B() is A<int>;
 }
diff --git a/tests/compiler/dart2js/rti/data/superclass.dart b/tests/compiler/dart2js/rti/data/superclass.dart
index 49e1430..86e533c 100644
--- a/tests/compiler/dart2js/rti/data/superclass.dart
+++ b/tests/compiler/dart2js/rti/data/superclass.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.
 
-/*element: A.:*/
 class A<T> {}
 
-/*element: B.:classNeedsRti,explicit=[B<int>]*/
+/*class: B:needsArgs,explicit=[B<int>]*/
 class B<T> extends A<T> {}
 
-/*element: main:*/
 main() {
   new B<int>() is B<int>;
 }
diff --git a/tests/compiler/dart2js/rti/data/tear_off.dart b/tests/compiler/dart2js/rti/data/tear_off.dart
index d3175aa..6aec20e 100644
--- a/tests/compiler/dart2js/rti/data/tear_off.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off.dart
@@ -2,13 +2,16 @@
 // for 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: A.:classNeedsRti*/
+/*class: A:needsArgs*/
 class A<T> {
-  /*element: A.m:methodNeedsRti*/
+  /*element: A.m:needsSignature*/
   void m(T t) {}
+
+  /*element: A.f:*/
+  void f(int t) {}
 }
 
-/*element: main:*/
 main() {
   new A<int>().m is void Function(int);
+  new A<int>().f is void Function(int);
 }
diff --git a/tests/compiler/dart2js/rti/data/type_literal.dart b/tests/compiler/dart2js/rti/data/type_literal.dart
index 58cf810..5e09e8a 100644
--- a/tests/compiler/dart2js/rti/data/type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/type_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.
 
-/*element: A.:classNeedsRti,exp*/
+/*class: A:needsArgs,exp*/
 class A<T> {
-  /*element: A.m:*/
   m() => T;
 }
 
-/*element: main:*/
 main() {
   new A<int>().m();
 }
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
new file mode 100644
index 0000000..5ca31af
--- /dev/null
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/js_backend/runtime_types.dart';
+import 'package:compiler/src/js_emitter/model.dart';
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
+import '../memory_compiler.dart';
+
+const String code = '''
+class A {}
+class B<T> {}
+class C<T> implements B<T> {}
+class D<T> implements B<int> {}
+class E<T> extends B<T> {}
+class F<T> extends B<List<T>>{}
+
+main() {
+  new A();
+  new C();
+  new D();
+  new E();
+  new F();
+}
+''';
+
+const Map<String, List<String>> expectedIsChecksMap =
+    const <String, List<String>>{
+  'A': const <String>[],
+  'B': const <String>[],
+  'C': const <String>[r'$isB'],
+  'D': const <String>[r'$isB', r'$asB'],
+  'E': const <String>[],
+  'F': const <String>[r'$asB'],
+};
+
+main() {
+  asyncTest(() async {
+    CompilationResult result = await runCompiler(
+        memorySourceFiles: {'main.dart': code},
+        options: [Flags.disableRtiOptimization, Flags.disableInlining]);
+    Expect.isTrue(result.isSuccess);
+    Compiler compiler = result.compiler;
+    ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+    ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+    RuntimeTypesNeed rtiNeed = closedWorld.rtiNeed;
+    ProgramLookup programLookup =
+        new ProgramLookup(compiler.backend.emitter.emitter.programForTesting);
+
+    void processMember(MemberEntity element) {
+      if (element is FunctionEntity) {
+        Expect.isTrue(rtiNeed.methodNeedsTypeArguments(element));
+        Expect.isTrue(rtiNeed.methodNeedsSignature(element));
+      }
+    }
+
+    void processClass(ClassEntity element) {
+      Expect.isTrue(closedWorld.rtiNeed.classNeedsTypeArguments(element));
+      elementEnvironment.forEachConstructor(element, processMember);
+      elementEnvironment.forEachLocalClassMember(element, processMember);
+
+      List<String> expectedIsChecks = expectedIsChecksMap[element.name];
+      if (expectedIsChecks != null) {
+        Class cls = programLookup.getClass(element);
+        List<String> isChecks = cls.isChecks.map((m) => m.name.key).toList();
+        Expect.setEquals(
+            expectedIsChecks,
+            isChecks,
+            "Unexpected is checks for $element: "
+            "Expected $expectedIsChecks, actual $isChecks.");
+      }
+    }
+
+    LibraryEntity library = elementEnvironment.mainLibrary;
+    elementEnvironment.forEachClass(library, processClass);
+    elementEnvironment.forEachLibraryMember(library, processMember);
+  });
+}
+
+class ProgramLookup {
+  final Program program;
+
+  ProgramLookup(this.program);
+
+  Map<LibraryEntity, Library> libraryMap;
+  Map<ClassEntity, Class> classMap = <ClassEntity, Class>{};
+
+  Library getLibrary(LibraryEntity element) {
+    if (libraryMap == null) {
+      libraryMap = <LibraryEntity, Library>{};
+      for (Fragment fragment in program.fragments) {
+        for (Library library in fragment.libraries) {
+          assert(!libraryMap.containsKey(library.element));
+          libraryMap[library.element] = library;
+        }
+      }
+    }
+    return libraryMap[element];
+  }
+
+  Class getClass(ClassEntity element) {
+    Class cls = classMap[element];
+    if (cls == null) {
+      Library library = getLibrary(element.library);
+      for (Class cls in library.classes) {
+        assert(!classMap.containsKey(cls.element));
+        classMap[cls.element] = cls;
+      }
+      cls = classMap[element];
+    }
+    return cls;
+  }
+}
diff --git a/tests/compiler/dart2js/rti/rti_need_test.dart b/tests/compiler/dart2js/rti/rti_need_test.dart
index 4586b74..ba20c2f 100644
--- a/tests/compiler/dart2js/rti/rti_need_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test.dart
@@ -5,6 +5,7 @@
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
@@ -25,25 +26,39 @@
 main(List<String> args) {
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
-    await checkTests(dataDir, computeAstRtiNeed, computeKernelRtiNeed,
-        args: args);
+    await checkTests(
+        dataDir, computeAstRtiMemberNeed, computeKernelRtiMemberNeed,
+        computeClassDataFromAst: computeAstRtiClassNeed,
+        computeClassDataFromKernel: computeKernelRtiClassNeed,
+        args: args,
+        options: [Flags.strongMode]);
   });
 }
 
 /// Compute RTI need data for [_member] as a [MemberElement].
 ///
 /// Fills [actualMap] with the data.
-void computeAstRtiNeed(
+void computeAstRtiMemberNeed(
     Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap,
-    {bool verbose: false, bool forBackend}) {
+    {bool verbose: false}) {
   MemberElement member = _member;
   ResolvedAst resolvedAst = member.resolvedAst;
   compiler.reporter.withCurrentElement(member.implementation, () {
-    new RtiNeedAstComputer(compiler.reporter, actualMap, resolvedAst, compiler)
+    new RtiMemberNeedAstComputer(
+            compiler.reporter, actualMap, resolvedAst, compiler)
         .run();
   });
 }
 
+/// Compute RTI need data for [cls] from the old frontend.
+///
+/// Fills [actualMap] with the data.
+void computeAstRtiClassNeed(
+    Compiler compiler, ClassEntity cls, Map<Id, ActualData> actualMap,
+    {bool verbose: false}) {
+  new RtiClassNeedAstComputer(compiler, actualMap).computeClassValue(cls);
+}
+
 abstract class ComputeValueMixin<T> {
   Compiler get compiler;
 
@@ -53,9 +68,68 @@
       compiler.frontendStrategy.runtimeTypesNeedBuilderForTesting;
   RuntimeTypesNeed get rtiNeed => compiler.backendClosedWorldForTesting.rtiNeed;
 
+  ClassEntity getFrontendClass(ClassEntity cls);
   MemberEntity getFrontendMember(MemberEntity member);
   Local getFrontendClosure(MemberEntity member);
 
+  String findChecks(StringBuffer sb, String comma, String prefix, Entity entity,
+      Set<DartType> checks) {
+    Set<DartType> types = new Set<DartType>();
+    FindTypeVisitor finder = new FindTypeVisitor(entity);
+    for (DartType type in checks) {
+      if (type.accept(finder, null)) {
+        types.add(type);
+      }
+    }
+    List<String> list = types.map((t) => t.toString()).toList()..sort();
+    if (list.isNotEmpty) {
+      sb.write('${comma}$prefix=[${list.join('')}]');
+      comma = ',';
+    }
+    return comma;
+  }
+
+  String findDependencies(StringBuffer sb, String comma, Entity entity) {
+    Iterable<String> dependencies;
+    if (rtiNeedBuilder.typeArgumentDependencies.containsKey(entity)) {
+      dependencies = rtiNeedBuilder.typeArgumentDependencies[entity]
+          .map((d) => d.name)
+          .toList()
+            ..sort();
+    }
+    if (dependencies != null && dependencies.isNotEmpty) {
+      sb.write('${comma}deps=[${dependencies.join(',')}]');
+      comma = ',';
+    }
+    return comma;
+  }
+
+  String getClassValue(ClassEntity backendClass) {
+    StringBuffer sb = new StringBuffer();
+    String comma = '';
+
+    if (rtiNeed.classNeedsTypeArguments(backendClass)) {
+      sb.write('${comma}needsArgs');
+      comma = ',';
+    }
+    ClassEntity frontendClass = getFrontendClass(backendClass);
+    comma = findDependencies(sb, comma, frontendClass);
+    if (rtiNeedBuilder.classesUsingTypeVariableExpression
+        .contains(frontendClass)) {
+      sb.write('${comma}exp');
+      comma = ',';
+    }
+    if (rtiNeedBuilder.classesUsingTypeVariableTests.contains(frontendClass)) {
+      sb.write('${comma}test');
+      comma = ',';
+    }
+    comma = findChecks(
+        sb, comma, 'explicit', frontendClass, rtiNeedBuilder.isChecks);
+    comma = findChecks(
+        sb, comma, 'implicit', frontendClass, rtiNeedBuilder.implicitIsChecks);
+    return sb.toString();
+  }
+
   String getMemberValue(MemberEntity backendMember) {
     MemberEntity frontendMember = getFrontendMember(backendMember);
     Local frontendClosure = getFrontendClosure(backendMember);
@@ -63,65 +137,25 @@
     StringBuffer sb = new StringBuffer();
     String comma = '';
 
-    void findChecks(String prefix, Entity entity, Set<DartType> checks) {
-      Set<DartType> types = new Set<DartType>();
-      FindTypeVisitor finder = new FindTypeVisitor(entity);
-      for (DartType type in checks) {
-        if (type.accept(finder, null)) {
-          types.add(type);
-        }
-      }
-      List<String> list = types.map((t) => t.toString()).toList()..sort();
-      if (list.isNotEmpty) {
-        sb.write('${comma}$prefix=[${list.join('')}]');
-        comma = ',';
-      }
-    }
-
-    if (backendMember is ConstructorEntity &&
-        backendMember.isGenerativeConstructor) {
-      ClassEntity backendClass = backendMember.enclosingClass;
-      if (rtiNeed.classNeedsRti(backendClass)) {
-        sb.write('${comma}classNeedsRti');
-        comma = ',';
-      }
-      ClassEntity frontendClass = frontendMember?.enclosingClass;
-      Iterable<String> dependencies;
-      if (rtiNeedBuilder.rtiDependencies.containsKey(frontendClass)) {
-        dependencies = rtiNeedBuilder.rtiDependencies[frontendClass]
-            .map((d) => d.name)
-            .toList()
-              ..sort();
-      }
-      if (dependencies != null && dependencies.isNotEmpty) {
-        sb.write('${comma}deps=[${dependencies.join(',')}]');
-        comma = ',';
-      }
-      if (rtiNeedBuilder.classesUsingTypeVariableExpression
-          .contains(frontendClass)) {
-        sb.write('${comma}exp');
-        comma = ',';
-      }
-      if (rtiNeedBuilder.classesUsingTypeVariableTests
-          .contains(frontendClass)) {
-        sb.write('${comma}test');
-        comma = ',';
-      }
-      findChecks('explicit', frontendClass, rtiNeedBuilder.isChecks);
-      findChecks('implicit', frontendClass, rtiNeedBuilder.implicitIsChecks);
-    }
     if (backendMember is FunctionEntity) {
-      if (rtiNeed.methodNeedsRti(backendMember)) {
-        sb.write('${comma}methodNeedsRti');
+      if (rtiNeed.methodNeedsTypeArguments(backendMember)) {
+        sb.write('${comma}needsArgs');
+        comma = ',';
+      }
+      if (rtiNeed.methodNeedsSignature(backendMember)) {
+        sb.write('${comma}needsSignature');
         comma = ',';
       }
       if (frontendClosure != null &&
-          rtiNeed.localFunctionNeedsRti(frontendClosure)) {
-        sb.write('${comma}methodNeedsRti');
+          rtiNeed.localFunctionNeedsSignature(frontendClosure)) {
+        sb.write('${comma}needsSignature');
         comma = ',';
       }
-      findChecks('explicit', frontendMember, rtiNeedBuilder.isChecks);
-      findChecks('implicit', frontendMember, rtiNeedBuilder.implicitIsChecks);
+      comma = findDependencies(sb, comma, frontendMember);
+      comma = findChecks(
+          sb, comma, 'explicit', frontendMember, rtiNeedBuilder.isChecks);
+      comma = findChecks(sb, comma, 'implicit', frontendMember,
+          rtiNeedBuilder.implicitIsChecks);
     }
     return sb.toString();
   }
@@ -167,14 +201,11 @@
   }
 }
 
-/// AST visitor for computing inlining data for a member.
-class RtiNeedAstComputer extends AstDataExtractor
-    with ComputeValueMixin<ast.Node> {
-  final Compiler compiler;
-
-  RtiNeedAstComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
-      ResolvedAst resolvedAst, this.compiler)
-      : super(reporter, actualMap, resolvedAst);
+abstract class AstMixin implements ComputeValueMixin<ast.Node> {
+  @override
+  ClassEntity getFrontendClass(ClassEntity cls) {
+    return cls;
+  }
 
   @override
   MemberEntity getFrontendMember(MemberEntity member) {
@@ -186,6 +217,31 @@
     if (member is SynthesizedCallMethodElementX) return member.expression;
     return null;
   }
+}
+
+class RtiClassNeedAstComputer extends DataRegistry
+    with ComputeValueMixin<ast.Node>, AstMixin {
+  final Compiler compiler;
+  final Map<Id, ActualData> actualMap;
+
+  RtiClassNeedAstComputer(this.compiler, this.actualMap);
+
+  DiagnosticReporter get reporter => compiler.reporter;
+
+  void computeClassValue(covariant ClassElement cls) {
+    Id id = new ClassId(cls.name);
+    registerValue(cls.sourcePosition, id, getClassValue(cls), cls);
+  }
+}
+
+/// AST visitor for computing inlining data for a member.
+class RtiMemberNeedAstComputer extends AstDataExtractor
+    with ComputeValueMixin<ast.Node>, AstMixin {
+  final Compiler compiler;
+
+  RtiMemberNeedAstComputer(DiagnosticReporter reporter,
+      Map<Id, ActualData> actualMap, ResolvedAst resolvedAst, this.compiler)
+      : super(reporter, actualMap, resolvedAst);
 
   @override
   String computeElementValue(Id id, AstElement element) {
@@ -212,13 +268,13 @@
 /// Compute RTI need data for [member] from the new frontend.
 ///
 /// Fills [actualMap] with the data.
-void computeKernelRtiNeed(
+void computeKernelRtiMemberNeed(
     Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
-    {bool verbose: false, bool forBackend}) {
+    {bool verbose: false}) {
   KernelBackendStrategy backendStrategy = compiler.backendStrategy;
   KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
   MemberDefinition definition = elementMap.getMemberDefinition(member);
-  new RtiNeedIrComputer(
+  new RtiMemberNeedIrComputer(
           compiler.reporter,
           actualMap,
           elementMap,
@@ -228,22 +284,19 @@
       .run(definition.node);
 }
 
-/// AST visitor for computing inference data for a member.
-class RtiNeedIrComputer extends IrDataExtractor
-    with ComputeValueMixin<ir.Node> {
-  final KernelToElementMapForBuilding _elementMap;
-  final ClosureDataLookup<ir.Node> _closureDataLookup;
-  final Compiler compiler;
+/// Compute RTI need data for [cls] from the new frontend.
+///
+/// Fills [actualMap] with the data.
+void computeKernelRtiClassNeed(
+    Compiler compiler, ClassEntity cls, Map<Id, ActualData> actualMap,
+    {bool verbose: false}) {
+  KernelBackendStrategy backendStrategy = compiler.backendStrategy;
+  KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
+  new RtiClassNeedIrComputer(compiler, elementMap, actualMap)
+      .computeClassValue(cls);
+}
 
-  RtiNeedIrComputer(
-      DiagnosticReporter reporter,
-      Map<Id, ActualData> actualMap,
-      this._elementMap,
-      MemberEntity member,
-      this.compiler,
-      this._closureDataLookup)
-      : super(reporter, actualMap);
-
+abstract class IrMixin implements ComputeValueMixin<ir.Node> {
   @override
   MemberEntity getFrontendMember(MemberEntity backendMember) {
     ElementEnvironment elementEnvironment = compiler
@@ -269,7 +322,52 @@
   }
 
   @override
+  ClassEntity getFrontendClass(ClassEntity backendClass) {
+    if (backendClass.isClosure) return null;
+    ElementEnvironment elementEnvironment = compiler
+        .resolutionWorldBuilder.closedWorldForTesting.elementEnvironment;
+    LibraryEntity frontendLibrary =
+        elementEnvironment.lookupLibrary(backendClass.library.canonicalUri);
+    return elementEnvironment.lookupClass(frontendLibrary, backendClass.name);
+  }
+
+  @override
   Local getFrontendClosure(MemberEntity member) => null;
+}
+
+class RtiClassNeedIrComputer extends DataRegistry
+    with ComputeValueMixin<ir.Node>, IrMixin {
+  final Compiler compiler;
+  final KernelToElementMapForBuilding _elementMap;
+  final Map<Id, ActualData> actualMap;
+
+  RtiClassNeedIrComputer(this.compiler, this._elementMap, this.actualMap);
+
+  DiagnosticReporter get reporter => compiler.reporter;
+
+  void computeClassValue(ClassEntity cls) {
+    Id id = new ClassId(cls.name);
+    ir.TreeNode node = _elementMap.getClassDefinition(cls).node;
+    registerValue(
+        computeSourceSpanFromTreeNode(node), id, getClassValue(cls), cls);
+  }
+}
+
+/// AST visitor for computing inference data for a member.
+class RtiMemberNeedIrComputer extends IrDataExtractor
+    with ComputeValueMixin<ir.Node>, IrMixin {
+  final KernelToElementMapForBuilding _elementMap;
+  final ClosureDataLookup<ir.Node> _closureDataLookup;
+  final Compiler compiler;
+
+  RtiMemberNeedIrComputer(
+      DiagnosticReporter reporter,
+      Map<Id, ActualData> actualMap,
+      this._elementMap,
+      MemberEntity member,
+      this.compiler,
+      this._closureDataLookup)
+      : super(reporter, actualMap);
 
   @override
   String computeMemberValue(Id id, ir.Member node) {
diff --git a/tests/compiler/dart2js_extra/switch_test.dart b/tests/compiler/dart2js_extra/switch_test.dart
index 09efd47..03a55e1 100644
--- a/tests/compiler/dart2js_extra/switch_test.dart
+++ b/tests/compiler/dart2js_extra/switch_test.dart
@@ -69,6 +69,37 @@
   }
 }
 
+// Tests that switch cases work when there is a case that calls a function
+// that always throws, and there is no break in the switch statement.
+switcher4(val) {
+  switch (val) {
+    case 1:
+      return 100;
+    case 2:
+      _throw();
+    default:
+      return 300;
+  }
+}
+
+_throw() {
+  throw 'exception';
+}
+
+// Tests that we generate a break after the last case if it isn't default.
+switcher5(val) {
+  var x = 0;
+  switch(val) {
+    case 1:
+      return 100;
+    case 2:
+      return 200;
+    case 3:
+      x = 300;
+  }
+  return x;
+}
+
 incrementX() {
   x++;
 }
@@ -96,8 +127,15 @@
   Expect.equals(200, switcher2(4));
   Expect.equals(200, switcher2(5));
 
+
   switcher3(1);
   Expect.equals(1, x);
 
+  Expect.equals(100, switcher4(1));
+
+  Expect.equals(100, switcher5(1));
+  Expect.equals(200, switcher5(2));
+  Expect.equals(300, switcher5(3));
+
   badswitches(42);
 }
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index cc9dfb9..80c5092 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -59,6 +59,8 @@
 from_environment_const_type_undefined_test/13: MissingCompileTimeError
 from_environment_const_type_undefined_test/14: MissingCompileTimeError
 from_environment_const_type_undefined_test/16: MissingCompileTimeError
+int_modulo_arith_test/modPow: RuntimeError
+int_modulo_arith_test/none: RuntimeError
 int_parse_radix_bad_handler_test: MissingCompileTimeError
 map_test: Crash # crash in front_end.
 string_from_environment3_test/01: MissingCompileTimeError
@@ -213,7 +215,7 @@
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]
 apply3_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 from_environment_const_type_test/02: MissingCompileTimeError
@@ -248,11 +250,14 @@
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
 
+[ $compiler == dart2js && $checked && $dart2js_with_kernel && !$strong ]
+*: SkipByDesign
+
 [ $compiler == dart2js && $dart2js_with_kernel ]
 int_from_environment_test: Pass # Issue 31762
 int_parse_radix_test/none: Pass # Issue 31762
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
+[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
 iterable_return_type_test/01: RuntimeError
 iterable_return_type_test/02: RuntimeError
 iterable_to_list_test/01: RuntimeError
@@ -268,8 +273,12 @@
 symbol_test/03: MissingCompileTimeError
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && !$strong ]
+*: SkipByDesign
+
+[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
 apply3_test: RuntimeError
+cast_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 iterable_return_type_test/01: RuntimeError
 iterable_return_type_test/02: RuntimeError
@@ -277,6 +286,8 @@
 list_test/01: Crash # Unsupported operation: Unsupported type parameter type node T.
 list_test/none: Crash # Unsupported operation: Unsupported type parameter type node T.
 map_test: Crash # type 'DillClassBuilder' is not a subtype of type 'SourceClassBuilder' of 'named' where
+null_nosuchmethod_test/01: RuntimeError
+null_nosuchmethod_test/none: RuntimeError
 symbol_reserved_word_test/03: RuntimeError
 symbol_reserved_word_test/04: MissingCompileTimeError
 symbol_reserved_word_test/05: MissingCompileTimeError
@@ -285,8 +296,12 @@
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
+*: SkipByDesign
+
+[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
 apply3_test: RuntimeError
+cast_test: RuntimeError
 dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError
 hash_set_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_CustomHashSet.#x), local(_CustomHashSet.#)) for j:closure_call(_CustomHashSet__CustomHashSet_closure.call).
@@ -299,6 +314,8 @@
 list_test/01: Crash # Unsupported operation: Unsupported type parameter type node T.
 list_test/none: Crash # Unsupported operation: Unsupported type parameter type node T.
 map_test: Crash # tests/map_test.dart:870:7: Internal problem: Unhandled Null in installDefaultConstructor.
+null_nosuchmethod_test/01: RuntimeError
+null_nosuchmethod_test/none: RuntimeError
 splay_tree_from_iterable_test: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeMap.#v), local(SplayTreeMap.#)) for j:closure_call(SplayTreeMap_SplayTreeMap_closure.call).
 splay_tree_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeSet.#v), local(SplayTreeSet.#)) for j:closure_call(SplayTreeSet_SplayTreeSet_closure.call).
 splay_tree_test/02: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeSet.#v), local(SplayTreeSet.#)) for j:closure_call(SplayTreeSet_SplayTreeSet_closure.call).
@@ -313,6 +330,9 @@
 symbol_test/03: MissingCompileTimeError
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
+[ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
+*: SkipByDesign
+
 [ $compiler == dart2js && !$dart2js_with_kernel ]
 iterable_return_type_test/01: RuntimeError # Issue 20085
 iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
@@ -331,18 +351,16 @@
 date_time10_test: RuntimeError # Issue 29921
 error_stack_trace_test/nullThrown: RuntimeError # .stackTrace not present for exception caught from 'throw null;'
 hash_set_test/01: RuntimeError # Issue 29921
-int_from_environment_test: RuntimeError # Issue 31763
 int_modulo_arith_test/none: RuntimeError # Issue 29921
 int_parse_radix_test/01: RuntimeError # Issue 29921
 int_parse_radix_test/02: RuntimeError # Issue 29921
-int_parse_radix_test/badTypes: RuntimeError # Issue 31763
-int_parse_radix_test/none: RuntimeError # Issue 31763
 int_parse_with_limited_ints_test: Skip # dartdevc doesn't know about --limit-ints-to-64-bits
 integer_arith_vm_test/modPow: RuntimeError # Issue 30170
 integer_parsed_arith_vm_test: RuntimeError # Issue 29921
 integer_to_radix_string_test: RuntimeError # Issue 29921
 integer_to_string_test/01: RuntimeError # Issue 29921
 iterable_fold_test/02: RuntimeError # different type inference problem
+iterable_reduce_test/01: RuntimeError
 iterable_reduce_test/none: RuntimeError
 iterable_return_type_test/02: RuntimeError # Issue 29921
 iterable_to_list_test/*: RuntimeError
@@ -435,8 +453,6 @@
 apply3_test: CompileTimeError # Issue 31402 (Invocation arguments)
 bool_from_environment2_test/03: MissingCompileTimeError
 compare_to2_test: RuntimeError
-int_modulo_arith_test/modPow: CompileTimeError # Issue 31402 (Assert statement)
-int_modulo_arith_test/none: CompileTimeError # Issue 31402 (Assert statement)
 iterable_empty_test: RuntimeError
 iterable_fold_test/02: RuntimeError
 iterable_reduce_test/01: CompileTimeError # Issue 31533
@@ -468,8 +484,6 @@
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 bool_from_environment2_test/03: MissingCompileTimeError
 compare_to2_test: RuntimeError
-int_modulo_arith_test/modPow: CompileTimeError # Issue 31402 (Assert statement)
-int_modulo_arith_test/none: CompileTimeError # Issue 31402 (Assert statement)
 iterable_empty_test: RuntimeError
 iterable_fold_test/02: RuntimeError
 iterable_reduce_test/01: CompileTimeError # Issue 31533
@@ -657,7 +671,6 @@
 double_parse_test/03: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/04: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/none: Skip # Temporarily disable the following tests until we figure out why they started failing.
-iterable_reduce_test/01: CompileTimeError
 
 [ $compiler == dartkp || $compiler == precompiler ]
 apply3_test: SkipByDesign
diff --git a/tests/corelib_2/int_modulo_arith_test.dart b/tests/corelib_2/int_modulo_arith_test.dart
index 6923cb7..4b347cc 100644
--- a/tests/corelib_2/int_modulo_arith_test.dart
+++ b/tests/corelib_2/int_modulo_arith_test.dart
@@ -25,7 +25,7 @@
       }
 
       return slowModPow(x, e, m) == expectedResult;
-    });
+    }());
     var result = x.modPow(e, m);
     Expect.equals(expectedResult, result, "$x.modPow($e, $m)");
   }
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 99e1c9f..2b1df1d 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -104,7 +104,6 @@
 isolate_stress_test: Pass, Slow # Issue 10697
 
 [ $compiler == dartk && $strong ]
-isolate_complex_messages_test: Crash
 issue_21398_parent_isolate1_test: RuntimeError
 issue_22778_test: Crash
 message3_test/byteBuffer: RuntimeError
@@ -121,7 +120,7 @@
 spawn_uri_nested_vm_test: CompileTimeError
 static_function_test: CompileTimeError
 typed_message_test: CompileTimeError
-unresolved_ports_test: Pass, Timeout
+unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index 095c6fa..c90979a 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -1,7 +1,6 @@
 # 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.
-unsorted/invocation_errors_test: RuntimeError
 
 [ $compiler == dart2js ]
 unsorted/invocation_errors_test: Pass
@@ -11,6 +10,9 @@
 unsorted/super_initializer_test: Skip
 unsorted/super_mixin_test: CompileTimeError
 
+[ !$strong ]
+unsorted/invocation_errors_test: RuntimeError
+
 [ $builder_tag == strong && $compiler == dart2analyzer ]
 *: Skip # Issue 28649
 
@@ -19,14 +21,16 @@
 unsorted/super_mixin_test: CompileTimeError
 
 [ $compiler == dartk && $strong ]
+unsorted/invocation_errors_test: CompileTimeError
 unsorted/loop_test: RuntimeError
 unsorted/nsm_dispatcher_test: CompileTimeError
+unsorted/super_mixin_test: CompileTimeError
 unsorted/types_test: RuntimeError
 
 [ $runtime == dart_precompiled && $minified ]
 unsorted/symbol_literal_test: Skip # Expects unobfuscated Symbol.toString.
 
-[ $runtime == dart_precompiled || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
+[ $runtime == dart_precompiled || $runtime == vm || $compiler == dart2js && $dart2js_with_kernel ]
 unsorted/loop_test: CompileTimeError # Large integer literal
 unsorted/simple_literal_test: CompileTimeError # Large integer literal
 
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index a2d26dd..9458eea 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -72,7 +72,6 @@
 assertion_initializer_test: CompileTimeError
 assign_static_type_test/01: Fail
 assign_static_type_test/02: MissingCompileTimeError
-async_await_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 async_return_types_test/nestedFuture: Fail # Issue 26429
 async_return_types_test/wrongTypeParameter: Fail # Issue 26429
 async_star_cancel_while_paused_test: RuntimeError
@@ -212,7 +211,6 @@
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
 generic_methods_type_expression_test/01: RuntimeError
 generic_methods_type_expression_test/03: RuntimeError
 generic_methods_type_expression_test/none: RuntimeError
@@ -222,7 +220,6 @@
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
@@ -376,7 +373,6 @@
 named_constructor_test/01: MissingRuntimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
 nan_identical_test: RuntimeError
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
@@ -515,7 +511,6 @@
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_await_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 async_star_cancel_while_paused_test: RuntimeError
 bad_constructor_test/06: Crash # NoSuchMethodError: The getter 'iterator' was called on null.
 bad_override_test/03: MissingCompileTimeError
@@ -616,7 +611,6 @@
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
@@ -768,7 +762,6 @@
 named_parameters_type_test/02: MissingRuntimeError
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 no_such_method_test: RuntimeError
 null_test/02: MissingCompileTimeError
@@ -832,7 +825,6 @@
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_await_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/locals_handler.dart': Failed assertion: line 296 pos 12: 'local != null': is not true.
 async_star_cancel_while_paused_test: RuntimeError
 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.
 bad_constructor_test/06: Crash # NoSuchMethodError: The getter 'iterator' was called on null.
@@ -937,7 +929,6 @@
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
-infinite_switch_label_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/locals_handler.dart': Failed assertion: line 296 pos 12: 'local != null': is not true.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
@@ -1086,7 +1077,6 @@
 named_parameters_type_test/02: MissingRuntimeError
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
-nested_switch_label_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/locals_handler.dart': Failed assertion: line 296 pos 12: 'local != null': is not true.
 no_main_test/01: CompileTimeError
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
@@ -1156,7 +1146,6 @@
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_await_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 async_star_cancel_while_paused_test: RuntimeError
 bad_constructor_test/06: Crash # NoSuchMethodError: The getter 'iterator' was called on null.
 bad_override_test/03: MissingCompileTimeError
@@ -1264,7 +1253,6 @@
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
 generic_closure_test: RuntimeError
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
 generic_methods_type_expression_test/01: RuntimeError
 generic_methods_type_expression_test/03: RuntimeError
 generic_methods_type_expression_test/none: RuntimeError
@@ -1275,7 +1263,6 @@
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
@@ -1425,7 +1412,6 @@
 named_parameters_type_test/02: MissingRuntimeError
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
diff --git a/tests/language_2/assert_message_test.dart b/tests/language_2/assert_message_test.dart
index d2a8b2e..5b7debb 100644
--- a/tests/language_2/assert_message_test.dart
+++ b/tests/language_2/assert_message_test.dart
@@ -17,7 +17,6 @@
 
   // Basics.
   assert(true, "");
-  assert(() => true, "");
 
   int x = null;
   // Successful asserts won't execute message.
diff --git a/tests/language_2/assertion_test.dart b/tests/language_2/assertion_test.dart
index 3470f09..bad4bbd 100644
--- a/tests/language_2/assertion_test.dart
+++ b/tests/language_2/assertion_test.dart
@@ -31,16 +31,6 @@
   return a ? true : false;
 }
 
-testClosure(bool f()) {
-  int i = 0;
-  try {
-    assert(f);
-  } on AssertionError {
-    i = 1;
-  }
-  return i;
-}
-
 testBoolean(bool value) {
   int i = 0;
   try {
@@ -84,13 +74,10 @@
   Expect.equals(1, testBoolean(null));
   Expect.equals(1, testDynamic(null));
   Expect.equals(1, testDynamic(42));
-  Expect.equals(1, testClosure(() => true));
   Expect.equals(1, testDynamic(() => true));
-  Expect.equals(1, testClosure(() => false));
   Expect.equals(1, testDynamic(() => false));
   Expect.equals(1, testDynamic(() => 42));
   Expect.equals(1, testDynamic(() => null));
-  Expect.equals(1, testClosure(() => null));
 
   Expect.equals(1234, testMessage(false, 1234).message);
   Expect.equals('hi', testMessage(false, 'hi').message);
diff --git a/tests/language_2/issue31596_test.dart b/tests/language_2/issue31596_test.dart
new file mode 100644
index 0000000..0309256
--- /dev/null
+++ b/tests/language_2/issue31596_test.dart
@@ -0,0 +1,46 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+class B2 extends A {}
+
+class C {
+  void f(B x, B y) {}
+}
+
+abstract class I {
+  void f(covariant A x, B y);
+}
+
+// This class contains a forwarding stub for f to allow it to satisfy the
+// interface I, while still ensuring that the x argument is type checked before
+// C.f is executed.
+//
+// For purposes of static type checking, the interface of the class D is
+// considered to contain a method f with signature (A, B) -> void.  For purposes
+// of runtime behavior, a tearoff of D.f is considered to have the reified
+// runtime type (Object, B) -> void.
+class D extends C implements I {}
+
+main() {
+  var d = new D();
+  I i = d;
+  A a = new A();
+  B b = new B();
+  B2 b2 = null;
+  d.f(b2, b); // Ok since B2 assignable to A
+  i.f(b2, b); // Ok since B2 assignable to A
+  void Function(Object, B) g = d.f; // Ok; D.f reified as (Object, B) -> void
+  Expect.throwsTypeError(() {
+    d.f(a, b);
+  });
+  Expect.throwsTypeError(() {
+    i.f(a, b);
+  });
+}
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 1c6d1db..b7c2b77 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -1027,12 +1027,7 @@
 assertion_initializer_const_function_test/01: MissingStaticWarning
 assertion_initializer_test: CompileTimeError
 async_return_types_test/nestedFuture: MissingCompileTimeError
-bug31436_test: CompileTimeError
 cascaded_forwarding_stubs_test: CompileTimeError
-combiner_type_lookup_indexed_test: CompileTimeError # Issue #31484
-combiner_type_lookup_instance_test: CompileTimeError # Issue #31484
-combiner_type_lookup_static_test: CompileTimeError # Issue #31484
-combiner_type_lookup_top_level_test: CompileTimeError # Issue #31484
 config_import_corelib_test: CompileTimeError
 const_types_test/07: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
 const_types_test/08: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
@@ -1050,12 +1045,12 @@
 generic_tearoff_test: CompileTimeError
 generic_test: CompileTimeError
 generics_test: CompileTimeError
-implicit_downcast_during_function_literal_arrow_test: CompileTimeError # Issue #31436
 import_core_prefix_test: CompileTimeError # "dynamic" should be defined in core.
 instantiate_type_variable_test/01: CompileTimeError
 int64_literal_test/03: MissingCompileTimeError # http://dartbug.com/31479
 int64_literal_test/30: MissingCompileTimeError # http://dartbug.com/31479
 interceptor6_test: CompileTimeError
+issue31596_test: CompileTimeError
 malformed2_test: Pass, MissingCompileTimeError # Issue 31056.
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
@@ -1246,10 +1241,6 @@
 class_literal_test/24: MissingCompileTimeError
 class_literal_test/25: MissingCompileTimeError
 closure_type_test: Pass
-combiner_type_lookup_indexed_test: StaticWarning # Issue #31484
-combiner_type_lookup_instance_test: StaticWarning # Issue #31484
-combiner_type_lookup_static_test: StaticWarning # Issue #31484
-combiner_type_lookup_top_level_test: StaticWarning # Issue #31484
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 3268b3d..a8e5484 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -225,7 +225,6 @@
 generic_method_types_test/02: RuntimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_closure_test: RuntimeError
 generic_methods_dynamic_test/01: MissingCompileTimeError
 generic_methods_dynamic_test/02: MissingRuntimeError
 generic_methods_dynamic_test/03: MissingCompileTimeError
@@ -239,7 +238,6 @@
 generic_methods_overriding_test/03: MissingCompileTimeError
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
 generic_methods_reuse_type_variables_test: RuntimeError
-generic_methods_shadowing_test: RuntimeError
 generic_methods_simple_as_expression_test/02: MissingRuntimeError
 generic_methods_simple_is_expression_test: RuntimeError
 generic_methods_tearoff_specialization_test: RuntimeError
@@ -786,6 +784,9 @@
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 
+[ $compiler == dart2js && $runtime == d8 && $dart2js_with_kernel ]
+assertion_test: RuntimeError
+
 [ $compiler == dart2js && $runtime == drt && $checked && !$dart2js_with_kernel ]
 regress_30339_test: RuntimeError # Issue 30393
 
@@ -1081,7 +1082,11 @@
 [ $compiler == dart2js && $checked ]
 covariant_subtyping_test: CompileTimeError
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && $dart2js_with_kernel && $minified && $strong ]
+inline_super_field_test: Crash
+typedef_is_test: Crash
+
+[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
@@ -1199,7 +1204,7 @@
 covariance_type_parameter_test/02: Crash # NoSuchMethodError: The method 'hasSubclass' was called on null.
 covariance_type_parameter_test/03: Crash # NoSuchMethodError: The method 'hasSubclass' was called on null.
 covariant_override/runtime_check_test: RuntimeError
-covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
+covariant_subtyping_test: CompileTimeError
 cyclic_constructor_test/01: Crash # Stack Overflow
 deferred_call_empty_before_load_test: RuntimeError
 deferred_closurize_load_library_test: RuntimeError
@@ -1259,18 +1264,14 @@
 generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_function_typedef_test/01: RuntimeError
 generic_instanceof_test: RuntimeError
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
-generic_methods_closure_test: Crash # Unsupported operation: Unsupported type parameter type node S.
-generic_methods_shadowing_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
-generic_typedef_test: Crash # Unsupported operation: Unsupported type parameter type node S.
+generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
 implicit_downcast_during_assert_initializer_test: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
@@ -1394,7 +1395,6 @@
 named_parameters_default_eq_test/02: MissingCompileTimeError
 nan_identical_test: RuntimeError
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
 not_enough_positional_arguments_test/01: MissingCompileTimeError
@@ -1463,7 +1463,7 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-tearoff_dynamic_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+tearoff_dynamic_test: RuntimeError
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
 type_check_const_function_typedef2_test: MissingCompileTimeError
@@ -1472,9 +1472,8 @@
 type_parameter_test/09: Crash # Internal Error: Unexpected type variable in static context.
 type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && $minified ]
-inline_super_field_test: Crash
-typedef_is_test: Crash
+[ $compiler == dart2js && $checked && $dart2js_with_kernel && !$strong ]
+*: SkipByDesign
 
 [ $compiler == dart2js && $checked && !$dart2js_with_kernel ]
 async_return_types_test/nestedFuture: Fail # Issue 26429
@@ -1559,6 +1558,7 @@
 implicit_downcast_during_super_method_invocation_test: RuntimeError
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
+issue31596_test: RuntimeError
 
 [ $compiler == dart2js && !$checked && !$dart2js_with_kernel ]
 bool_check_test: RuntimeError # Issue 29647
@@ -1580,6 +1580,7 @@
 forwarding_stub_tearoff_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
 generic_test: RuntimeError, OK
+issue31596_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 
 [ $compiler == dart2js && !$checked && !$dart2js_with_kernel && $minified ]
@@ -1641,7 +1642,7 @@
 type_inference_circularity_test: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
+[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
@@ -1852,8 +1853,6 @@
 generic_instanceof_test: RuntimeError
 generic_list_checked_test: RuntimeError
 generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
-generic_methods_closure_test: Crash # Unsupported operation: Unsupported type parameter type node S.
-generic_methods_shadowing_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_test: RuntimeError
 generic_typedef_test: Crash # Unsupported operation: Unsupported type parameter type node S.
@@ -1866,7 +1865,6 @@
 identical_closure2_test: RuntimeError
 if_null_precedence_test/none: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
@@ -1992,7 +1990,6 @@
 named_parameters_default_eq_test/02: MissingCompileTimeError
 nan_identical_test: RuntimeError
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 no_such_method_test: RuntimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
@@ -2067,7 +2064,10 @@
 type_literal_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && !$strong ]
+*: SkipByDesign
+
+[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
@@ -2087,11 +2087,81 @@
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
+class_literal_static_test/01: MissingCompileTimeError
+class_literal_static_test/02: MissingCompileTimeError
+class_literal_static_test/03: MissingCompileTimeError
+class_literal_static_test/04: MissingCompileTimeError
+class_literal_static_test/05: MissingCompileTimeError
+class_literal_static_test/06: MissingCompileTimeError
+class_literal_static_test/07: MissingCompileTimeError
+class_literal_static_test/08: MissingCompileTimeError
+class_literal_static_test/09: MissingCompileTimeError
+class_literal_static_test/10: MissingCompileTimeError
+class_literal_static_test/11: MissingCompileTimeError
+class_literal_static_test/12: MissingCompileTimeError
+class_literal_static_test/13: MissingCompileTimeError
+class_literal_static_test/14: MissingCompileTimeError
+class_literal_static_test/15: MissingCompileTimeError
+class_literal_static_test/16: MissingCompileTimeError
+class_literal_static_test/17: MissingCompileTimeError
+class_literal_static_test/18: MissingCompileTimeError
+class_literal_static_test/19: MissingCompileTimeError
+class_literal_static_test/20: MissingCompileTimeError
+class_literal_static_test/21: MissingCompileTimeError
+class_literal_static_test/22: MissingCompileTimeError
+class_literal_static_test/23: MissingCompileTimeError
+class_literal_static_test/24: MissingCompileTimeError
+class_literal_static_test/25: MissingCompileTimeError
+class_override_test: MissingCompileTimeError
+closure_internals_test/01: MissingCompileTimeError
+closure_internals_test/02: MissingCompileTimeError
+closure_internals_test/03: MissingCompileTimeError
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
+closure_type_test: RuntimeError
+compile_time_constant_k_test/01: MissingCompileTimeError
+compile_time_constant_k_test/02: MissingCompileTimeError
+compile_time_constant_k_test/03: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
+compile_time_constant_static2_test/01: MissingCompileTimeError
+compile_time_constant_static2_test/02: MissingCompileTimeError
+compile_time_constant_static2_test/03: MissingCompileTimeError
+compile_time_constant_static2_test/04: MissingCompileTimeError
+compile_time_constant_static2_test/05: MissingCompileTimeError
+compile_time_constant_static2_test/06: MissingCompileTimeError
+compile_time_constant_static3_test/01: MissingCompileTimeError
+compile_time_constant_static3_test/02: MissingCompileTimeError
+compile_time_constant_static3_test/03: MissingCompileTimeError
+compile_time_constant_static3_test/04: MissingCompileTimeError
+compile_time_constant_static3_test/05: MissingCompileTimeError
+compile_time_constant_static3_test/06: MissingCompileTimeError
+compile_time_constant_static4_test/01: MissingCompileTimeError
+compile_time_constant_static4_test/02: MissingCompileTimeError
+compile_time_constant_static4_test/03: MissingCompileTimeError
+compile_time_constant_static5_test/03: MissingCompileTimeError
+compile_time_constant_static5_test/04: MissingCompileTimeError
+compile_time_constant_static5_test/05: MissingCompileTimeError
+compile_time_constant_static5_test/06: MissingCompileTimeError
+compile_time_constant_static5_test/07: MissingCompileTimeError
+compile_time_constant_static5_test/08: MissingCompileTimeError
+compile_time_constant_static5_test/09: MissingCompileTimeError
+compile_time_constant_static5_test/10: MissingCompileTimeError
+compile_time_constant_static5_test/12: MissingCompileTimeError
+compile_time_constant_static5_test/13: MissingCompileTimeError
+compile_time_constant_static5_test/14: MissingCompileTimeError
+compile_time_constant_static5_test/15: MissingCompileTimeError
+compile_time_constant_static5_test/17: MissingCompileTimeError
+compile_time_constant_static5_test/18: MissingCompileTimeError
+compile_time_constant_static5_test/19: MissingCompileTimeError
+compile_time_constant_static5_test/20: MissingCompileTimeError
+compile_time_constant_static5_test/22: MissingCompileTimeError
+compile_time_constant_static5_test/24: MissingCompileTimeError
+compile_time_constant_static5_test/25: MissingCompileTimeError
+compile_time_constant_static_test/01: MissingCompileTimeError
+compile_time_constant_static_test/02: MissingCompileTimeError
+compile_time_constant_static_test/03: MissingCompileTimeError
 conditional_import_string_test: RuntimeError
 conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
@@ -2186,10 +2256,11 @@
 covariant_subtyping_tearoff1_test: RuntimeError
 covariant_subtyping_tearoff2_test: RuntimeError
 covariant_subtyping_tearoff3_test: RuntimeError
-covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
+covariant_subtyping_test: CompileTimeError
 covariant_subtyping_unsafe_call1_test: RuntimeError
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
+crash_6725_test/01: MissingCompileTimeError
 cyclic_constructor_test/01: Crash # Issue 30856
 deferred_call_empty_before_load_test: RuntimeError
 deferred_closurize_load_library_test: RuntimeError
@@ -2216,8 +2287,17 @@
 deferred_load_library_wrong_args_test/01: MissingRuntimeError
 deferred_not_loaded_check_test: RuntimeError
 deferred_redirecting_factory_test: RuntimeError
-deferred_super_dependency_test/01: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
+deferred_super_dependency_test/01: MissingCompileTimeError
 double_int_to_string_test: RuntimeError
+double_to_string_as_exponential2_test/01: MissingCompileTimeError
+double_to_string_as_exponential2_test/02: MissingCompileTimeError
+double_to_string_as_exponential2_test/03: MissingCompileTimeError
+double_to_string_as_fixed2_test/01: MissingCompileTimeError
+double_to_string_as_fixed2_test/02: MissingCompileTimeError
+double_to_string_as_fixed2_test/03: MissingCompileTimeError
+double_to_string_as_precision2_test/01: MissingCompileTimeError
+double_to_string_as_precision2_test/02: MissingCompileTimeError
+double_to_string_as_precision2_test/03: MissingCompileTimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -2279,16 +2359,13 @@
 generic_function_typedef_test/01: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_list_checked_test: RuntimeError
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
-generic_methods_closure_test: Crash # Unsupported operation: Unsupported type parameter type node S.
 generic_methods_generic_function_parameter_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_methods_shadowing_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_methods_simple_as_expression_test/01: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 generic_methods_simple_as_expression_test/02: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 generic_methods_type_expression_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_test: RuntimeError
-generic_typedef_test: Crash # Unsupported operation: Unsupported type parameter type node S.
+generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
@@ -2298,8 +2375,9 @@
 identical_closure2_test: RuntimeError
 if_null_precedence_test/none: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinite_switch_label_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/locals_handler.dart': Failed assertion: line 296 pos 12: 'local != null': is not true.
 infinity_test: RuntimeError
+initializing_formal_type_annotation_test/01: MissingCompileTimeError
+initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
@@ -2308,8 +2386,45 @@
 interface_test/00: Crash # 'package:front_end/src/fasta/kernel/body_builder.dart': Failed assertion: line 2218 pos 14: '!target.enclosingClass.isAbstract': is not true.
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
 invocation_mirror2_test: RuntimeError
+is_malformed_type_test/94: MissingCompileTimeError
+is_malformed_type_test/95: MissingCompileTimeError
+is_malformed_type_test/96: MissingCompileTimeError
+is_malformed_type_test/97: MissingCompileTimeError
+is_malformed_type_test/98: MissingCompileTimeError
+is_malformed_type_test/99: MissingCompileTimeError
+is_not_class2_test/01: MissingCompileTimeError
+isnot_malformed_type_test/01: MissingCompileTimeError
+issue11724_test/01: MissingCompileTimeError
+issue1363_test/01: MissingCompileTimeError
+issue15606_test/01: MissingCompileTimeError
+issue18628_1_test/01: MissingCompileTimeError
+issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: RuntimeError
 issue23244_test: RuntimeError
+known_identifier_prefix_error_test/01: MissingCompileTimeError
+known_identifier_prefix_error_test/02: MissingCompileTimeError
+known_identifier_prefix_error_test/03: MissingCompileTimeError
+known_identifier_prefix_error_test/04: MissingCompileTimeError
+known_identifier_prefix_error_test/05: MissingCompileTimeError
+known_identifier_prefix_error_test/06: MissingCompileTimeError
+known_identifier_prefix_error_test/07: MissingCompileTimeError
+known_identifier_prefix_error_test/08: MissingCompileTimeError
+known_identifier_prefix_error_test/09: MissingCompileTimeError
+known_identifier_prefix_error_test/10: MissingCompileTimeError
+known_identifier_prefix_error_test/11: MissingCompileTimeError
+known_identifier_prefix_error_test/12: MissingCompileTimeError
+known_identifier_prefix_error_test/13: MissingCompileTimeError
+known_identifier_prefix_error_test/14: MissingCompileTimeError
+known_identifier_prefix_error_test/15: MissingCompileTimeError
+known_identifier_prefix_error_test/16: MissingCompileTimeError
+known_identifier_prefix_error_test/17: MissingCompileTimeError
+known_identifier_prefix_error_test/18: MissingCompileTimeError
+known_identifier_prefix_error_test/19: MissingCompileTimeError
+known_identifier_prefix_error_test/20: MissingCompileTimeError
+known_identifier_prefix_error_test/21: MissingCompileTimeError
+known_identifier_prefix_error_test/22: MissingCompileTimeError
+known_identifier_prefix_error_test/23: MissingCompileTimeError
+known_identifier_prefix_error_test/24: MissingCompileTimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
@@ -2323,6 +2438,19 @@
 list_literal_syntax_test/03: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
+map_literal11_test/none: MissingRuntimeError
+map_literal1_test/01: MissingCompileTimeError
+map_literal3_test/01: MissingCompileTimeError
+map_literal3_test/02: MissingCompileTimeError
+map_literal3_test/03: MissingCompileTimeError
+map_literal3_test/04: MissingCompileTimeError
+map_literal4_test/01: MissingCompileTimeError
+map_literal4_test/02: MissingCompileTimeError
+map_literal4_test/03: MissingCompileTimeError
+map_literal4_test/04: MissingCompileTimeError
+map_literal4_test/05: MissingCompileTimeError
+map_literal4_test/06: MissingCompileTimeError
+map_literal7_test: RuntimeError
 map_literal8_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
@@ -2422,7 +2550,6 @@
 named_parameters_default_eq_test/02: MissingCompileTimeError
 nan_identical_test: RuntimeError
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
-nested_switch_label_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/locals_handler.dart': Failed assertion: line 296 pos 12: 'local != null': is not true.
 no_main_test/01: CompileTimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
 not_enough_positional_arguments_test/01: MissingCompileTimeError
@@ -2435,9 +2562,16 @@
 null_test/03: MissingCompileTimeError
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
+number_identifier_test/05: MissingCompileTimeError
+number_identifier_test/08: MissingCompileTimeError
+number_identifier_test/09: MissingCompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+on_catch_malformed_type_test: MissingCompileTimeError
+operator5_test: MissingCompileTimeError
+operator_equals_test: MissingCompileTimeError
 operator_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
+optimized_constant_array_string_access_test: MissingCompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -2456,7 +2590,11 @@
 private_super_constructor_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
+redirecting_factory_default_values_test/03: MissingCompileTimeError
+redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
+redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
+redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_22976_test/01: Pass # Incorrectly pass, we are ignoring an error due to #31118
@@ -2494,13 +2632,191 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-tearoff_dynamic_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+tearoff_dynamic_test: RuntimeError
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
+type_literal_prefix_call_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
+type_parameter_test/01: MissingCompileTimeError
+type_parameter_test/02: MissingCompileTimeError
+type_parameter_test/03: MissingCompileTimeError
+type_parameter_test/04: MissingCompileTimeError
+type_parameter_test/05: MissingCompileTimeError
+type_parameter_test/06: MissingCompileTimeError
+type_parameter_test/07: MissingCompileTimeError
+type_parameter_test/08: MissingCompileTimeError
+type_parameter_test/09: MissingCompileTimeError
+type_promotion_assign_test/01: MissingCompileTimeError
+type_promotion_assign_test/02: MissingCompileTimeError
+type_promotion_assign_test/03: MissingCompileTimeError
+type_promotion_assign_test/04: MissingCompileTimeError
+type_promotion_closure_test/01: MissingCompileTimeError
+type_promotion_closure_test/02: MissingCompileTimeError
+type_promotion_closure_test/03: MissingCompileTimeError
+type_promotion_closure_test/04: MissingCompileTimeError
+type_promotion_closure_test/06: MissingCompileTimeError
+type_promotion_closure_test/07: MissingCompileTimeError
+type_promotion_closure_test/09: MissingCompileTimeError
+type_promotion_closure_test/10: MissingCompileTimeError
+type_promotion_closure_test/11: MissingCompileTimeError
+type_promotion_closure_test/12: MissingCompileTimeError
+type_promotion_closure_test/13: MissingCompileTimeError
+type_promotion_closure_test/14: MissingCompileTimeError
+type_promotion_closure_test/15: MissingCompileTimeError
+type_promotion_closure_test/16: MissingCompileTimeError
+type_promotion_local_test/01: MissingCompileTimeError
+type_promotion_local_test/02: MissingCompileTimeError
+type_promotion_local_test/03: MissingCompileTimeError
+type_promotion_local_test/04: MissingCompileTimeError
+type_promotion_local_test/05: MissingCompileTimeError
+type_promotion_local_test/06: MissingCompileTimeError
+type_promotion_local_test/07: MissingCompileTimeError
+type_promotion_local_test/08: MissingCompileTimeError
+type_promotion_local_test/09: MissingCompileTimeError
+type_promotion_local_test/10: MissingCompileTimeError
+type_promotion_local_test/11: MissingCompileTimeError
+type_promotion_local_test/12: MissingCompileTimeError
+type_promotion_local_test/13: MissingCompileTimeError
+type_promotion_local_test/14: MissingCompileTimeError
+type_promotion_local_test/15: MissingCompileTimeError
+type_promotion_local_test/16: MissingCompileTimeError
+type_promotion_local_test/17: MissingCompileTimeError
+type_promotion_local_test/18: MissingCompileTimeError
+type_promotion_local_test/19: MissingCompileTimeError
+type_promotion_local_test/20: MissingCompileTimeError
+type_promotion_local_test/21: MissingCompileTimeError
+type_promotion_local_test/22: MissingCompileTimeError
+type_promotion_local_test/23: MissingCompileTimeError
+type_promotion_local_test/24: MissingCompileTimeError
+type_promotion_local_test/25: MissingCompileTimeError
+type_promotion_local_test/26: MissingCompileTimeError
+type_promotion_local_test/27: MissingCompileTimeError
+type_promotion_local_test/28: MissingCompileTimeError
+type_promotion_local_test/29: MissingCompileTimeError
+type_promotion_local_test/30: MissingCompileTimeError
+type_promotion_local_test/31: MissingCompileTimeError
+type_promotion_local_test/32: MissingCompileTimeError
+type_promotion_local_test/33: MissingCompileTimeError
+type_promotion_local_test/34: MissingCompileTimeError
+type_promotion_local_test/35: MissingCompileTimeError
+type_promotion_local_test/36: MissingCompileTimeError
+type_promotion_local_test/37: MissingCompileTimeError
+type_promotion_local_test/38: MissingCompileTimeError
+type_promotion_local_test/39: MissingCompileTimeError
+type_promotion_local_test/40: MissingCompileTimeError
+type_promotion_local_test/41: MissingCompileTimeError
+type_promotion_logical_and_test/01: MissingCompileTimeError
+type_promotion_logical_and_test/02: MissingCompileTimeError
+type_promotion_logical_and_test/03: MissingCompileTimeError
+type_promotion_more_specific_test/02: MissingCompileTimeError
+type_promotion_more_specific_test/06: MissingCompileTimeError
+type_promotion_more_specific_test/07: MissingCompileTimeError
+type_promotion_more_specific_test/09: MissingCompileTimeError
+type_promotion_multiple_test/01: MissingCompileTimeError
+type_promotion_multiple_test/02: MissingCompileTimeError
+type_promotion_multiple_test/03: MissingCompileTimeError
+type_promotion_multiple_test/04: MissingCompileTimeError
+type_promotion_multiple_test/05: MissingCompileTimeError
+type_promotion_multiple_test/06: MissingCompileTimeError
+type_promotion_multiple_test/07: MissingCompileTimeError
+type_promotion_multiple_test/08: MissingCompileTimeError
+type_promotion_multiple_test/09: MissingCompileTimeError
+type_promotion_multiple_test/10: MissingCompileTimeError
+type_promotion_multiple_test/11: MissingCompileTimeError
+type_promotion_multiple_test/12: MissingCompileTimeError
+type_promotion_multiple_test/13: MissingCompileTimeError
+type_promotion_multiple_test/14: MissingCompileTimeError
+type_promotion_multiple_test/15: MissingCompileTimeError
+type_promotion_multiple_test/16: MissingCompileTimeError
+type_promotion_multiple_test/17: MissingCompileTimeError
+type_promotion_multiple_test/18: MissingCompileTimeError
+type_promotion_multiple_test/19: MissingCompileTimeError
+type_promotion_multiple_test/20: MissingCompileTimeError
+type_promotion_multiple_test/21: MissingCompileTimeError
+type_promotion_multiple_test/22: MissingCompileTimeError
 typevariable_substitution2_test/02: RuntimeError
+void_type_callbacks_test/none: CompileTimeError
+void_type_function_types_test/none: CompileTimeError
+void_type_override_test/none: CompileTimeError
+void_type_usage_test/call_as: CompileTimeError
+void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_stmt: CompileTimeError
+void_type_usage_test/conditional2_argument: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_conditional: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_dynamic_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_for: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_literal_list_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_literal_map_value_init2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2do_while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2for_in: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_argument: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_conditional: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_dynamic_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_for: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_literal_list_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_literal_map_value_init2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional_do_while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional_for_in: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional_while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/field_assign: CompileTimeError
+void_type_usage_test/field_assign2: CompileTimeError
+void_type_usage_test/final_local_as: CompileTimeError
+void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_stmt: CompileTimeError
+void_type_usage_test/global_as: CompileTimeError
+void_type_usage_test/global_for: CompileTimeError
+void_type_usage_test/global_for_in2: CompileTimeError
+void_type_usage_test/global_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/global_stmt: CompileTimeError
+void_type_usage_test/instance2_as: CompileTimeError
+void_type_usage_test/instance2_for: CompileTimeError
+void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_stmt: CompileTimeError
+void_type_usage_test/instance3_as: CompileTimeError
+void_type_usage_test/instance3_for: CompileTimeError
+void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_stmt: CompileTimeError
+void_type_usage_test/instance_as: CompileTimeError
+void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_stmt: CompileTimeError
+void_type_usage_test/local_as: CompileTimeError
+void_type_usage_test/local_assign: CompileTimeError
+void_type_usage_test/local_for: CompileTimeError
+void_type_usage_test/local_for_in2: CompileTimeError
+void_type_usage_test/local_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/local_stmt: CompileTimeError
+void_type_usage_test/none: CompileTimeError
+void_type_usage_test/param_as: CompileTimeError
+void_type_usage_test/param_for: CompileTimeError
+void_type_usage_test/param_for_in2: CompileTimeError
+void_type_usage_test/param_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/param_stmt: CompileTimeError
+void_type_usage_test/paren_as: CompileTimeError
+void_type_usage_test/paren_for: CompileTimeError
+void_type_usage_test/paren_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/paren_stmt: CompileTimeError
+void_type_usage_test/setter_assign: CompileTimeError
+wrong_number_type_arguments_test/none: Pass
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
+*: SkipByDesign
+
+[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
@@ -2519,10 +2835,80 @@
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
+class_literal_static_test/01: MissingCompileTimeError
+class_literal_static_test/02: MissingCompileTimeError
+class_literal_static_test/03: MissingCompileTimeError
+class_literal_static_test/04: MissingCompileTimeError
+class_literal_static_test/05: MissingCompileTimeError
+class_literal_static_test/06: MissingCompileTimeError
+class_literal_static_test/07: MissingCompileTimeError
+class_literal_static_test/08: MissingCompileTimeError
+class_literal_static_test/09: MissingCompileTimeError
+class_literal_static_test/10: MissingCompileTimeError
+class_literal_static_test/11: MissingCompileTimeError
+class_literal_static_test/12: MissingCompileTimeError
+class_literal_static_test/13: MissingCompileTimeError
+class_literal_static_test/14: MissingCompileTimeError
+class_literal_static_test/15: MissingCompileTimeError
+class_literal_static_test/16: MissingCompileTimeError
+class_literal_static_test/17: MissingCompileTimeError
+class_literal_static_test/18: MissingCompileTimeError
+class_literal_static_test/19: MissingCompileTimeError
+class_literal_static_test/20: MissingCompileTimeError
+class_literal_static_test/21: MissingCompileTimeError
+class_literal_static_test/22: MissingCompileTimeError
+class_literal_static_test/23: MissingCompileTimeError
+class_literal_static_test/24: MissingCompileTimeError
+class_literal_static_test/25: MissingCompileTimeError
+class_override_test: MissingCompileTimeError
+closure_internals_test/01: MissingCompileTimeError
+closure_internals_test/02: MissingCompileTimeError
+closure_internals_test/03: MissingCompileTimeError
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
+closure_type_test: RuntimeError
+compile_time_constant_k_test/01: MissingCompileTimeError
+compile_time_constant_k_test/02: MissingCompileTimeError
+compile_time_constant_k_test/03: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
+compile_time_constant_static2_test/01: MissingCompileTimeError
+compile_time_constant_static2_test/02: MissingCompileTimeError
+compile_time_constant_static2_test/03: MissingCompileTimeError
+compile_time_constant_static2_test/04: MissingCompileTimeError
+compile_time_constant_static2_test/05: MissingCompileTimeError
+compile_time_constant_static2_test/06: MissingCompileTimeError
+compile_time_constant_static3_test/01: MissingCompileTimeError
+compile_time_constant_static3_test/02: MissingCompileTimeError
+compile_time_constant_static3_test/03: MissingCompileTimeError
+compile_time_constant_static3_test/04: MissingCompileTimeError
+compile_time_constant_static3_test/05: MissingCompileTimeError
+compile_time_constant_static3_test/06: MissingCompileTimeError
+compile_time_constant_static4_test/01: MissingCompileTimeError
+compile_time_constant_static4_test/02: MissingCompileTimeError
+compile_time_constant_static4_test/03: MissingCompileTimeError
+compile_time_constant_static5_test/03: MissingCompileTimeError
+compile_time_constant_static5_test/04: MissingCompileTimeError
+compile_time_constant_static5_test/05: MissingCompileTimeError
+compile_time_constant_static5_test/06: MissingCompileTimeError
+compile_time_constant_static5_test/07: MissingCompileTimeError
+compile_time_constant_static5_test/08: MissingCompileTimeError
+compile_time_constant_static5_test/09: MissingCompileTimeError
+compile_time_constant_static5_test/10: MissingCompileTimeError
+compile_time_constant_static5_test/12: MissingCompileTimeError
+compile_time_constant_static5_test/13: MissingCompileTimeError
+compile_time_constant_static5_test/14: MissingCompileTimeError
+compile_time_constant_static5_test/15: MissingCompileTimeError
+compile_time_constant_static5_test/17: MissingCompileTimeError
+compile_time_constant_static5_test/18: MissingCompileTimeError
+compile_time_constant_static5_test/19: MissingCompileTimeError
+compile_time_constant_static5_test/20: MissingCompileTimeError
+compile_time_constant_static5_test/22: MissingCompileTimeError
+compile_time_constant_static5_test/24: MissingCompileTimeError
+compile_time_constant_static5_test/25: MissingCompileTimeError
+compile_time_constant_static_test/01: MissingCompileTimeError
+compile_time_constant_static_test/02: MissingCompileTimeError
+compile_time_constant_static_test/03: MissingCompileTimeError
 conditional_import_string_test: RuntimeError
 conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
@@ -2617,10 +3003,11 @@
 covariant_subtyping_tearoff1_test: RuntimeError
 covariant_subtyping_tearoff2_test: RuntimeError
 covariant_subtyping_tearoff3_test: RuntimeError
-covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
+covariant_subtyping_test: CompileTimeError
 covariant_subtyping_unsafe_call1_test: RuntimeError
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
+crash_6725_test/01: MissingCompileTimeError
 cyclic_constructor_test/01: Crash # Issue 30856
 deferred_call_empty_before_load_test: RuntimeError
 deferred_closurize_load_library_test: RuntimeError
@@ -2647,8 +3034,17 @@
 deferred_load_library_wrong_args_test/01: MissingRuntimeError
 deferred_not_loaded_check_test: RuntimeError
 deferred_redirecting_factory_test: RuntimeError
-deferred_super_dependency_test/01: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+deferred_super_dependency_test/01: MissingCompileTimeError
 double_int_to_string_test: RuntimeError
+double_to_string_as_exponential2_test/01: MissingCompileTimeError
+double_to_string_as_exponential2_test/02: MissingCompileTimeError
+double_to_string_as_exponential2_test/03: MissingCompileTimeError
+double_to_string_as_fixed2_test/01: MissingCompileTimeError
+double_to_string_as_fixed2_test/02: MissingCompileTimeError
+double_to_string_as_fixed2_test/03: MissingCompileTimeError
+double_to_string_as_precision2_test/01: MissingCompileTimeError
+double_to_string_as_precision2_test/02: MissingCompileTimeError
+double_to_string_as_precision2_test/03: MissingCompileTimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -2708,12 +3104,9 @@
 generic_function_typedef_test/01: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_list_checked_test: RuntimeError
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
-generic_methods_closure_test: Crash # Unsupported operation: Unsupported type parameter type node S.
-generic_methods_shadowing_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_test: RuntimeError
-generic_typedef_test: Crash # Unsupported operation: Unsupported type parameter type node S.
+generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
@@ -2723,8 +3116,9 @@
 identical_closure2_test: RuntimeError
 if_null_precedence_test/none: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
+initializing_formal_type_annotation_test/01: MissingCompileTimeError
+initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
@@ -2733,8 +3127,45 @@
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
 invocation_mirror2_test: RuntimeError
 invocation_mirror_test: RuntimeError
+is_malformed_type_test/94: MissingCompileTimeError
+is_malformed_type_test/95: MissingCompileTimeError
+is_malformed_type_test/96: MissingCompileTimeError
+is_malformed_type_test/97: MissingCompileTimeError
+is_malformed_type_test/98: MissingCompileTimeError
+is_malformed_type_test/99: MissingCompileTimeError
+is_not_class2_test/01: MissingCompileTimeError
+isnot_malformed_type_test/01: MissingCompileTimeError
+issue11724_test/01: MissingCompileTimeError
+issue1363_test/01: MissingCompileTimeError
+issue15606_test/01: MissingCompileTimeError
+issue18628_1_test/01: MissingCompileTimeError
+issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: RuntimeError
 issue23244_test: RuntimeError
+known_identifier_prefix_error_test/01: MissingCompileTimeError
+known_identifier_prefix_error_test/02: MissingCompileTimeError
+known_identifier_prefix_error_test/03: MissingCompileTimeError
+known_identifier_prefix_error_test/04: MissingCompileTimeError
+known_identifier_prefix_error_test/05: MissingCompileTimeError
+known_identifier_prefix_error_test/06: MissingCompileTimeError
+known_identifier_prefix_error_test/07: MissingCompileTimeError
+known_identifier_prefix_error_test/08: MissingCompileTimeError
+known_identifier_prefix_error_test/09: MissingCompileTimeError
+known_identifier_prefix_error_test/10: MissingCompileTimeError
+known_identifier_prefix_error_test/11: MissingCompileTimeError
+known_identifier_prefix_error_test/12: MissingCompileTimeError
+known_identifier_prefix_error_test/13: MissingCompileTimeError
+known_identifier_prefix_error_test/14: MissingCompileTimeError
+known_identifier_prefix_error_test/15: MissingCompileTimeError
+known_identifier_prefix_error_test/16: MissingCompileTimeError
+known_identifier_prefix_error_test/17: MissingCompileTimeError
+known_identifier_prefix_error_test/18: MissingCompileTimeError
+known_identifier_prefix_error_test/19: MissingCompileTimeError
+known_identifier_prefix_error_test/20: MissingCompileTimeError
+known_identifier_prefix_error_test/21: MissingCompileTimeError
+known_identifier_prefix_error_test/22: MissingCompileTimeError
+known_identifier_prefix_error_test/23: MissingCompileTimeError
+known_identifier_prefix_error_test/24: MissingCompileTimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
@@ -2748,6 +3179,19 @@
 list_literal_syntax_test/03: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
+map_literal11_test/none: MissingRuntimeError
+map_literal1_test/01: MissingCompileTimeError
+map_literal3_test/01: MissingCompileTimeError
+map_literal3_test/02: MissingCompileTimeError
+map_literal3_test/03: MissingCompileTimeError
+map_literal3_test/04: MissingCompileTimeError
+map_literal4_test/01: MissingCompileTimeError
+map_literal4_test/02: MissingCompileTimeError
+map_literal4_test/03: MissingCompileTimeError
+map_literal4_test/04: MissingCompileTimeError
+map_literal4_test/05: MissingCompileTimeError
+map_literal4_test/06: MissingCompileTimeError
+map_literal7_test: RuntimeError
 map_literal8_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
@@ -2843,7 +3287,6 @@
 named_parameters_default_eq_test/02: MissingCompileTimeError
 nan_identical_test: RuntimeError
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
-nested_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 no_main_test/01: CompileTimeError
 no_such_method_native_test: RuntimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
@@ -2857,8 +3300,15 @@
 null_test/03: MissingCompileTimeError
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
+number_identifier_test/05: MissingCompileTimeError
+number_identifier_test/08: MissingCompileTimeError
+number_identifier_test/09: MissingCompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+on_catch_malformed_type_test: MissingCompileTimeError
+operator5_test: MissingCompileTimeError
+operator_equals_test: MissingCompileTimeError
+optimized_constant_array_string_access_test: MissingCompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -2876,7 +3326,11 @@
 private_super_constructor_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
+redirecting_factory_default_values_test/03: MissingCompileTimeError
+redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
+redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
+redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_21795_test: RuntimeError
@@ -2915,11 +3369,153 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-tearoff_dynamic_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+tearoff_dynamic_test: RuntimeError
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
+type_literal_prefix_call_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
+type_parameter_test/01: MissingCompileTimeError
+type_parameter_test/02: MissingCompileTimeError
+type_parameter_test/03: MissingCompileTimeError
+type_parameter_test/04: MissingCompileTimeError
+type_parameter_test/05: MissingCompileTimeError
+type_parameter_test/06: MissingCompileTimeError
+type_parameter_test/07: MissingCompileTimeError
+type_parameter_test/08: MissingCompileTimeError
+type_parameter_test/09: MissingCompileTimeError
+type_promotion_assign_test/01: MissingCompileTimeError
+type_promotion_assign_test/02: MissingCompileTimeError
+type_promotion_assign_test/03: MissingCompileTimeError
+type_promotion_assign_test/04: MissingCompileTimeError
+type_promotion_closure_test/01: MissingCompileTimeError
+type_promotion_closure_test/02: MissingCompileTimeError
+type_promotion_closure_test/03: MissingCompileTimeError
+type_promotion_closure_test/04: MissingCompileTimeError
+type_promotion_closure_test/06: MissingCompileTimeError
+type_promotion_closure_test/07: MissingCompileTimeError
+type_promotion_closure_test/09: MissingCompileTimeError
+type_promotion_closure_test/10: MissingCompileTimeError
+type_promotion_closure_test/11: MissingCompileTimeError
+type_promotion_closure_test/12: MissingCompileTimeError
+type_promotion_closure_test/13: MissingCompileTimeError
+type_promotion_closure_test/14: MissingCompileTimeError
+type_promotion_closure_test/15: MissingCompileTimeError
+type_promotion_closure_test/16: MissingCompileTimeError
+type_promotion_local_test/01: MissingCompileTimeError
+type_promotion_local_test/02: MissingCompileTimeError
+type_promotion_local_test/03: MissingCompileTimeError
+type_promotion_local_test/04: MissingCompileTimeError
+type_promotion_local_test/05: MissingCompileTimeError
+type_promotion_local_test/06: MissingCompileTimeError
+type_promotion_local_test/07: MissingCompileTimeError
+type_promotion_local_test/08: MissingCompileTimeError
+type_promotion_local_test/09: MissingCompileTimeError
+type_promotion_local_test/10: MissingCompileTimeError
+type_promotion_local_test/11: MissingCompileTimeError
+type_promotion_local_test/12: MissingCompileTimeError
+type_promotion_local_test/13: MissingCompileTimeError
+type_promotion_local_test/14: MissingCompileTimeError
+type_promotion_local_test/15: MissingCompileTimeError
+type_promotion_local_test/16: MissingCompileTimeError
+type_promotion_local_test/17: MissingCompileTimeError
+type_promotion_local_test/18: MissingCompileTimeError
+type_promotion_local_test/19: MissingCompileTimeError
+type_promotion_local_test/20: MissingCompileTimeError
+type_promotion_local_test/21: MissingCompileTimeError
+type_promotion_local_test/22: MissingCompileTimeError
+type_promotion_local_test/23: MissingCompileTimeError
+type_promotion_local_test/24: MissingCompileTimeError
+type_promotion_local_test/25: MissingCompileTimeError
+type_promotion_local_test/26: MissingCompileTimeError
+type_promotion_local_test/27: MissingCompileTimeError
+type_promotion_local_test/28: MissingCompileTimeError
+type_promotion_local_test/29: MissingCompileTimeError
+type_promotion_local_test/30: MissingCompileTimeError
+type_promotion_local_test/31: MissingCompileTimeError
+type_promotion_local_test/32: MissingCompileTimeError
+type_promotion_local_test/33: MissingCompileTimeError
+type_promotion_local_test/34: MissingCompileTimeError
+type_promotion_local_test/35: MissingCompileTimeError
+type_promotion_local_test/36: MissingCompileTimeError
+type_promotion_local_test/37: MissingCompileTimeError
+type_promotion_local_test/38: MissingCompileTimeError
+type_promotion_local_test/39: MissingCompileTimeError
+type_promotion_local_test/40: MissingCompileTimeError
+type_promotion_local_test/41: MissingCompileTimeError
+type_promotion_logical_and_test/01: MissingCompileTimeError
+type_promotion_logical_and_test/02: MissingCompileTimeError
+type_promotion_logical_and_test/03: MissingCompileTimeError
+type_promotion_more_specific_test/02: MissingCompileTimeError
+type_promotion_more_specific_test/06: MissingCompileTimeError
+type_promotion_more_specific_test/07: MissingCompileTimeError
+type_promotion_more_specific_test/09: MissingCompileTimeError
+type_promotion_multiple_test/01: MissingCompileTimeError
+type_promotion_multiple_test/02: MissingCompileTimeError
+type_promotion_multiple_test/03: MissingCompileTimeError
+type_promotion_multiple_test/04: MissingCompileTimeError
+type_promotion_multiple_test/05: MissingCompileTimeError
+type_promotion_multiple_test/06: MissingCompileTimeError
+type_promotion_multiple_test/07: MissingCompileTimeError
+type_promotion_multiple_test/08: MissingCompileTimeError
+type_promotion_multiple_test/09: MissingCompileTimeError
+type_promotion_multiple_test/10: MissingCompileTimeError
+type_promotion_multiple_test/11: MissingCompileTimeError
+type_promotion_multiple_test/12: MissingCompileTimeError
+type_promotion_multiple_test/13: MissingCompileTimeError
+type_promotion_multiple_test/14: MissingCompileTimeError
+type_promotion_multiple_test/15: MissingCompileTimeError
+type_promotion_multiple_test/16: MissingCompileTimeError
+type_promotion_multiple_test/17: MissingCompileTimeError
+type_promotion_multiple_test/18: MissingCompileTimeError
+type_promotion_multiple_test/19: MissingCompileTimeError
+type_promotion_multiple_test/20: MissingCompileTimeError
+type_promotion_multiple_test/21: MissingCompileTimeError
+type_promotion_multiple_test/22: MissingCompileTimeError
 typevariable_substitution2_test/02: RuntimeError
+void_type_callbacks_test/none: CompileTimeError
+void_type_function_types_test/none: CompileTimeError
+void_type_override_test/none: CompileTimeError
+void_type_usage_test/call_as: CompileTimeError
+void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_stmt: CompileTimeError
+void_type_usage_test/field_assign: CompileTimeError
+void_type_usage_test/field_assign2: CompileTimeError
+void_type_usage_test/final_local_as: CompileTimeError
+void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_stmt: CompileTimeError
+void_type_usage_test/global_as: CompileTimeError
+void_type_usage_test/global_for: CompileTimeError
+void_type_usage_test/global_for_in2: CompileTimeError
+void_type_usage_test/global_stmt: CompileTimeError
+void_type_usage_test/instance2_as: CompileTimeError
+void_type_usage_test/instance2_for: CompileTimeError
+void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_stmt: CompileTimeError
+void_type_usage_test/instance3_as: CompileTimeError
+void_type_usage_test/instance3_for: CompileTimeError
+void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_stmt: CompileTimeError
+void_type_usage_test/instance_as: CompileTimeError
+void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_stmt: CompileTimeError
+void_type_usage_test/local_as: CompileTimeError
+void_type_usage_test/local_assign: CompileTimeError
+void_type_usage_test/local_for: CompileTimeError
+void_type_usage_test/local_for_in2: CompileTimeError
+void_type_usage_test/local_stmt: CompileTimeError
+void_type_usage_test/none: CompileTimeError
+void_type_usage_test/param_as: CompileTimeError
+void_type_usage_test/param_for: CompileTimeError
+void_type_usage_test/param_for_in2: CompileTimeError
+void_type_usage_test/param_stmt: CompileTimeError
+void_type_usage_test/paren_as: CompileTimeError
+void_type_usage_test/paren_for: CompileTimeError
+void_type_usage_test/paren_stmt: CompileTimeError
+void_type_usage_test/setter_assign: CompileTimeError
+wrong_number_type_arguments_test/none: Pass
+
+[ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
+*: SkipByDesign
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
 accessor_conflict_export2_test: Crash # Issue 25626
@@ -3045,7 +3641,9 @@
 generic_function_typedef2_test/03: MissingCompileTimeError # Issue 28214
 generic_function_typedef2_test/05: Crash # Issue 28214
 generic_function_typedef2_test/06: Crash # Issue 28214
+generic_methods_closure_test: RuntimeError
 generic_methods_local_variable_declaration_test: RuntimeError
+generic_methods_shadowing_test: RuntimeError
 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
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index db124f7..88ab234 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -11,7 +11,6 @@
 accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626
 accessor_conflict_import_test: CompileTimeError # Issue 25626
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
-arithmetic_test: RuntimeError # Issue 31763
 assertion_initializer_const_error2_test/*: Crash # Issue #27809
 assertion_initializer_const_error2_test/cc10: Pass # Issue #31319
 assertion_initializer_const_error2_test/cc11: Pass # Issue #31319
@@ -19,16 +18,11 @@
 assertion_initializer_const_function_test/01: Crash
 assertion_initializer_test: CompileTimeError
 black_listed_test/none: Fail # Issue 14228
-bug31436_test: CompileTimeError
+bug31436_test: RuntimeError
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
-closure_param_null_to_object_test: RuntimeError
-combiner_type_lookup_indexed_test: CompileTimeError # Issue #31484
-combiner_type_lookup_instance_test: CompileTimeError # Issue #31484
-combiner_type_lookup_static_test: CompileTimeError # Issue #31484
-combiner_type_lookup_top_level_test: CompileTimeError # Issue #31484
 conflicting_type_variable_and_setter_test: CompileTimeError
 const_for_in_variable_test/01: MissingCompileTimeError
 const_types_test/07: MissingCompileTimeError
@@ -56,7 +50,6 @@
 generics_test: CompileTimeError
 getter_setter_in_lib_test: CompileTimeError
 implicit_downcast_during_assert_initializer_test: Crash
-implicit_downcast_during_function_literal_arrow_test: CompileTimeError # Issue #31436
 import_core_prefix_test: CompileTimeError
 import_private_test/01: MissingCompileTimeError # Issue 29920
 initializing_formal_final_test: MissingCompileTimeError
@@ -64,8 +57,8 @@
 instantiate_tearoff_of_call_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
+issue31596_test: CompileTimeError
 method_override_test: CompileTimeError # Negative test
-mint_compares_test: RuntimeError # Issue 31763
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
 mixin_supertype_subclass_test/02: MissingCompileTimeError
@@ -132,7 +125,6 @@
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
 additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
 arithmetic_test: RuntimeError # Issue 31763
-assert_message_test: CompileTimeError
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError
 assertion_initializer_const_error2_test/cc03: MissingCompileTimeError
@@ -144,7 +136,6 @@
 assertion_initializer_const_error2_test/cc10: MissingCompileTimeError
 assertion_initializer_const_error2_test/cc11: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
-assertion_test: CompileTimeError
 async_await_syntax_test/c10a: MissingCompileTimeError
 async_await_syntax_test/d08b: MissingCompileTimeError
 async_await_syntax_test/d10a: MissingCompileTimeError
@@ -190,7 +181,6 @@
 call_non_method_field_test/02: MissingCompileTimeError
 call_with_no_such_method_test: CompileTimeError # Issue 31402 Error: A value of type '#lib1::F' can't be assigned to a variable of type 'dart.core::Function'.
 callable_test/none: CompileTimeError
-cascade_on_static_field_test: Crash
 check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -245,10 +235,6 @@
 constructor_redirect2_negative_test: MissingCompileTimeError
 constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: MissingCompileTimeError
-covariance_type_parameter_test/01: CompileTimeError # Warning: Unimplemented bounds on type variables.
-covariance_type_parameter_test/02: CompileTimeError # Warning: Unimplemented bounds on type variables.
-covariance_type_parameter_test/03: CompileTimeError # Warning: Unimplemented bounds on type variables.
-covariance_type_parameter_test/none: CompileTimeError # Warning: Unimplemented bounds on type variables.
 covariant_subtyping_test: CompileTimeError
 cyclic_constructor_test/01: MissingCompileTimeError
 cyclic_type_variable_test/01: MissingCompileTimeError
@@ -308,72 +294,72 @@
 final_attempt_reinitialization_test/02: Crash
 final_syntax_test/09: Crash
 function_propagation_test: CompileTimeError
-function_type/function_type10_test: CompileTimeError
-function_type/function_type11_test: CompileTimeError
-function_type/function_type14_test: CompileTimeError
-function_type/function_type15_test: CompileTimeError
-function_type/function_type18_test: CompileTimeError
-function_type/function_type19_test: CompileTimeError
-function_type/function_type20_test: CompileTimeError
-function_type/function_type21_test: CompileTimeError
-function_type/function_type22_test: CompileTimeError
-function_type/function_type23_test: CompileTimeError
-function_type/function_type24_test: CompileTimeError
-function_type/function_type25_test: CompileTimeError
-function_type/function_type26_test: CompileTimeError
-function_type/function_type27_test: CompileTimeError
-function_type/function_type28_test: CompileTimeError
-function_type/function_type29_test: CompileTimeError
-function_type/function_type2_test: CompileTimeError
-function_type/function_type30_test: CompileTimeError
-function_type/function_type31_test: CompileTimeError
-function_type/function_type32_test: CompileTimeError
-function_type/function_type33_test: CompileTimeError
-function_type/function_type34_test: CompileTimeError
-function_type/function_type35_test: CompileTimeError
-function_type/function_type36_test: CompileTimeError
-function_type/function_type37_test: CompileTimeError
-function_type/function_type38_test: CompileTimeError
-function_type/function_type39_test: CompileTimeError
-function_type/function_type3_test: CompileTimeError
-function_type/function_type40_test: CompileTimeError
-function_type/function_type41_test: CompileTimeError
-function_type/function_type42_test: CompileTimeError
-function_type/function_type43_test: CompileTimeError
-function_type/function_type44_test: CompileTimeError
-function_type/function_type45_test: CompileTimeError
-function_type/function_type46_test: CompileTimeError
-function_type/function_type47_test: CompileTimeError
-function_type/function_type48_test: CompileTimeError
-function_type/function_type49_test: CompileTimeError
-function_type/function_type50_test: CompileTimeError
-function_type/function_type51_test: CompileTimeError
-function_type/function_type54_test: CompileTimeError
-function_type/function_type55_test: CompileTimeError
-function_type/function_type58_test: CompileTimeError
-function_type/function_type59_test: CompileTimeError
-function_type/function_type62_test: CompileTimeError
-function_type/function_type63_test: CompileTimeError
-function_type/function_type66_test: CompileTimeError
-function_type/function_type67_test: CompileTimeError
-function_type/function_type6_test: CompileTimeError
-function_type/function_type70_test: CompileTimeError
-function_type/function_type71_test: CompileTimeError
-function_type/function_type74_test: CompileTimeError
-function_type/function_type75_test: CompileTimeError
-function_type/function_type78_test: CompileTimeError
-function_type/function_type79_test: CompileTimeError
-function_type/function_type7_test: CompileTimeError
-function_type/function_type82_test: CompileTimeError
-function_type/function_type83_test: CompileTimeError
-function_type/function_type86_test: CompileTimeError
-function_type/function_type87_test: CompileTimeError
-function_type/function_type90_test: CompileTimeError
-function_type/function_type91_test: CompileTimeError
-function_type/function_type94_test: CompileTimeError
-function_type/function_type95_test: CompileTimeError
-function_type/function_type98_test: CompileTimeError
-function_type/function_type99_test: CompileTimeError
+function_type/function_type10_test: RuntimeError # Issue 31766
+function_type/function_type11_test: RuntimeError # Issue 31766
+function_type/function_type14_test: RuntimeError # Issue 31766
+function_type/function_type15_test: RuntimeError # Issue 31766
+function_type/function_type18_test: RuntimeError # Issue 31766
+function_type/function_type19_test: RuntimeError # Issue 31766
+function_type/function_type20_test: RuntimeError # Issue 31766
+function_type/function_type21_test: RuntimeError # Issue 31766
+function_type/function_type22_test: RuntimeError # Issue 31766
+function_type/function_type23_test: RuntimeError # Issue 31766
+function_type/function_type24_test: RuntimeError # Issue 31766
+function_type/function_type25_test: RuntimeError # Issue 31766
+function_type/function_type26_test: RuntimeError # Issue 31766
+function_type/function_type27_test: RuntimeError # Issue 31766
+function_type/function_type28_test: RuntimeError # Issue 31766
+function_type/function_type29_test: RuntimeError # Issue 31766
+function_type/function_type2_test: RuntimeError # Issue 31766
+function_type/function_type30_test: RuntimeError # Issue 31766
+function_type/function_type31_test: RuntimeError # Issue 31766
+function_type/function_type32_test: RuntimeError # Issue 31766
+function_type/function_type33_test: RuntimeError # Issue 31766
+function_type/function_type34_test: RuntimeError # Issue 31766
+function_type/function_type35_test: RuntimeError # Issue 31766
+function_type/function_type36_test: RuntimeError # Issue 31766
+function_type/function_type37_test: RuntimeError # Issue 31766
+function_type/function_type38_test: RuntimeError # Issue 31766
+function_type/function_type39_test: RuntimeError # Issue 31766
+function_type/function_type3_test: RuntimeError # Issue 31766
+function_type/function_type40_test: RuntimeError # Issue 31766
+function_type/function_type41_test: RuntimeError # Issue 31766
+function_type/function_type42_test: RuntimeError # Issue 31766
+function_type/function_type43_test: RuntimeError # Issue 31766
+function_type/function_type44_test: RuntimeError # Issue 31766
+function_type/function_type45_test: RuntimeError # Issue 31766
+function_type/function_type46_test: RuntimeError # Issue 31766
+function_type/function_type47_test: RuntimeError # Issue 31766
+function_type/function_type48_test: RuntimeError # Issue 31766
+function_type/function_type49_test: RuntimeError # Issue 31766
+function_type/function_type50_test: RuntimeError # Issue 31766
+function_type/function_type51_test: RuntimeError # Issue 31766
+function_type/function_type54_test: RuntimeError # Issue 31766
+function_type/function_type55_test: RuntimeError # Issue 31766
+function_type/function_type58_test: RuntimeError # Issue 31766
+function_type/function_type59_test: RuntimeError # Issue 31766
+function_type/function_type62_test: RuntimeError # Issue 31766
+function_type/function_type63_test: RuntimeError # Issue 31766
+function_type/function_type66_test: RuntimeError # Issue 31766
+function_type/function_type67_test: RuntimeError # Issue 31766
+function_type/function_type6_test: RuntimeError # Issue 31766
+function_type/function_type70_test: RuntimeError # Issue 31766
+function_type/function_type71_test: RuntimeError # Issue 31766
+function_type/function_type74_test: RuntimeError # Issue 31766
+function_type/function_type75_test: RuntimeError # Issue 31766
+function_type/function_type78_test: RuntimeError # Issue 31766
+function_type/function_type79_test: RuntimeError # Issue 31766
+function_type/function_type7_test: RuntimeError # Issue 31766
+function_type/function_type82_test: RuntimeError # Issue 31766
+function_type/function_type83_test: RuntimeError # Issue 31766
+function_type/function_type86_test: RuntimeError # Issue 31766
+function_type/function_type87_test: RuntimeError # Issue 31766
+function_type/function_type90_test: RuntimeError # Issue 31766
+function_type/function_type91_test: RuntimeError # Issue 31766
+function_type/function_type94_test: RuntimeError # Issue 31766
+function_type/function_type95_test: RuntimeError # Issue 31766
+function_type/function_type98_test: RuntimeError # Issue 31766
+function_type/function_type99_test: RuntimeError # Issue 31766
 function_type_parameter2_negative_test: Fail
 function_type_parameter_negative_test: Fail
 generalized_void_syntax_test: CompileTimeError
@@ -401,6 +387,7 @@
 invocation_mirror_test: CompileTimeError # Issue 31402 Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Invocation'.
 issue13179_test: CompileTimeError # Issue 31537
 issue18628_2_test/01: MissingCompileTimeError
+issue31596_test: RuntimeError
 issue_25671a_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 issue_25671b_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 local_function_test/01: MissingCompileTimeError
@@ -567,19 +554,10 @@
 override_field_method5_negative_test: Fail
 override_field_test/01: MissingCompileTimeError
 override_field_test/02: MissingCompileTimeError
-override_inheritance_field_test/05: MissingCompileTimeError
-override_inheritance_field_test/07: MissingCompileTimeError
-override_inheritance_field_test/08: MissingCompileTimeError
-override_inheritance_field_test/09: MissingCompileTimeError
-override_inheritance_field_test/10: MissingCompileTimeError
-override_inheritance_field_test/11: MissingCompileTimeError
-override_inheritance_field_test/28: MissingCompileTimeError
-override_inheritance_field_test/30: MissingCompileTimeError
-override_inheritance_field_test/31: MissingCompileTimeError
-override_inheritance_field_test/32: MissingCompileTimeError
-override_inheritance_field_test/33: MissingCompileTimeError
-override_inheritance_field_test/33a: MissingCompileTimeError
-override_inheritance_field_test/34: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError # Issue 31616
+override_inheritance_field_test/06: CompileTimeError # Issue 31616
+override_inheritance_field_test/26: CompileTimeError # Issue 31616
+override_inheritance_field_test/29: CompileTimeError # Issue 31616
 override_inheritance_field_test/44: MissingCompileTimeError
 override_inheritance_field_test/47: MissingCompileTimeError
 override_inheritance_field_test/48: MissingCompileTimeError
@@ -681,12 +659,12 @@
 type_variable_bounds_test/06: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
-typedef_class_in_other_file_test: Crash
 void_block_return_test/00: MissingCompileTimeError
 void_type_callbacks_test/none: CompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartdevc && $runtime != none ]
+assertion_test: RuntimeError # Issue 30326; Expect.equals(expected: <1>, actual: <0>) fails.
 async_star_test/01: RuntimeError
 async_star_test/03: RuntimeError
 async_star_test/04: RuntimeError
@@ -740,7 +718,6 @@
 callable_test/none: RuntimeError # Expect.throws(TypeError) fails: Did not throw
 conditional_import_string_test: RuntimeError # Unsupported operation: String.fromEnvironment can only be used as a const constructor
 conditional_import_test: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-constant_string_interpolation2_test: RuntimeError # TypeError: Cannot read property 'Symbol(dartx.toString)' of null
 cyclic_type_test/00: RuntimeError # Expect.equals(expected: <Derived>, actual: <dynamic>) fails.
 cyclic_type_test/01: RuntimeError # Expect.equals(at index 0: Expected <Derived<Derived<int>>...>, Found: <dynamic>) fails.
 deferred_closurize_load_library_test: RuntimeError # NoSuchMethodError: method not found: 'then'
@@ -831,7 +808,6 @@
 # dartdevc and dartdevk, then expectations for dartdevc, and then expectations
 # for dartdevk.
 [ $runtime != none && ($compiler == dartdevc || $compiler == dartdevk) ]
-assertion_test: RuntimeError # Issue 30326; Expect.equals(expected: <1>, actual: <0>) fails.
 async_star_cancel_while_paused_test: RuntimeError # Issue 29920; Uncaught Expect.listEquals(list length, expected: <4>, actual: <3>) fails: Next element <*3>
 async_star_pause_test: RuntimeError # Uncaught Expect.listEquals(at index 2, expected: <0+>, actual: <0!>) fails
 async_star_test/02: RuntimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index ab95ff9..66efda2 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -71,474 +71,41 @@
 assert_initializer_test/47: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/48: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/none: RuntimeError # KernelVM bug: Constant evaluation.
-assertion_initializer_const_function_test/01: RuntimeError
-assign_static_type_test/02: MissingCompileTimeError
+async_await_syntax_test/c03a: RuntimeError
+async_await_syntax_test/c09a: RuntimeError
+async_await_syntax_test/d03a: RuntimeError
+async_await_syntax_test/d09a: RuntimeError
+async_await_test/02: RuntimeError
+async_await_test/03: RuntimeError
+async_await_test/none: RuntimeError
 async_return_types_test/nestedFuture: Fail
-async_return_types_test/wrongTypeParameter: Fail
+async_return_types_test/none: RuntimeError
 async_star_regression_2238_test: RuntimeError
+async_star_take_reyield_test: RuntimeError
 async_star_test/01: RuntimeError
 async_star_test/03: RuntimeError
 async_star_test/04: RuntimeError
 async_star_test/05: RuntimeError
 async_star_test/none: RuntimeError
+asyncstar_yield_test: RuntimeError
+asyncstar_yieldstar_test: RuntimeError
+bug31436_test: RuntimeError
 compile_time_constant_checked_test/02: MissingCompileTimeError
 const_constructor2_test/20: MissingCompileTimeError
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
+covariance_type_parameter_test/01: RuntimeError
+covariance_type_parameter_test/02: RuntimeError
+covariance_type_parameter_test/03: RuntimeError
+covariance_type_parameter_test/none: RuntimeError
 default_factory2_test/01: Fail
-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
-if_null_precedence_test/none: Pass
-known_identifier_usage_error_test/none: RuntimeError # Issue 28814
-list_literal1_test/01: MissingCompileTimeError
-malbounded_redirecting_factory_test/03: Fail
-malbounded_redirecting_factory_test/04: Fail
-malbounded_type_cast_test: RuntimeError
-malbounded_type_test_test/03: Fail
-malbounded_type_test_test/04: Fail
-malformed2_test/00: RuntimeError
-malformed2_test/01: MissingCompileTimeError
-map_literal1_test/01: MissingCompileTimeError
-mixin_invalid_bound2_test/08: Fail
-mixin_invalid_bound2_test/09: Fail
-mixin_invalid_bound2_test/10: Fail
-mixin_invalid_bound_test/06: Fail
-mixin_invalid_bound_test/07: Fail
-recursive_mixin_test: Crash
-redirecting_factory_infinite_steps_test/01: Fail
-redirecting_factory_malbounded_test/01: Fail
-regress_22728_test: Fail # Dartk Issue 28498
-regress_22728_test: RuntimeError
-regress_26133_test: RuntimeError
-regress_30339_test: RuntimeError
-setter_override_test/01: MissingCompileTimeError
-setter_override_test/02: MissingCompileTimeError
-type_parameter_test/05: MissingCompileTimeError
-type_parameter_test/none: RuntimeError
-type_variable_bounds4_test/01: RuntimeError
-
-[ $compiler == dartk && $runtime == vm && !$checked && $strong ]
-bool_check_test: RuntimeError
-bool_condition_check_test: RuntimeError
-callable_test/none: RuntimeError
-checked_setter2_test: RuntimeError
-checked_setter_test: RuntimeError
-covariance_field_test/01: RuntimeError
-covariance_field_test/02: RuntimeError
-covariance_field_test/03: RuntimeError
-covariance_field_test/04: RuntimeError
-covariance_field_test/05: RuntimeError
-deferred_constraints_type_annotation_test/type_annotation1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-field_override_optimization_test: RuntimeError
-field_type_check2_test/01: MissingRuntimeError
-function_subtype_checked0_test: RuntimeError
-function_subtype_inline2_test: RuntimeError
-function_subtype_setter0_test: RuntimeError
-generic_list_checked_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
-private_super_constructor_test/01: MissingCompileTimeError # Fasta bug: Illegal access to private constructor.
-redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
-redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
-redirecting_factory_long_test: RuntimeError # Fasta bug: Bad compilation of type arguments for redirecting factory.
-regress_20394_test/01: MissingCompileTimeError # Fasta bug: Illegal access to private constructor.
-
-# ===== dartk + vm status lines =====
-[ $compiler == dartk && $runtime == vm && $strong ]
-abstract_beats_arguments_test: MissingCompileTimeError
-abstract_exact_selector_test/01: MissingCompileTimeError
-abstract_factory_constructor_test/00: MissingCompileTimeError
-abstract_getter_test/01: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
-abstract_syntax_test/00: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
-arithmetic2_test: RuntimeError # Throws CastError instead of TypeError
-assert_message_test: CompileTimeError # Issue 31402 (Assert statement)
-assertion_initializer_test: CompileTimeError # Issue 31402 (Assert statement)
-assertion_test: CompileTimeError # Issue 31402 (Assert statement)
-assign_to_type_test/01: MissingCompileTimeError
-assign_to_type_test/02: MissingCompileTimeError
-assign_to_type_test/03: MissingCompileTimeError
-assign_to_type_test/04: MissingCompileTimeError
-assign_top_method_test: MissingCompileTimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_return_types_test/nestedFuture: MissingCompileTimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_pause_test: Fail, OK
-async_star_regression_2238_test: RuntimeError
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
-async_star_test/01: CompileTimeError # Issue 2238.
-async_star_test/01: Pass
-async_star_test/01: RuntimeError
-async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-await_test: CompileTimeError # Issue 31541
-bad_named_parameters2_test/01: MissingCompileTimeError
-bad_named_parameters_test/01: MissingCompileTimeError
-bad_named_parameters_test/02: MissingCompileTimeError
-bad_named_parameters_test/03: MissingCompileTimeError
-bad_named_parameters_test/04: MissingCompileTimeError
-bad_named_parameters_test/05: MissingCompileTimeError
-bad_override_test/01: MissingCompileTimeError
-bad_override_test/02: MissingCompileTimeError
-bad_override_test/06: MissingCompileTimeError
-built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
-built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
-built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
-call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
-call_function2_test: CompileTimeError # Issue 31402 (map literal)
-call_function_apply_test: CompileTimeError # Issue 31402 (Invocation arguments)
-call_function_test: CompileTimeError
-call_non_method_field_test/01: MissingCompileTimeError
-call_non_method_field_test/02: MissingCompileTimeError
-call_nonexistent_constructor_test/01: MissingCompileTimeError
-call_nonexistent_constructor_test/02: MissingCompileTimeError
-call_nonexistent_static_test/01: MissingCompileTimeError
-call_nonexistent_static_test/02: MissingCompileTimeError
-call_nonexistent_static_test/03: MissingCompileTimeError
-call_nonexistent_static_test/04: MissingCompileTimeError
-call_nonexistent_static_test/05: MissingCompileTimeError
-call_nonexistent_static_test/06: MissingCompileTimeError
-call_nonexistent_static_test/07: MissingCompileTimeError
-call_nonexistent_static_test/08: MissingCompileTimeError
-call_nonexistent_static_test/09: MissingCompileTimeError
-call_nonexistent_static_test/10: MissingCompileTimeError
-call_with_no_such_method_test: CompileTimeError # Issue 31402 (Invocation arguments)
-callable_test/none: CompileTimeError # Issue 31402 (Variable declaration)
-cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt1_test: RuntimeError
-cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt2_test: RuntimeError
-cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt3_test: RuntimeError
-check_member_static_test/01: MissingCompileTimeError
-check_method_override_test/01: MissingCompileTimeError
-check_method_override_test/02: MissingCompileTimeError
-class_literal_static_test/12: MissingCompileTimeError
-class_literal_static_test/13: MissingCompileTimeError
-class_literal_static_test/17: MissingCompileTimeError
-class_literal_static_test/18: MissingCompileTimeError
-class_literal_static_test/19: MissingCompileTimeError
-class_literal_static_test/20: MissingCompileTimeError
-class_literal_static_test/21: MissingCompileTimeError
-class_literal_static_test/22: MissingCompileTimeError
-class_literal_static_test/24: MissingCompileTimeError
-class_literal_static_test/25: MissingCompileTimeError
-class_literal_test/12: MissingCompileTimeError
-class_literal_test/13: MissingCompileTimeError
-class_literal_test/17: MissingCompileTimeError
-class_literal_test/18: MissingCompileTimeError
-class_literal_test/19: MissingCompileTimeError
-class_literal_test/20: MissingCompileTimeError
-class_literal_test/21: MissingCompileTimeError
-class_literal_test/22: MissingCompileTimeError
-class_literal_test/24: MissingCompileTimeError
-class_literal_test/25: MissingCompileTimeError
-class_override_test: MissingCompileTimeError
-closure_invoked_through_interface_target_field_test: MissingCompileTimeError
-closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
-compile_time_constant_c_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-compile_time_constant_k_test/01: MissingCompileTimeError
-compile_time_constant_k_test/02: MissingCompileTimeError
-compile_time_constant_k_test/03: MissingCompileTimeError
-compile_time_constant_o_test/01: MissingCompileTimeError
-compile_time_constant_o_test/01: RuntimeError # KernelVM bug: Constant map duplicated key.
-compile_time_constant_o_test/02: MissingCompileTimeError
-compile_time_constant_o_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
-compile_time_constant_static2_test/04: MissingCompileTimeError
-compile_time_constant_static3_test/04: MissingCompileTimeError
-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 (Field declaration)
-conditional_import_string_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-conditional_import_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-conditional_method_invocation_test/12: MissingCompileTimeError
-conditional_method_invocation_test/13: MissingCompileTimeError
-conditional_property_access_test/10: MissingCompileTimeError
-conditional_property_access_test/11: MissingCompileTimeError
-conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
-config_import_corelib_test: CompileTimeError # Issue 31533
-config_import_test: RuntimeError # KernelVM bug: Configurable imports.
-const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
-const_constructor2_test/12: CompileTimeError # Issue 31402 (Invocation arguments)
-const_constructor2_test/20: MissingCompileTimeError
-const_constructor2_test/22: MissingCompileTimeError
-const_constructor2_test/24: MissingCompileTimeError
-const_constructor_nonconst_field_test/01: MissingCompileTimeError # Fasta bug: Non-const expression in field initializer.
-const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_dynamic_type_literal_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
-const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
-const_list_test: RuntimeError
-const_locals_test: RuntimeError
-const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_map4_test: RuntimeError
-const_native_factory_test: MissingCompileTimeError
-const_native_factory_test/01: MissingCompileTimeError # Fasta bug: Issue 29763
-const_nested_test: RuntimeError # KernelVM bug: Constant evaluation.
-const_optional_args_test/01: MissingCompileTimeError # Fasta bug: Default parameter values must be const.
-const_redirecting_factory_test: CompileTimeError # Issue 31402 (Field declaration)
-const_string_test: RuntimeError
-const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_syntax_test/05: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_types_test/01: MissingCompileTimeError
-const_types_test/02: MissingCompileTimeError
-const_types_test/03: MissingCompileTimeError
-const_types_test/04: MissingCompileTimeError
-const_types_test/05: MissingCompileTimeError
-const_types_test/06: MissingCompileTimeError
-const_types_test/13: MissingCompileTimeError
-const_types_test/34: MissingCompileTimeError
-const_types_test/35: MissingCompileTimeError
-const_types_test/39: MissingCompileTimeError
-const_types_test/40: MissingCompileTimeError
-constructor12_test: RuntimeError
-constructor13_test/01: MissingCompileTimeError
-constructor13_test/02: MissingCompileTimeError
-constructor3_test: Fail, OK, Pass
-constructor_duplicate_final_test/01: MissingCompileTimeError
-constructor_duplicate_final_test/02: MissingCompileTimeError
-constructor_named_arguments_test/01: MissingCompileTimeError
-constructor_redirect1_negative_test: MissingCompileTimeError
-constructor_redirect1_negative_test/01: MissingCompileTimeError
-constructor_redirect1_negative_test/none: MissingCompileTimeError
-constructor_redirect2_negative_test: MissingCompileTimeError
-constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
-constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
-covariant_subtyping_test: CompileTimeError
-covariant_subtyping_test: RuntimeError
-create_unresolved_type_test/01: MissingCompileTimeError
-ct_const2_test: Pass, Crash # Flaky
-ct_const_test: RuntimeError
-cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
-cyclic_type2_test: CompileTimeError
-cyclic_type2_test: Fail, OK
-cyclic_type_test/02: CompileTimeError
-cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
-cyclic_type_test/04: CompileTimeError
-cyclic_type_test/04: Fail, OK
-cyclic_type_variable_test/01: MissingCompileTimeError
-cyclic_type_variable_test/02: MissingCompileTimeError
-cyclic_type_variable_test/03: MissingCompileTimeError
-cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/10: Crash
-cyclic_typedef_test/11: Crash
-default_factory2_test/01: MissingCompileTimeError
-default_factory_test/01: MissingCompileTimeError
-deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_closurize_load_library_test: DartkCrash
-deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constant_list_test: RuntimeError
-deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/as_operation: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: Pass # Passes by mistake. Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/is_check: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/new: CompileTimeError # Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/new_before_load: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError # Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/new_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/new_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/none: CompileTimeError # Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/static_method: CompileTimeError # Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_generic1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic1: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic2: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic4: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError # Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: Pass # Passes by mistake. Deferred loading kernel issue 28335
-deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: Pass # Passes by mistake. Deferred loading kernel issue 28335.
-deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_function_type_test: RuntimeError
-deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deferred_inheritance_constraints_test/redirecting_constructor: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inlined_test: RuntimeError
-deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_inval_code_test: RuntimeError
-deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_library_wrong_args_test/none: RuntimeError
-deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_mixin_test: RuntimeError
-deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_no_such_method_test: RuntimeError
-deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_only_constant_test: RuntimeError
-deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_optimized_test: RuntimeError
-deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_redirecting_factory_test: RuntimeError
-deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_regression_22995_test: RuntimeError
-deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_shadow_load_library_test: RuntimeError
-deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_shared_and_unshared_classes_test: RuntimeError
-deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_static_seperate_test: RuntimeError
-deferred_super_dependency_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/as: RuntimeError
-deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/is: RuntimeError
-deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/none: RuntimeError
-deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/type_annotation: RuntimeError
-disassemble_test: Pass, Slow
-duplicate_export_negative_test: Fail # Issue 6134
-dynamic_prefix_core_test/01: MissingCompileTimeError
-dynamic_prefix_core_test/01: RuntimeError # KernelVM bug: Blocked on language issue 29125.
-dynamic_prefix_core_test/none: RuntimeError
-dynamic_test: RuntimeError
-dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
-emit_const_fields_test: CompileTimeError # Issue 31533
-empty_block_case_test: MissingCompileTimeError
-enum_private_test/02: MissingCompileTimeError
-example_constructor_test: Fail, OK
-external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
-extract_type_arguments_test: RuntimeError # Issue 31371
-f_bounded_quantification_test/01: MissingCompileTimeError
-f_bounded_quantification_test/02: MissingCompileTimeError
-factory2_test/03: MissingCompileTimeError
-factory2_test/none: MissingCompileTimeError
-factory3_test/none: MissingCompileTimeError
-factory4_test/00: MissingCompileTimeError
-factory5_test/00: MissingCompileTimeError
-factory6_test/00: MissingCompileTimeError
-field3_test/01: MissingCompileTimeError
-field_initialization_order_test: Fail, OK
-field_method4_test: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError # Issue 29900
-final_attempt_reinitialization_test/02: MissingCompileTimeError # Issue 29900
-final_for_in_variable_test: MissingCompileTimeError
-final_param_test: MissingCompileTimeError
-final_super_field_set_test: MissingCompileTimeError
-final_variable_assignment_test/01: MissingCompileTimeError
-final_variable_assignment_test/02: MissingCompileTimeError
-final_variable_assignment_test/03: MissingCompileTimeError
-final_variable_assignment_test/04: MissingCompileTimeError
-first_class_types_literals_test/03: MissingCompileTimeError
-first_class_types_literals_test/04: MissingCompileTimeError
-first_class_types_literals_test/08: MissingCompileTimeError
-first_class_types_literals_test/09: MissingCompileTimeError
-first_class_types_test: RuntimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
-for_in_side_effects_test/01: MissingCompileTimeError
-function_malformed_result_type_test/00: MissingCompileTimeError
-function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype3_test: RuntimeError
-function_subtype_bound_closure1_test: RuntimeError
-function_subtype_bound_closure2_test: RuntimeError
-function_subtype_bound_closure5_test: RuntimeError
-function_subtype_bound_closure5a_test: RuntimeError
-function_subtype_bound_closure6_test: RuntimeError
-function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype_bound_closure7_test: RuntimeError
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast0_test: RuntimeError
-function_subtype_cast2_test: RuntimeError
-function_subtype_cast3_test: RuntimeError
-function_subtype_local1_test: RuntimeError
-function_subtype_local2_test: RuntimeError
-function_subtype_local5_test: RuntimeError
-function_subtype_not0_test: RuntimeError
-function_subtype_not2_test: RuntimeError
-function_subtype_not3_test: RuntimeError
-function_subtype_simple1_test: RuntimeError
-function_subtype_top_level1_test: RuntimeError
-function_subtype_typearg5_test: RuntimeError
-function_type/function_type0_test: RuntimeError
+f_bounded_quantification4_test: RuntimeError
 function_type/function_type10_test: RuntimeError
 function_type/function_type11_test: RuntimeError
-function_type/function_type12_test: RuntimeError
-function_type/function_type13_test: RuntimeError
 function_type/function_type14_test: RuntimeError
 function_type/function_type15_test: RuntimeError
-function_type/function_type16_test: RuntimeError
-function_type/function_type17_test: RuntimeError
 function_type/function_type18_test: RuntimeError
 function_type/function_type19_test: RuntimeError
-function_type/function_type1_test: RuntimeError
 function_type/function_type20_test: RuntimeError
 function_type/function_type21_test: RuntimeError
 function_type/function_type22_test: RuntimeError
@@ -571,62 +138,324 @@
 function_type/function_type47_test: RuntimeError
 function_type/function_type48_test: RuntimeError
 function_type/function_type49_test: RuntimeError
-function_type/function_type4_test: RuntimeError
 function_type/function_type50_test: RuntimeError
 function_type/function_type51_test: RuntimeError
-function_type/function_type52_test: RuntimeError
-function_type/function_type53_test: RuntimeError
 function_type/function_type54_test: RuntimeError
 function_type/function_type55_test: RuntimeError
-function_type/function_type56_test: RuntimeError
-function_type/function_type57_test: RuntimeError
 function_type/function_type58_test: RuntimeError
 function_type/function_type59_test: RuntimeError
-function_type/function_type5_test: RuntimeError
-function_type/function_type60_test: RuntimeError
-function_type/function_type61_test: RuntimeError
 function_type/function_type62_test: RuntimeError
 function_type/function_type63_test: RuntimeError
-function_type/function_type64_test: RuntimeError
-function_type/function_type65_test: RuntimeError
 function_type/function_type66_test: RuntimeError
 function_type/function_type67_test: RuntimeError
-function_type/function_type68_test: RuntimeError
-function_type/function_type69_test: RuntimeError
 function_type/function_type6_test: RuntimeError
 function_type/function_type70_test: RuntimeError
 function_type/function_type71_test: RuntimeError
-function_type/function_type72_test: RuntimeError
-function_type/function_type73_test: RuntimeError
 function_type/function_type74_test: RuntimeError
 function_type/function_type75_test: RuntimeError
-function_type/function_type76_test: RuntimeError
-function_type/function_type77_test: RuntimeError
 function_type/function_type78_test: RuntimeError
 function_type/function_type79_test: RuntimeError
 function_type/function_type7_test: RuntimeError
-function_type/function_type80_test: RuntimeError
-function_type/function_type81_test: RuntimeError
 function_type/function_type82_test: RuntimeError
 function_type/function_type83_test: RuntimeError
-function_type/function_type84_test: RuntimeError
-function_type/function_type85_test: RuntimeError
 function_type/function_type86_test: RuntimeError
 function_type/function_type87_test: RuntimeError
-function_type/function_type88_test: RuntimeError
-function_type/function_type89_test: RuntimeError
-function_type/function_type8_test: RuntimeError
 function_type/function_type90_test: RuntimeError
 function_type/function_type91_test: RuntimeError
-function_type/function_type92_test: RuntimeError
-function_type/function_type93_test: RuntimeError
 function_type/function_type94_test: RuntimeError
 function_type/function_type95_test: RuntimeError
-function_type/function_type96_test: RuntimeError
-function_type/function_type97_test: RuntimeError
 function_type/function_type98_test: RuntimeError
 function_type/function_type99_test: RuntimeError
-function_type/function_type9_test: RuntimeError
+known_identifier_usage_error_test/none: RuntimeError # Issue 28814
+malbounded_redirecting_factory_test/03: Fail
+malbounded_redirecting_factory_test/04: Fail
+malbounded_type_test_test/03: Fail
+malbounded_type_test_test/04: Fail
+mixin_invalid_bound2_test/08: Fail
+mixin_invalid_bound2_test/09: Fail
+mixin_invalid_bound2_test/10: Fail
+mixin_invalid_bound_test/06: Fail
+mixin_invalid_bound_test/07: Fail
+recursive_mixin_test: Crash
+redirecting_factory_infinite_steps_test/01: Fail
+redirecting_factory_malbounded_test/01: Fail
+regress_22728_test: Fail # Dartk Issue 28498
+regress_22728_test: RuntimeError
+regress_30339_test: RuntimeError
+setter_override_test/01: MissingCompileTimeError
+setter_override_test/02: MissingCompileTimeError
+type_variable_bounds4_test/01: RuntimeError
+
+[ $compiler == dartk && $runtime == vm && !$checked && $strong ]
+bool_check_test: RuntimeError
+bool_condition_check_test: RuntimeError
+callable_test/none: RuntimeError
+checked_setter2_test: RuntimeError
+checked_setter_test: RuntimeError
+compile_time_constant_static2_test/04: MissingCompileTimeError
+compile_time_constant_static3_test/04: MissingCompileTimeError
+conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
+covariance_field_test/01: RuntimeError
+covariance_field_test/02: RuntimeError
+covariance_field_test/03: RuntimeError
+covariance_field_test/04: RuntimeError
+covariance_field_test/05: RuntimeError
+field_override_optimization_test: RuntimeError
+field_type_check2_test/01: MissingRuntimeError
+function_subtype_setter0_test: RuntimeError
+generic_list_checked_test: RuntimeError
+if_null_precedence_test/none: RuntimeError
+type_error_test: RuntimeError # Issue 31402 (Variable declaration)
+
+# ===== dartk + vm status lines =====
+[ $compiler == dartk && $runtime == vm && $strong ]
+abstract_factory_constructor_test/00: MissingCompileTimeError
+abstract_getter_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+abstract_syntax_test/00: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+arithmetic2_test: RuntimeError # Throws CastError instead of TypeError
+assertion_initializer_test: CompileTimeError # Issue 31402 (Assert statement)
+async_await_syntax_test/c10a: MissingCompileTimeError
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d10a: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
+async_return_types_test/nestedFuture: MissingCompileTimeError
+async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
+async_return_types_test/wrongReturnType: MissingCompileTimeError
+async_star_cancel_while_paused_test: RuntimeError
+async_star_pause_test: Fail, OK
+async_star_regression_2238_test: RuntimeError
+async_star_regression_23116_test: RuntimeError
+async_star_regression_fisk_test: RuntimeError
+async_star_test/01: CompileTimeError # Issue 2238.
+async_star_test/01: Pass
+async_star_test/01: RuntimeError
+async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+await_test: CompileTimeError # Issue 31541
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
+bad_override_test/01: MissingCompileTimeError
+bad_override_test/02: MissingCompileTimeError
+built_in_identifier_prefix_test: CompileTimeError
+built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
+built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
+call_function2_test: CompileTimeError # Issue 31402 (map literal)
+call_function_apply_test: CompileTimeError # Issue 31402 (Invocation arguments)
+call_function_test: CompileTimeError
+call_non_method_field_test/01: MissingCompileTimeError
+call_non_method_field_test/02: MissingCompileTimeError
+call_with_no_such_method_test: CompileTimeError # Issue 31402 (Invocation arguments)
+callable_test/none: CompileTimeError # Issue 31402 (Variable declaration)
+cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt3_test: RuntimeError
+check_member_static_test/01: MissingCompileTimeError
+closure_invoked_through_interface_target_field_test: MissingCompileTimeError
+closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
+compile_time_constant_c_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+compile_time_constant_k_test/01: MissingCompileTimeError
+compile_time_constant_k_test/02: MissingCompileTimeError
+compile_time_constant_k_test/03: MissingCompileTimeError
+compile_time_constant_o_test/01: MissingCompileTimeError
+compile_time_constant_o_test/01: RuntimeError # KernelVM bug: Constant map duplicated key.
+compile_time_constant_o_test/02: MissingCompileTimeError
+compile_time_constant_o_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
+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 (Field declaration)
+conditional_import_string_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+conditional_import_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+config_import_corelib_test: CompileTimeError # Issue 31533
+config_import_test: RuntimeError # KernelVM bug: Configurable imports.
+const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
+const_constructor2_test/12: CompileTimeError # Issue 31402 (Invocation arguments)
+const_constructor2_test/20: MissingCompileTimeError
+const_constructor2_test/22: MissingCompileTimeError
+const_constructor2_test/24: MissingCompileTimeError
+const_constructor_nonconst_field_test/01: MissingCompileTimeError # Fasta bug: Non-const expression in field initializer.
+const_dynamic_type_literal_test/02: MissingCompileTimeError
+const_dynamic_type_literal_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
+const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
+const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
+const_list_test: RuntimeError
+const_locals_test: RuntimeError
+const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_map4_test: RuntimeError
+const_nested_test: RuntimeError # KernelVM bug: Constant evaluation.
+const_optional_args_test/01: MissingCompileTimeError # Fasta bug: Default parameter values must be const.
+const_redirecting_factory_test: CompileTimeError # Issue 31402 (Field declaration)
+const_string_test: RuntimeError
+const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_syntax_test/05: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_types_test/34: MissingCompileTimeError
+const_types_test/35: MissingCompileTimeError
+const_types_test/39: MissingCompileTimeError
+const_types_test/40: MissingCompileTimeError
+constructor12_test: RuntimeError
+constructor3_test: Fail, OK, Pass
+constructor_redirect1_negative_test/01: MissingCompileTimeError
+constructor_redirect2_negative_test: MissingCompileTimeError
+constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
+constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
+covariant_subtyping_test: CompileTimeError
+covariant_subtyping_test: RuntimeError
+ct_const2_test: Pass, Crash # Flaky
+ct_const_test: RuntimeError
+cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
+cyclic_type2_test: CompileTimeError
+cyclic_type2_test: Fail, OK
+cyclic_type_test/02: CompileTimeError
+cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
+cyclic_type_test/04: CompileTimeError
+cyclic_type_test/04: Fail, OK
+cyclic_type_variable_test/01: MissingCompileTimeError
+cyclic_type_variable_test/02: MissingCompileTimeError
+cyclic_type_variable_test/03: MissingCompileTimeError
+cyclic_type_variable_test/04: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
+default_factory2_test/01: MissingCompileTimeError
+default_factory_test/01: MissingCompileTimeError
+deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_closurize_load_library_test: DartkCrash
+deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constant_list_test: RuntimeError
+deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_type_annotation_test/new: CompileTimeError # Deferred loading kernel issue 28335.
+deferred_constraints_type_annotation_test/new_generic1: CompileTimeError # Deferred loading kernel issue 28335
+deferred_constraints_type_annotation_test/none: CompileTimeError # Deferred loading kernel issue 28335.
+deferred_constraints_type_annotation_test/static_method: CompileTimeError # Deferred loading kernel issue 28335.
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError # Deferred loading kernel issue 28335.
+deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_function_type_test: RuntimeError
+deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inheritance_constraints_test/redirecting_constructor: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inlined_test: RuntimeError
+deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_inval_code_test: RuntimeError
+deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_mixin_test: RuntimeError
+deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_no_such_method_test: RuntimeError
+deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_optimized_test: RuntimeError
+deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_redirecting_factory_test: RuntimeError
+deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_shadow_load_library_test: RuntimeError
+deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_shared_and_unshared_classes_test: RuntimeError
+deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_static_seperate_test: RuntimeError
+deferred_super_dependency_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+disassemble_test: Pass, Slow
+duplicate_export_negative_test: Fail # Issue 6134
+dynamic_prefix_core_test/none: CompileTimeError
+dynamic_test: RuntimeError
+dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
+emit_const_fields_test: CompileTimeError # Issue 31533
+example_constructor_test: Fail, OK
+external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
+external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
+external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
+extract_type_arguments_test: RuntimeError # Issue 31371
+f_bounded_quantification_test/01: MissingCompileTimeError
+f_bounded_quantification_test/02: MissingCompileTimeError
+factory2_test/03: MissingCompileTimeError
+factory4_test/00: MissingCompileTimeError
+field3_test/01: MissingCompileTimeError
+field_initialization_order_test: Fail, OK
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
+field_override_test/00: MissingCompileTimeError
+field_override_test/01: MissingCompileTimeError
+first_class_types_test: RuntimeError
+flatten_test/05: MissingRuntimeError
+flatten_test/08: MissingRuntimeError
+flatten_test/09: MissingRuntimeError
+flatten_test/12: MissingRuntimeError
+for_in_side_effects_test/01: MissingCompileTimeError
+function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
+function_subtype3_test: RuntimeError
+function_subtype_bound_closure1_test: RuntimeError
+function_subtype_bound_closure2_test: RuntimeError
+function_subtype_bound_closure5_test: RuntimeError
+function_subtype_bound_closure5a_test: RuntimeError
+function_subtype_bound_closure6_test: RuntimeError
+function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
+function_subtype_bound_closure7_test: RuntimeError
+function_subtype_call1_test: RuntimeError
+function_subtype_call2_test: RuntimeError
+function_subtype_cast0_test: RuntimeError
+function_subtype_cast2_test: RuntimeError
+function_subtype_cast3_test: RuntimeError
+function_subtype_checked0_test: RuntimeError
+function_subtype_inline2_test: RuntimeError
+function_subtype_local1_test: RuntimeError
+function_subtype_local2_test: RuntimeError
+function_subtype_local5_test: RuntimeError
+function_subtype_not0_test: RuntimeError
+function_subtype_not2_test: RuntimeError
+function_subtype_not3_test: RuntimeError
+function_subtype_simple1_test: RuntimeError
+function_subtype_top_level1_test: RuntimeError
+function_subtype_typearg5_test: RuntimeError
 function_type2_test: RuntimeError
 function_type_alias2_test: RuntimeError
 function_type_alias3_test: RuntimeError
@@ -640,9 +469,6 @@
 generic_function_bounds_test: CompileTimeError
 generic_function_dcall_test: CompileTimeError
 generic_function_dcall_test: RuntimeError
-generic_function_type_as_type_argument_test/02: Pass # For the wrong reason, issue 30931
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError, OK # No type inference
-generic_function_typedef2_test/04: MissingCompileTimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
 generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -651,81 +477,39 @@
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
 generic_methods_tearoff_specialization_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_unused_parameter_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_methods_unused_parameter_test: RuntimeError
+generic_methods_unused_parameter_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_no_such_method_dispatcher_simple_test: CompileTimeError # Issue 31533
 generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
 generic_tearoff_test: CompileTimeError
 generic_tearoff_test: RuntimeError
 generic_test: RuntimeError
-getter_no_setter2_test/01: MissingCompileTimeError
-getter_no_setter2_test/03: MissingCompileTimeError
-getter_no_setter_test/01: MissingCompileTimeError
-getter_no_setter_test/03: MissingCompileTimeError
 getter_override_test/03: MissingCompileTimeError
 hello_dart_test: Crash # error: expected: cls.is_type_finalized()
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
-if_null_assignment_behavior_test/13: MissingCompileTimeError
-if_null_assignment_behavior_test/15: MissingCompileTimeError
 if_null_evaluation_order_test: Pass
-if_null_precedence_test/none: RuntimeError
 implicit_this_test/01: MissingCompileTimeError
-implicit_this_test/02: MissingCompileTimeError
 implicit_this_test/04: MissingCompileTimeError
-import_combinators2_test/00: MissingCompileTimeError
-import_self_test/01: MissingCompileTimeError
-initializing_formal_final_test: MissingCompileTimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instantiate_tearoff_after_contravariance_check_test: CompileTimeError
 instantiate_tearoff_of_call_test: CompileTimeError
 instantiate_tearoff_test: CompileTimeError
-interface_test/00: MissingCompileTimeError
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
-is_malformed_type_test/95: MissingCompileTimeError
-is_malformed_type_test/97: MissingCompileTimeError
-is_malformed_type_test/99: MissingCompileTimeError
-is_not_class2_test/01: MissingCompileTimeError
-isnot_malformed_type_test/01: MissingCompileTimeError
-issue11724_test/01: MissingCompileTimeError
 issue13179_test: CompileTimeError # Issue 31402 (Parameter default value)
-issue15606_test/01: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: DartkCrash
-known_identifier_prefix_error_test/09: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/10: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/11: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/12: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/13: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/14: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/15: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/16: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/17: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/18: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/19: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/20: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/21: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/22: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/23: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/24: MissingCompileTimeError # Issue 28814
 language_2/least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_expansive_test/none: CompileTimeError
-library_ambiguous_test/00: MissingCompileTimeError
-library_ambiguous_test/01: MissingCompileTimeError
-library_ambiguous_test/02: MissingCompileTimeError
-library_ambiguous_test/03: MissingCompileTimeError
-library_ambiguous_test/04: MissingCompileTimeError
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_no_mirror_support: RuntimeError
 list_is_test: RuntimeError
-list_literal_syntax_test/01: MissingCompileTimeError
-list_literal_syntax_test/02: MissingCompileTimeError
-list_literal_syntax_test/03: MissingCompileTimeError
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/01: MissingCompileTimeError
@@ -750,60 +534,9 @@
 malbounded_type_test_test/00: MissingCompileTimeError
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
-malformed2_test/01: MissingCompileTimeError
-malformed2_test/02: MissingCompileTimeError
-malformed2_test/03: MissingCompileTimeError
-malformed2_test/04: MissingCompileTimeError
-malformed2_test/05: MissingCompileTimeError
-malformed2_test/06: MissingCompileTimeError
-malformed2_test/07: MissingCompileTimeError
-malformed2_test/08: MissingCompileTimeError
-malformed2_test/09: MissingCompileTimeError
-malformed2_test/10: MissingCompileTimeError
-malformed2_test/11: MissingCompileTimeError
-malformed2_test/12: MissingCompileTimeError
-malformed2_test/13: MissingCompileTimeError
-malformed_bound_test/00: MissingCompileTimeError
-malformed_inheritance_test/01: MissingCompileTimeError
-malformed_inheritance_test/03: MissingCompileTimeError
-malformed_inheritance_test/05: MissingCompileTimeError
-malformed_test/00: MissingCompileTimeError
-malformed_test/01: MissingCompileTimeError
-malformed_test/02: MissingCompileTimeError
-malformed_test/03: MissingCompileTimeError
-malformed_test/04: MissingCompileTimeError
-malformed_test/05: MissingCompileTimeError
-malformed_test/06: MissingCompileTimeError
-malformed_test/07: MissingCompileTimeError
-malformed_test/08: MissingCompileTimeError
-malformed_test/09: MissingCompileTimeError
-malformed_test/10: MissingCompileTimeError
-malformed_test/11: MissingCompileTimeError
-malformed_test/12: MissingCompileTimeError
-malformed_test/13: MissingCompileTimeError
-malformed_test/14: MissingCompileTimeError
-malformed_test/15: MissingCompileTimeError
-malformed_test/16: MissingCompileTimeError
-malformed_test/17: MissingCompileTimeError
-malformed_test/18: MissingCompileTimeError
-malformed_test/19: MissingCompileTimeError
-malformed_test/20: MissingCompileTimeError
-malformed_test/21: MissingCompileTimeError
-malformed_test/22: MissingCompileTimeError
-malformed_test/23: MissingCompileTimeError
-malformed_test/24: MissingCompileTimeError
-malformed_type_test: MissingCompileTimeError
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-map_literal3_test/04: MissingCompileTimeError
-method_override2_test/00: MissingCompileTimeError
-method_override2_test/01: MissingCompileTimeError
-method_override2_test/02: MissingCompileTimeError
-method_override2_test/03: MissingCompileTimeError
-method_override3_test/00: MissingCompileTimeError
-method_override3_test/01: MissingCompileTimeError
-method_override3_test/02: MissingCompileTimeError
 method_override4_test/01: MissingCompileTimeError
 method_override4_test/02: MissingCompileTimeError
 method_override4_test/03: MissingCompileTimeError
@@ -816,15 +549,11 @@
 method_override7_test/03: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError # Issue 31616
-mixin_illegal_constructor_test/13: MissingCompileTimeError
-mixin_illegal_constructor_test/14: MissingCompileTimeError
-mixin_illegal_constructor_test/15: MissingCompileTimeError
-mixin_illegal_constructor_test/16: MissingCompileTimeError
-mixin_illegal_static_access_test/01: MissingCompileTimeError
-mixin_illegal_static_access_test/02: MissingCompileTimeError
+mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
+mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
+mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_illegal_super_use_test: Skip # Issues 24478 and 23773
 mixin_illegal_superclass_test: Skip # Issues 24478 and 23773
-mixin_illegal_syntax_test/13: MissingCompileTimeError
 mixin_invalid_bound2_test/02: MissingCompileTimeError
 mixin_invalid_bound2_test/03: MissingCompileTimeError
 mixin_invalid_bound2_test/04: MissingCompileTimeError
@@ -867,53 +596,24 @@
 mixin_type_parameters_errors_test/03: MissingCompileTimeError
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
-mixin_with_two_implicit_constructors_test: MissingCompileTimeError
 mock_writable_final_private_field_test: RuntimeError # Issue 30849
 named_constructor_test/01: MissingCompileTimeError
 named_constructor_test/01: MissingRuntimeError # Fasta bug: Bad compilation of constructor reference.
-named_constructor_test/03: MissingCompileTimeError
-named_parameters2_test: MissingCompileTimeError
-named_parameters3_test: MissingCompileTimeError
-named_parameters4_test: MissingCompileTimeError
-named_parameters_aggregated_test/05: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 named_parameters_default_eq_test/none: RuntimeError
-named_parameters_test/01: MissingCompileTimeError
 named_parameters_test/02: MissingCompileTimeError
-named_parameters_test/03: MissingCompileTimeError
 named_parameters_test/04: MissingCompileTimeError
-named_parameters_test/05: MissingCompileTimeError
 named_parameters_test/06: MissingCompileTimeError
-named_parameters_test/07: MissingCompileTimeError
 named_parameters_test/08: MissingCompileTimeError
-named_parameters_test/09: MissingCompileTimeError
 named_parameters_test/10: MissingCompileTimeError
 nested_generic_closure_test: RuntimeError
-new_expression_type_args_test/00: MissingCompileTimeError
-new_expression_type_args_test/01: MissingCompileTimeError
-new_expression_type_args_test/02: MissingCompileTimeError
-new_prefix_test/01: MissingCompileTimeError
 no_main_test/01: DartkCrash
 no_main_test/01: Skip
-no_such_constructor_test/01: MissingCompileTimeError
-not_enough_positional_arguments_test/00: MissingCompileTimeError
-not_enough_positional_arguments_test/01: MissingCompileTimeError
-not_enough_positional_arguments_test/02: MissingCompileTimeError
-not_enough_positional_arguments_test/03: MissingCompileTimeError
-not_enough_positional_arguments_test/05: MissingCompileTimeError
-not_enough_positional_arguments_test/06: MissingCompileTimeError
-not_enough_positional_arguments_test/07: MissingCompileTimeError
 null_no_such_method_test: CompileTimeError # Issue 31533
-on_catch_malformed_type_test: MissingCompileTimeError
-optional_named_parameters_test/01: MissingCompileTimeError
 optional_named_parameters_test/02: MissingCompileTimeError
-optional_named_parameters_test/03: MissingCompileTimeError
 optional_named_parameters_test/04: MissingCompileTimeError
-optional_named_parameters_test/05: MissingCompileTimeError
 optional_named_parameters_test/06: MissingCompileTimeError
-optional_named_parameters_test/07: MissingCompileTimeError
 optional_named_parameters_test/08: MissingCompileTimeError
-optional_named_parameters_test/09: MissingCompileTimeError
 override_field_test/02: MissingCompileTimeError
 override_field_test/03: MissingCompileTimeError
 override_inheritance_abstract_test/02: MissingCompileTimeError
@@ -935,38 +635,20 @@
 override_inheritance_abstract_test/24: MissingCompileTimeError
 override_inheritance_abstract_test/25: MissingCompileTimeError
 override_inheritance_abstract_test/26: MissingCompileTimeError
-override_inheritance_abstract_test/28: MissingCompileTimeError
-override_inheritance_field_test/05: MissingCompileTimeError
-override_inheritance_field_test/07: MissingCompileTimeError
-override_inheritance_field_test/08: MissingCompileTimeError
-override_inheritance_field_test/09: MissingCompileTimeError
-override_inheritance_field_test/10: MissingCompileTimeError
-override_inheritance_field_test/11: MissingCompileTimeError
-override_inheritance_field_test/28: MissingCompileTimeError
-override_inheritance_field_test/30: MissingCompileTimeError
-override_inheritance_field_test/31: MissingCompileTimeError
-override_inheritance_field_test/32: MissingCompileTimeError
-override_inheritance_field_test/33: MissingCompileTimeError
-override_inheritance_field_test/33a: MissingCompileTimeError
-override_inheritance_field_test/34: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError # Issue 31616
+override_inheritance_field_test/06: CompileTimeError # Issue 31616
+override_inheritance_field_test/26: CompileTimeError # Issue 31616
+override_inheritance_field_test/29: CompileTimeError # Issue 31616
 override_inheritance_field_test/44: MissingCompileTimeError
 override_inheritance_field_test/47: MissingCompileTimeError
 override_inheritance_field_test/48: MissingCompileTimeError
 override_inheritance_field_test/53: MissingCompileTimeError
 override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/02: CompileTimeError # Issue 31616
-override_inheritance_method_test/04: MissingCompileTimeError
-override_inheritance_method_test/05: MissingCompileTimeError
-override_inheritance_method_test/06: MissingCompileTimeError
-override_inheritance_method_test/11: MissingCompileTimeError
-override_inheritance_method_test/12: MissingCompileTimeError
-override_inheritance_method_test/13: MissingCompileTimeError
-override_inheritance_method_test/14: MissingCompileTimeError
-override_inheritance_method_test/19: MissingCompileTimeError
-override_inheritance_method_test/20: MissingCompileTimeError
-override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/28: CompileTimeError # Issue 31616
-override_inheritance_method_test/29: CompileTimeError # Issue 31616
+override_inheritance_generic_test/02: CompileTimeError
+override_inheritance_method_test/17: CompileTimeError
+override_inheritance_method_test/18: CompileTimeError
+override_inheritance_method_test/28: CompileTimeError
+override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/06: MissingCompileTimeError
 override_inheritance_mixed_test/07: MissingCompileTimeError
 override_inheritance_mixed_test/09: MissingCompileTimeError
@@ -979,42 +661,23 @@
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
-part2_test/01: MissingCompileTimeError
-prefix16_test/00: MissingCompileTimeError
-prefix16_test/01: MissingCompileTimeError
-prefix22_test/00: MissingCompileTimeError
-prefix23_test/00: MissingCompileTimeError
-private_access_test/01: MissingCompileTimeError
-private_access_test/02: MissingCompileTimeError
-private_access_test/03: MissingCompileTimeError
-private_access_test/04: MissingCompileTimeError
-private_access_test/05: MissingCompileTimeError
-private_access_test/06: MissingCompileTimeError
 recursive_generic_test: RuntimeError
 recursive_mixin_test: Crash
 recursive_mixin_test: RuntimeError
+redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
+redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/03: MissingCompileTimeError
-redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
+redirecting_factory_long_test: RuntimeError # Fasta bug: Bad compilation of type arguments for redirecting factory.
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: Crash, Pass
-redirecting_factory_reflection_test: RuntimeError
-regress_13494_test: MissingCompileTimeError
-regress_17382_test: MissingCompileTimeError
-regress_19413_test: MissingCompileTimeError
-regress_21793_test/01: MissingCompileTimeError
-regress_22438_test: MissingCompileTimeError
 regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-regress_22936_test: MissingCompileTimeError
 regress_22976_test/01: CompileTimeError # Issue 31402 (Variable declaration)
 regress_23089_test: Crash
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 regress_23408_test: RuntimeError
 regress_25550_test: CompileTimeError # Issue 31402 (Variable declaration)
-regress_27572_test: MissingCompileTimeError
 regress_27617_test/1: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
-regress_28217_test/01: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
-regress_28217_test/none: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
 regress_28278_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
 regress_29405_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -1024,68 +687,35 @@
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
-static_field3_test/01: MissingCompileTimeError
-static_field3_test/02: MissingCompileTimeError
-static_field3_test/03: MissingCompileTimeError
-static_field3_test/04: MissingCompileTimeError
-static_final_field2_test/01: MissingCompileTimeError
-static_getter_no_setter1_test/01: MissingCompileTimeError
-static_getter_no_setter2_test/01: MissingCompileTimeError
-static_setter_get_test/01: MissingCompileTimeError
 string_interpolate_test: CompileTimeError # Issue 31533
 string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
 string_split_test: CompileTimeError # Issue 31616
 string_supertype_checked_test: CompileTimeError # Issue 31616
 super_bound_closure_test/none: CompileTimeError # Issue 31533
-super_call4_test/01: MissingCompileTimeError
-super_call4_test/02: MissingCompileTimeError
-super_call4_test/03: MissingCompileTimeError
-super_call4_test/04: MissingCompileTimeError
-super_getter_setter_test/01: MissingCompileTimeError
-super_getter_setter_test/02: MissingCompileTimeError
-super_getter_setter_test/03: MissingCompileTimeError
-super_no_such_method1_test/01: MissingCompileTimeError
-super_no_such_method2_test/01: MissingCompileTimeError
-super_no_such_method3_test/01: MissingCompileTimeError
-super_no_such_method4_test/01: MissingCompileTimeError
-super_no_such_method5_test/01: MissingCompileTimeError
-super_operator_index5_test/01: MissingCompileTimeError
-super_operator_index5_test/02: MissingCompileTimeError
-super_operator_index_test/01: MissingCompileTimeError
-super_operator_index_test/02: MissingCompileTimeError
-super_operator_index_test/03: MissingCompileTimeError
-super_operator_index_test/04: MissingCompileTimeError
-super_operator_index_test/05: MissingCompileTimeError
-super_operator_index_test/06: MissingCompileTimeError
-super_operator_index_test/07: MissingCompileTimeError
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
+super_no_such_method1_test: CompileTimeError
+super_no_such_method2_test: CompileTimeError
+super_no_such_method3_test: CompileTimeError
+super_no_such_method4_test: CompileTimeError
+super_no_such_method5_test: CompileTimeError
+super_operator_index5_test: CompileTimeError
+super_operator_index6_test: CompileTimeError
+super_operator_index7_test: CompileTimeError
+super_operator_index8_test: CompileTimeError
 super_test: Fail, OK
 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.
-switch_fallthru_test/01: MissingCompileTimeError
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-top_level_getter_no_setter1_test: MissingCompileTimeError
-top_level_getter_no_setter2_test: MissingCompileTimeError
-transitive_private_library_access_test: MissingCompileTimeError
-try_catch_on_syntax_test/07: MissingCompileTimeError
-try_catch_on_syntax_test/10: MissingCompileTimeError
-try_catch_on_syntax_test/11: MissingCompileTimeError
-try_catch_syntax_test/08: MissingCompileTimeError
-type_error_test: RuntimeError # Issue 31402 (Variable declaration)
 type_literal_test: RuntimeError
-type_parameter_test/01: MissingCompileTimeError
-type_parameter_test/02: MissingCompileTimeError
-type_parameter_test/06: MissingCompileTimeError
-type_parameter_test/07: MissingCompileTimeError
-type_parameter_test/08: MissingCompileTimeError
-type_parameter_test/09: MissingCompileTimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
 type_promotion_functions_test/04: CompileTimeError # Issue 31537
@@ -1100,31 +730,14 @@
 type_variable_bounds2_test: MissingCompileTimeError
 type_variable_bounds3_test/00: MissingCompileTimeError
 type_variable_bounds4_test/01: MissingCompileTimeError
-type_variable_bounds_test/00: MissingCompileTimeError
 type_variable_bounds_test/01: MissingCompileTimeError
 type_variable_bounds_test/02: MissingCompileTimeError
 type_variable_bounds_test/03: MissingCompileTimeError
 type_variable_bounds_test/04: MissingCompileTimeError
 type_variable_bounds_test/05: MissingCompileTimeError
 type_variable_bounds_test/06: MissingCompileTimeError
-type_variable_bounds_test/07: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
-type_variable_bounds_test/09: MissingCompileTimeError
-type_variable_bounds_test/10: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_conflict2_test/03: MissingCompileTimeError
-type_variable_conflict2_test/04: MissingCompileTimeError
-type_variable_scope2_test: MissingCompileTimeError
-type_variable_scope_test/00: MissingCompileTimeError
-type_variable_scope_test/01: MissingCompileTimeError
-type_variable_scope_test/04: MissingCompileTimeError
-type_variable_scope_test/05: MissingCompileTimeError
-type_variable_static_context_test: MissingCompileTimeError
-unresolved_default_constructor_test/01: MissingCompileTimeError
-unresolved_in_factory_test: MissingCompileTimeError
-unresolved_top_level_method_test: MissingCompileTimeError
-unresolved_top_level_var_test: MissingCompileTimeError
-vm/canonicalization_preserves_deopt_test: CompileTimeError # Issue 31402 (Assert statement)
 vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
 vm/debug_break_enabled_vm_test/01: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/debug_break_enabled_vm_test/none: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
@@ -1173,7 +786,7 @@
 void_type_usage_test/paren_for: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
-wrong_number_type_arguments_test/*: MissingCompileTimeError
+wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
@@ -1184,8 +797,6 @@
 class_cycle_test/03: MissingCompileTimeError # Please triage.
 duplicate_implements_test/01: MissingCompileTimeError # Please triage.
 duplicate_implements_test/02: MissingCompileTimeError # Please triage.
-duplicate_implements_test/03: MissingCompileTimeError # Please triage.
-duplicate_implements_test/04: MissingCompileTimeError # Please triage.
 generic_methods_generic_function_result_test/01: MissingCompileTimeError # Please triage.
 issue23244_test: RuntimeError # Please triage.
 least_upper_bound_expansive_test/none: RuntimeError # Please triage.
@@ -1208,8 +819,10 @@
 cyclic_type_variable_test/none: Crash
 external_test/13: Crash
 instance_call_wrong_argument_count_negative_test: Crash # Issue(http://dartbug.com/31630)
-optional_named_parameters_test/06: Crash
-optional_named_parameters_test/08: Crash
+optional_named_parameters_test/02: Crash # Issue 31795
+optional_named_parameters_test/04: Crash # Issue 31795
+optional_named_parameters_test/06: Crash # Issue 31795
+optional_named_parameters_test/08: Crash # Issue 31795
 regress_29025_test: Crash
 tearoff_dynamic_test: Crash
 type_promotion_functions_test/05: Pass
@@ -1217,7 +830,6 @@
 type_promotion_functions_test/07: Pass
 type_promotion_functions_test/08: Pass
 type_promotion_functions_test/10: Pass
-vm/async_await_catch_stacktrace_test: Crash
 
 [ $compiler == dartkp && $mode == product && $runtime == dart_precompiled && $strong ]
 vm/type_vm_test/28: MissingRuntimeError
@@ -1248,26 +860,37 @@
 assert_initializer_test/47: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/48: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/none: RuntimeError # KernelVM bug: Constant evaluation.
+assertion_initializer_const_error2_test/cc01: Crash
 assertion_initializer_const_error2_test/cc02: Crash
-assertion_initializer_const_error_test/none: Crash
-assertion_initializer_const_function_test/01: Crash
-assertion_initializer_const_function_test/none: Crash
-assign_static_type_test/02: MissingCompileTimeError
+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
+async_await_syntax_test/c03a: RuntimeError
+async_await_syntax_test/c09a: RuntimeError
+async_await_syntax_test/d03a: RuntimeError
+async_await_syntax_test/d09a: RuntimeError
 async_await_test: RuntimeError
 async_return_types_test/nestedFuture: Fail
-async_return_types_test/wrongTypeParameter: Fail
+async_return_types_test/none: RuntimeError
+async_star_take_reyield_test: RuntimeError
+asyncstar_yield_test: RuntimeError
+asyncstar_yieldstar_test: RuntimeError
+bug31436_test: RuntimeError
 compile_time_constant_checked_test/02: MissingCompileTimeError
 const_constructor2_test/20: MissingCompileTimeError
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
+covariance_type_parameter_test/01: RuntimeError
+covariance_type_parameter_test/02: RuntimeError
+covariance_type_parameter_test/03: RuntimeError
+covariance_type_parameter_test/none: RuntimeError
 default_factory2_test/01: Fail
-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
 function_subtype_checked0_test: Pass
 function_subtype_closure0_test: Pass
 function_subtype_closure1_test: Pass
@@ -1275,488 +898,12 @@
 function_subtype_inline1_test: Pass
 function_subtype_inline2_test: Pass
 function_subtype_setter0_test: Pass
-function_type2_test: RuntimeError
-generic_functions_test: Pass # Issue 25869
-generic_local_functions_test: Pass # Issue 25869
-generic_methods_function_type_test: Pass # Issue 25869
-generic_methods_generic_function_parameter_test: Pass # Issue 25869
-generic_methods_new_test: Pass # Issue 25869
-generic_methods_test: Pass # Issue 25869
-list_literal1_test/01: MissingCompileTimeError
-malbounded_redirecting_factory_test/03: Fail
-malbounded_redirecting_factory_test/04: Fail
-malbounded_type_cast_test: RuntimeError
-malbounded_type_test_test/03: Fail
-malbounded_type_test_test/04: Fail
-malformed2_test/00: RuntimeError
-malformed2_test/01: MissingCompileTimeError
-map_literal1_test/01: MissingCompileTimeError
-mixin_invalid_bound2_test/08: Fail
-mixin_invalid_bound2_test/09: Fail
-mixin_invalid_bound2_test/10: Fail
-mixin_invalid_bound_test/06: Fail
-mixin_invalid_bound_test/07: Fail
-redirecting_factory_infinite_steps_test/01: Fail
-redirecting_factory_malbounded_test/01: Fail
-regress_22728_test: Fail # Dartk Issue 28498
-regress_22728_test: RuntimeError
-regress_26133_test: RuntimeError
-regress_30339_test: Crash
-setter_override_test/01: MissingCompileTimeError
-setter_override_test/02: MissingCompileTimeError
-type_parameter_test/05: MissingCompileTimeError
-type_parameter_test/none: RuntimeError
-type_variable_bounds4_test/01: RuntimeError
-
-[ $compiler == dartkp && $runtime == dart_precompiled && !$checked && $strong ]
-assertion_initializer_const_error_test/01: MissingCompileTimeError
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-callable_test/none: RuntimeError
-checked_setter2_test: RuntimeError
-checked_setter_test: RuntimeError
-covariance_field_test/01: RuntimeError
-covariance_field_test/02: RuntimeError
-covariance_field_test/03: RuntimeError
-covariance_field_test/04: RuntimeError
-covariance_field_test/05: RuntimeError
-deferred_constraints_type_annotation_test/type_annotation1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-implicit_downcast_during_assignment_test: RuntimeError
-implicit_downcast_during_combiner_test: RuntimeError
-implicit_downcast_during_compound_assignment_test: RuntimeError
-implicit_downcast_during_conditional_expression_test: RuntimeError
-implicit_downcast_during_do_test: RuntimeError
-implicit_downcast_during_for_condition_test: RuntimeError
-implicit_downcast_during_for_initializer_expression_test: RuntimeError
-implicit_downcast_during_for_initializer_var_test: RuntimeError
-implicit_downcast_during_if_null_assignment_test: RuntimeError
-implicit_downcast_during_if_statement_test: RuntimeError
-implicit_downcast_during_list_literal_test: RuntimeError
-implicit_downcast_during_logical_expression_test: RuntimeError
-implicit_downcast_during_map_literal_test: RuntimeError
-implicit_downcast_during_not_test: RuntimeError
-implicit_downcast_during_return_async_test: RuntimeError
-implicit_downcast_during_return_test: RuntimeError
-implicit_downcast_during_variable_declaration_test: RuntimeError
-implicit_downcast_during_while_statement_test: RuntimeError
-implicit_downcast_during_yield_star_test: RuntimeError
-implicit_downcast_during_yield_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
-private_super_constructor_test/01: MissingCompileTimeError
-redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
-redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
-redirecting_factory_long_test: RuntimeError # Fasta bug: Bad compilation of type arguments for redirecting factory.
-regress_20394_test/01: MissingCompileTimeError # Fasta bug: Illegal access to private constructor.
-regress_30339_test: RuntimeError
-vm/causal_async_exception_stack_test: RuntimeError
-
-# ==== dartkp + dart_precompiled status lines ====
-[ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
-abstract_beats_arguments_test: MissingCompileTimeError
-abstract_exact_selector_test/01: MissingCompileTimeError
-abstract_factory_constructor_test/00: MissingCompileTimeError
-abstract_getter_test/01: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
-abstract_syntax_test/00: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
-assert_message_test: CompileTimeError # Issue 31402 (Assert statement)
-assert_with_type_test_or_cast_test: Pass, Crash
-assertion_initializer_const_error_test/01: Pass
-assertion_initializer_test: CompileTimeError # Issue 31402 (Assert statement)
-assertion_test: CompileTimeError # Issue 31402 (Assert statement)
-assertion_test: RuntimeError # Issue 30326
-assign_to_type_test/01: MissingCompileTimeError
-assign_to_type_test/02: MissingCompileTimeError
-assign_to_type_test/03: MissingCompileTimeError
-assign_to_type_test/04: MissingCompileTimeError
-assign_top_method_test: MissingCompileTimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_return_types_test/nestedFuture: MissingCompileTimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_pause_test: Fail, OK
-async_star_regression_2238_test: RuntimeError
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
-async_star_test/01: CompileTimeError # Issue 2238.
-async_star_test/01: Crash
-async_star_test/01: Pass
-async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/02: RuntimeError
-async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-await_test: CompileTimeError # Issue 31541
-bad_named_parameters2_test/01: MissingCompileTimeError
-bad_named_parameters_test/01: MissingCompileTimeError
-bad_named_parameters_test/02: MissingCompileTimeError
-bad_named_parameters_test/03: MissingCompileTimeError
-bad_named_parameters_test/04: Crash
-bad_named_parameters_test/04: MissingCompileTimeError
-bad_named_parameters_test/05: MissingCompileTimeError
-bad_override_test/01: MissingCompileTimeError
-bad_override_test/02: MissingCompileTimeError
-bad_override_test/06: MissingCompileTimeError
-bool_check_test: RuntimeError
-bool_condition_check_test: RuntimeError
-built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: Crash # Issue 28814
-built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
-built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
-call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
-call_function2_test: CompileTimeError # Issue 31402 (map literal)
-call_function_apply_test: CompileTimeError # Issue 31402 (Invocation arguments)
-call_function_test: CompileTimeError
-call_non_method_field_test/01: MissingCompileTimeError
-call_non_method_field_test/02: MissingCompileTimeError
-call_nonexistent_constructor_test/01: MissingCompileTimeError
-call_nonexistent_constructor_test/02: MissingCompileTimeError
-call_nonexistent_static_test/01: MissingCompileTimeError
-call_nonexistent_static_test/02: MissingCompileTimeError
-call_nonexistent_static_test/03: MissingCompileTimeError
-call_nonexistent_static_test/04: MissingCompileTimeError
-call_nonexistent_static_test/05: MissingCompileTimeError
-call_nonexistent_static_test/06: MissingCompileTimeError
-call_nonexistent_static_test/07: MissingCompileTimeError
-call_nonexistent_static_test/08: MissingCompileTimeError
-call_nonexistent_static_test/09: MissingCompileTimeError
-call_nonexistent_static_test/10: MissingCompileTimeError
-call_with_no_such_method_test: CompileTimeError # Issue 31402 (Invocation arguments)
-callable_test/none: CompileTimeError # Issue 31402 (Variable declaration)
-cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-check_member_static_test/01: MissingCompileTimeError
-check_method_override_test/01: MissingCompileTimeError
-check_method_override_test/02: MissingCompileTimeError
-checked_setter2_test: MissingCompileTimeError
-checked_setter3_test/01: MissingCompileTimeError
-checked_setter3_test/02: MissingCompileTimeError
-checked_setter3_test/03: MissingCompileTimeError
-class_cycle_test/02: MissingCompileTimeError
-class_cycle_test/03: MissingCompileTimeError
-class_keyword_test/02: MissingCompileTimeError # Issue 13627
-class_keyword_test/02: Pass
-class_literal_static_test/12: MissingCompileTimeError
-class_literal_static_test/13: MissingCompileTimeError
-class_literal_static_test/17: MissingCompileTimeError
-class_literal_static_test/18: MissingCompileTimeError
-class_literal_static_test/19: MissingCompileTimeError
-class_literal_static_test/20: MissingCompileTimeError
-class_literal_static_test/21: MissingCompileTimeError
-class_literal_static_test/22: MissingCompileTimeError
-class_literal_static_test/24: MissingCompileTimeError
-class_literal_static_test/25: MissingCompileTimeError
-class_literal_test/12: MissingCompileTimeError
-class_literal_test/13: MissingCompileTimeError
-class_literal_test/17: MissingCompileTimeError
-class_literal_test/18: MissingCompileTimeError
-class_literal_test/19: MissingCompileTimeError
-class_literal_test/20: MissingCompileTimeError
-class_literal_test/21: MissingCompileTimeError
-class_literal_test/22: MissingCompileTimeError
-class_literal_test/24: MissingCompileTimeError
-class_literal_test/25: MissingCompileTimeError
-class_override_test: MissingCompileTimeError
-closure_invoked_through_interface_target_field_test: MissingCompileTimeError
-closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
-compile_time_constant_c_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-compile_time_constant_k_test/01: MissingCompileTimeError
-compile_time_constant_k_test/02: MissingCompileTimeError
-compile_time_constant_k_test/03: MissingCompileTimeError
-compile_time_constant_o_test/01: MissingCompileTimeError
-compile_time_constant_o_test/01: RuntimeError # KernelVM bug: Constant map duplicated key.
-compile_time_constant_o_test/02: MissingCompileTimeError
-compile_time_constant_o_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
-compile_time_constant_static2_test/04: MissingCompileTimeError
-compile_time_constant_static3_test/04: MissingCompileTimeError
-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 (Field declaration)
-conditional_import_string_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-conditional_import_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-conditional_method_invocation_test/12: MissingCompileTimeError
-conditional_method_invocation_test/13: MissingCompileTimeError
-conditional_property_access_test/10: MissingCompileTimeError
-conditional_property_access_test/11: MissingCompileTimeError
-conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
-config_import_corelib_test: CompileTimeError # Issue 31533
-config_import_test: RuntimeError # KernelVM bug: Configurable imports.
-const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
-const_constructor2_test/12: CompileTimeError # Issue 31402 (Invocation arguments)
-const_constructor2_test/20: MissingCompileTimeError
-const_constructor2_test/22: MissingCompileTimeError
-const_constructor2_test/24: MissingCompileTimeError
-const_constructor_nonconst_field_test/01: MissingCompileTimeError # Fasta bug: Non-const expression in field initializer.
-const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_dynamic_type_literal_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test: SkipByDesign
-const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
-const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
-const_list_test: RuntimeError
-const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_map4_test: RuntimeError
-const_native_factory_test: MissingCompileTimeError
-const_native_factory_test/01: MissingCompileTimeError # Fasta bug: Issue 29763
-const_nested_test: RuntimeError # KernelVM bug: Constant evaluation.
-const_optional_args_test/01: MissingCompileTimeError # Fasta bug: Default parameter values must be const.
-const_redirecting_factory_test: CompileTimeError # Issue 31402 (Field declaration)
-const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_syntax_test/05: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_types_test/01: MissingCompileTimeError
-const_types_test/02: MissingCompileTimeError
-const_types_test/03: MissingCompileTimeError
-const_types_test/04: MissingCompileTimeError
-const_types_test/05: MissingCompileTimeError
-const_types_test/06: MissingCompileTimeError
-const_types_test/13: MissingCompileTimeError
-const_types_test/34: MissingCompileTimeError
-const_types_test/35: MissingCompileTimeError
-const_types_test/39: MissingCompileTimeError
-const_types_test/40: MissingCompileTimeError
-constructor12_test: RuntimeError
-constructor13_test/01: MissingCompileTimeError
-constructor13_test/02: MissingCompileTimeError
-constructor3_test: Fail, OK, Pass
-constructor_duplicate_final_test/01: MissingCompileTimeError
-constructor_duplicate_final_test/02: MissingCompileTimeError
-constructor_named_arguments_test/01: MissingCompileTimeError
-constructor_redirect1_negative_test/01: MissingCompileTimeError
-constructor_redirect1_negative_test/none: MissingCompileTimeError
-constructor_redirect2_negative_test: MissingCompileTimeError
-constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
-constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
-covariant_subtyping_test: CompileTimeError
-covariant_subtyping_test: Crash
-create_unresolved_type_test/01: MissingCompileTimeError
-ct_const2_test: Skip # Incompatible flag: --compile_all
-ct_const_test: RuntimeError
-cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
-cyclic_type2_test: Fail, OK
-cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
-cyclic_type_test/04: Fail, OK
-cyclic_type_variable_test/01: MissingCompileTimeError
-cyclic_type_variable_test/02: MissingCompileTimeError
-cyclic_type_variable_test/03: MissingCompileTimeError
-cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/10: Crash
-cyclic_typedef_test/11: Crash
-deep_nesting1_negative_test: Skip # Issue 31158
-deep_nesting2_negative_test: Skip # Issue 31158
-default_factory2_test/01: MissingCompileTimeError
-default_factory_test/01: MissingCompileTimeError
-deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_constants_test: SkipByDesign
-deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
-deferred_constraints_type_annotation_test/as_operation: Pass
-deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: Pass
-deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/is_check: Pass
-deferred_constraints_type_annotation_test/new: CompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: Pass
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: Pass
-deferred_constraints_type_annotation_test/new_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: Pass
-deferred_constraints_type_annotation_test/none: CompileTimeError
-deferred_constraints_type_annotation_test/none: Pass
-deferred_constraints_type_annotation_test/static_method: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: Pass
-deferred_constraints_type_annotation_test/type_annotation_generic1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic1: Pass
-deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic2: Pass
-deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: Pass
-deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic4: Pass
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: Pass
-deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: Pass
-deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_global_test: Fail
-deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deferred_inheritance_constraints_test/redirecting_constructor: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_library_wrong_args_test/01: CompileTimeError
-deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
-deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_redirecting_factory_test: Fail, Crash # Issue 23408
-deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_super_dependency_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deopt_inlined_function_lazy_test: Skip # Incompatible flag: --deoptimize-alot
-duplicate_export_negative_test: Fail # Issue 6134
-duplicate_implements_test/01: MissingCompileTimeError
-duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/01: MissingCompileTimeError
-dynamic_prefix_core_test/01: RuntimeError # KernelVM bug: Issue 12478, Blocked on language issue 29125.
-dynamic_prefix_core_test/none: RuntimeError
-dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
-emit_const_fields_test: CompileTimeError # Issue 31533
-empty_block_case_test: MissingCompileTimeError
-enum_mirror_test: SkipByDesign
-enum_private_test/02: MissingCompileTimeError
-example_constructor_test: Fail, OK
-export_ambiguous_main_negative_test: Skip # Issue 29895
-export_ambiguous_main_negative_test: Fail # Issue 14763
-export_double_same_main_test: Skip # Issue 29895
-export_double_same_main_test: Crash # Issue 29895
-external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/24: Pass, CompileTimeError # Started to pass after switching to batch-mode.
-extract_type_arguments_test: RuntimeError # Issue 31371
-f_bounded_quantification_test/01: MissingCompileTimeError
-f_bounded_quantification_test/02: MissingCompileTimeError
-factory2_test/03: MissingCompileTimeError
-factory2_test/none: MissingCompileTimeError
-factory3_test: Crash
-factory3_test/01: Pass
-factory3_test/none: MissingCompileTimeError
-factory4_test/00: MissingCompileTimeError
-factory5_test/00: MissingCompileTimeError
-factory6_test/00: MissingCompileTimeError
-field3_test/01: MissingCompileTimeError
-field_increment_bailout_test: SkipByDesign
-field_initialization_order_test: Fail, OK
-field_method4_test: Crash
-field_method4_test: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
-field_override_optimization_test: RuntimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
-field_type_check2_test/01: MissingRuntimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError # Issue 29900
-final_attempt_reinitialization_test/02: MissingCompileTimeError # Issue 29900
-final_for_in_variable_test: MissingCompileTimeError
-final_param_test: MissingCompileTimeError
-final_super_field_set_test: MissingCompileTimeError
-final_variable_assignment_test/01: MissingCompileTimeError
-final_variable_assignment_test/02: MissingCompileTimeError
-final_variable_assignment_test/03: MissingCompileTimeError
-final_variable_assignment_test/04: MissingCompileTimeError
-first_class_types_literals_test/03: MissingCompileTimeError
-first_class_types_literals_test/04: MissingCompileTimeError
-first_class_types_literals_test/08: MissingCompileTimeError
-first_class_types_literals_test/09: MissingCompileTimeError
-first_class_types_test: RuntimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
-for_in_side_effects_test/01: MissingCompileTimeError
-function_malformed_result_type_test/00: MissingCompileTimeError
-function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype3_test: RuntimeError
-function_subtype_bound_closure1_test: RuntimeError
-function_subtype_bound_closure2_test: RuntimeError
-function_subtype_bound_closure5_test: RuntimeError
-function_subtype_bound_closure5a_test: RuntimeError
-function_subtype_bound_closure6_test: RuntimeError
-function_subtype_bound_closure7_test: RuntimeError
-function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast0_test: RuntimeError
-function_subtype_cast2_test: RuntimeError
-function_subtype_cast3_test: RuntimeError
-function_subtype_checked0_test: RuntimeError
-function_subtype_inline2_test: RuntimeError
-function_subtype_local1_test: RuntimeError
-function_subtype_local2_test: RuntimeError
-function_subtype_local5_test: RuntimeError
-function_subtype_named1_test: Pass
-function_subtype_named1_test: RuntimeError
-function_subtype_not0_test: RuntimeError
-function_subtype_not2_test: RuntimeError
-function_subtype_not3_test: RuntimeError
-function_subtype_optional1_test: RuntimeError
-function_subtype_optional1_test: Pass
-function_subtype_setter0_test: RuntimeError
-function_subtype_simple1_test: RuntimeError
-function_subtype_top_level1_test: RuntimeError
-function_subtype_typearg5_test: RuntimeError
-function_type/function_type0_test: RuntimeError
 function_type/function_type10_test: RuntimeError
 function_type/function_type11_test: RuntimeError
-function_type/function_type12_test: RuntimeError
-function_type/function_type13_test: RuntimeError
 function_type/function_type14_test: RuntimeError
 function_type/function_type15_test: RuntimeError
-function_type/function_type16_test: RuntimeError
-function_type/function_type17_test: RuntimeError
 function_type/function_type18_test: RuntimeError
 function_type/function_type19_test: RuntimeError
-function_type/function_type1_test: RuntimeError
 function_type/function_type20_test: RuntimeError
 function_type/function_type21_test: RuntimeError
 function_type/function_type22_test: RuntimeError
@@ -1789,62 +936,354 @@
 function_type/function_type47_test: RuntimeError
 function_type/function_type48_test: RuntimeError
 function_type/function_type49_test: RuntimeError
-function_type/function_type4_test: RuntimeError
 function_type/function_type50_test: RuntimeError
 function_type/function_type51_test: RuntimeError
-function_type/function_type52_test: RuntimeError
-function_type/function_type53_test: RuntimeError
 function_type/function_type54_test: RuntimeError
 function_type/function_type55_test: RuntimeError
-function_type/function_type56_test: RuntimeError
-function_type/function_type57_test: RuntimeError
 function_type/function_type58_test: RuntimeError
 function_type/function_type59_test: RuntimeError
-function_type/function_type5_test: RuntimeError
-function_type/function_type60_test: RuntimeError
-function_type/function_type61_test: RuntimeError
 function_type/function_type62_test: RuntimeError
 function_type/function_type63_test: RuntimeError
-function_type/function_type64_test: RuntimeError
-function_type/function_type65_test: RuntimeError
 function_type/function_type66_test: RuntimeError
 function_type/function_type67_test: RuntimeError
-function_type/function_type68_test: RuntimeError
-function_type/function_type69_test: RuntimeError
 function_type/function_type6_test: RuntimeError
 function_type/function_type70_test: RuntimeError
 function_type/function_type71_test: RuntimeError
-function_type/function_type72_test: RuntimeError
-function_type/function_type73_test: RuntimeError
 function_type/function_type74_test: RuntimeError
 function_type/function_type75_test: RuntimeError
-function_type/function_type76_test: RuntimeError
-function_type/function_type77_test: RuntimeError
 function_type/function_type78_test: RuntimeError
 function_type/function_type79_test: RuntimeError
 function_type/function_type7_test: RuntimeError
-function_type/function_type80_test: RuntimeError
-function_type/function_type81_test: RuntimeError
 function_type/function_type82_test: RuntimeError
 function_type/function_type83_test: RuntimeError
-function_type/function_type84_test: RuntimeError
-function_type/function_type85_test: RuntimeError
 function_type/function_type86_test: RuntimeError
 function_type/function_type87_test: RuntimeError
-function_type/function_type88_test: RuntimeError
-function_type/function_type89_test: RuntimeError
-function_type/function_type8_test: RuntimeError
 function_type/function_type90_test: RuntimeError
 function_type/function_type91_test: RuntimeError
-function_type/function_type92_test: RuntimeError
-function_type/function_type93_test: RuntimeError
 function_type/function_type94_test: RuntimeError
 function_type/function_type95_test: RuntimeError
-function_type/function_type96_test: RuntimeError
-function_type/function_type97_test: RuntimeError
 function_type/function_type98_test: RuntimeError
 function_type/function_type99_test: RuntimeError
-function_type/function_type9_test: RuntimeError
+function_type2_test: RuntimeError
+generic_functions_test: Pass # Issue 25869
+generic_local_functions_test: Pass # Issue 25869
+generic_methods_function_type_test: Pass # Issue 25869
+generic_methods_generic_function_parameter_test: Pass # Issue 25869
+generic_methods_new_test: Pass # Issue 25869
+generic_methods_test: Pass # Issue 25869
+known_identifier_usage_error_test/none: RuntimeError # Issue 28814
+malbounded_redirecting_factory_test/03: Fail
+malbounded_redirecting_factory_test/04: Fail
+malbounded_type_test_test/03: Fail
+malbounded_type_test_test/04: Fail
+mixin_invalid_bound2_test/08: Fail
+mixin_invalid_bound2_test/09: Fail
+mixin_invalid_bound2_test/10: Fail
+mixin_invalid_bound_test/06: Fail
+mixin_invalid_bound_test/07: Fail
+redirecting_factory_infinite_steps_test/01: Fail
+redirecting_factory_malbounded_test/01: Fail
+regress_22728_test: Fail # Dartk Issue 28498
+regress_22728_test: RuntimeError
+regress_30339_test: Crash
+setter_override_test/01: MissingCompileTimeError
+setter_override_test/02: MissingCompileTimeError
+type_variable_bounds4_test/01: RuntimeError
+
+[ $compiler == dartkp && $runtime == dart_precompiled && !$checked && $strong ]
+assertion_initializer_const_error_test/01: MissingCompileTimeError
+assertion_initializer_const_function_error_test/01: MissingCompileTimeError
+bool_check_test: RuntimeError
+bool_condition_check_test: RuntimeError
+callable_test/none: RuntimeError
+checked_setter2_test: RuntimeError
+checked_setter_test: RuntimeError
+compile_time_constant_static2_test/04: MissingCompileTimeError
+compile_time_constant_static3_test/04: MissingCompileTimeError
+conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
+covariance_field_test/01: RuntimeError
+covariance_field_test/02: RuntimeError
+covariance_field_test/03: RuntimeError
+covariance_field_test/04: RuntimeError
+covariance_field_test/05: RuntimeError
+field_override_optimization_test: RuntimeError
+field_type_check2_test/01: MissingRuntimeError
+if_null_precedence_test/none: RuntimeError
+implicit_downcast_during_assignment_test: RuntimeError
+implicit_downcast_during_combiner_test: RuntimeError
+implicit_downcast_during_compound_assignment_test: RuntimeError
+implicit_downcast_during_conditional_expression_test: RuntimeError
+implicit_downcast_during_do_test: RuntimeError
+implicit_downcast_during_for_condition_test: RuntimeError
+implicit_downcast_during_for_initializer_expression_test: RuntimeError
+implicit_downcast_during_for_initializer_var_test: RuntimeError
+implicit_downcast_during_if_null_assignment_test: RuntimeError
+implicit_downcast_during_if_statement_test: RuntimeError
+implicit_downcast_during_list_literal_test: RuntimeError
+implicit_downcast_during_logical_expression_test: RuntimeError
+implicit_downcast_during_map_literal_test: RuntimeError
+implicit_downcast_during_not_test: RuntimeError
+implicit_downcast_during_return_async_test: RuntimeError
+implicit_downcast_during_return_test: RuntimeError
+implicit_downcast_during_variable_declaration_test: RuntimeError
+implicit_downcast_during_while_statement_test: RuntimeError
+implicit_downcast_during_yield_star_test: RuntimeError
+implicit_downcast_during_yield_test: RuntimeError
+regress_30339_test: RuntimeError
+type_error_test: RuntimeError # Issue 31402 (Variable declaration)
+vm/causal_async_exception_stack_test: RuntimeError
+
+# ==== dartkp + dart_precompiled status lines ====
+[ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
+abstract_factory_constructor_test/00: MissingCompileTimeError
+abstract_getter_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+abstract_syntax_test/00: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+assert_with_type_test_or_cast_test: Pass, Crash
+assertion_initializer_const_error_test/01: Pass
+assertion_initializer_test: CompileTimeError # Issue 31402 (Assert statement)
+async_await_syntax_test/c10a: MissingCompileTimeError
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d10a: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
+async_return_types_test/nestedFuture: MissingCompileTimeError
+async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
+async_return_types_test/wrongReturnType: MissingCompileTimeError
+async_star_cancel_while_paused_test: RuntimeError
+async_star_pause_test: Fail, OK
+async_star_regression_2238_test: RuntimeError
+async_star_regression_23116_test: RuntimeError
+async_star_regression_fisk_test: RuntimeError
+async_star_test/01: CompileTimeError # Issue 2238.
+async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/02: RuntimeError
+async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
+async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+await_test: CompileTimeError # Issue 31541
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: Crash
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
+bad_override_test/01: MissingCompileTimeError
+bad_override_test/02: MissingCompileTimeError
+built_in_identifier_prefix_test: CompileTimeError
+built_in_identifier_type_annotation_test/22: Crash # Issue 28814
+built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
+built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
+built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
+call_function2_test: CompileTimeError # Issue 31402 (map literal)
+call_function_apply_test: CompileTimeError # Issue 31402 (Invocation arguments)
+call_function_test: CompileTimeError
+call_non_method_field_test/01: MissingCompileTimeError
+call_non_method_field_test/02: MissingCompileTimeError
+call_with_no_such_method_test: CompileTimeError # Issue 31402 (Invocation arguments)
+callable_test/none: CompileTimeError # Issue 31402 (Variable declaration)
+cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+check_member_static_test/01: MissingCompileTimeError
+checked_setter3_test/01: MissingCompileTimeError
+checked_setter3_test/02: MissingCompileTimeError
+checked_setter3_test/03: MissingCompileTimeError
+class_cycle_test/02: MissingCompileTimeError
+class_cycle_test/03: MissingCompileTimeError
+closure_invoked_through_interface_target_field_test: MissingCompileTimeError
+closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
+compile_time_constant_c_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+compile_time_constant_k_test/01: MissingCompileTimeError
+compile_time_constant_k_test/02: MissingCompileTimeError
+compile_time_constant_k_test/03: MissingCompileTimeError
+compile_time_constant_o_test/01: MissingCompileTimeError
+compile_time_constant_o_test/01: RuntimeError # KernelVM bug: Constant map duplicated key.
+compile_time_constant_o_test/02: MissingCompileTimeError
+compile_time_constant_o_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
+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 (Field declaration)
+conditional_import_string_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+conditional_import_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+config_import_corelib_test: CompileTimeError # Issue 31533
+config_import_test: RuntimeError # KernelVM bug: Configurable imports.
+const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
+const_constructor2_test/12: CompileTimeError # Issue 31402 (Invocation arguments)
+const_constructor2_test/20: MissingCompileTimeError
+const_constructor2_test/22: MissingCompileTimeError
+const_constructor2_test/24: MissingCompileTimeError
+const_constructor_nonconst_field_test/01: MissingCompileTimeError # Fasta bug: Non-const expression in field initializer.
+const_dynamic_type_literal_test/02: MissingCompileTimeError
+const_dynamic_type_literal_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
+const_evaluation_test: SkipByDesign
+const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
+const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
+const_list_test: RuntimeError
+const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_map4_test: RuntimeError
+const_nested_test: RuntimeError # KernelVM bug: Constant evaluation.
+const_optional_args_test/01: MissingCompileTimeError # Fasta bug: Default parameter values must be const.
+const_redirecting_factory_test: CompileTimeError # Issue 31402 (Field declaration)
+const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_syntax_test/05: MissingCompileTimeError # KernelVM bug: Constant evaluation.
+const_types_test/34: MissingCompileTimeError
+const_types_test/35: MissingCompileTimeError
+const_types_test/39: MissingCompileTimeError
+const_types_test/40: MissingCompileTimeError
+constructor12_test: RuntimeError
+constructor3_test: Fail, OK, Pass
+constructor_redirect1_negative_test/01: MissingCompileTimeError
+constructor_redirect2_negative_test: MissingCompileTimeError
+constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
+constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
+covariant_subtyping_test: CompileTimeError
+covariant_subtyping_test: Crash
+ct_const2_test: Skip # Incompatible flag: --compile_all
+ct_const_test: RuntimeError
+cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
+cyclic_type2_test: Fail, OK
+cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
+cyclic_type_test/04: Fail, OK
+cyclic_type_variable_test/01: MissingCompileTimeError
+cyclic_type_variable_test/02: MissingCompileTimeError
+cyclic_type_variable_test/03: MissingCompileTimeError
+cyclic_type_variable_test/04: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
+deep_nesting1_negative_test: Skip # Issue 31158
+deep_nesting2_negative_test: Skip # Issue 31158
+default_factory2_test/01: MissingCompileTimeError
+default_factory_test/01: MissingCompileTimeError
+deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_constants_test: SkipByDesign
+deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_constraints_type_annotation_test/new: CompileTimeError
+deferred_constraints_type_annotation_test/new_generic1: CompileTimeError
+deferred_constraints_type_annotation_test/none: CompileTimeError
+deferred_constraints_type_annotation_test/static_method: CompileTimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError
+deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_global_test: Fail
+deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
+deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_redirecting_factory_test: Fail, Crash # Issue 23408
+deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_super_dependency_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deopt_inlined_function_lazy_test: Skip # Incompatible flag: --deoptimize-alot
+duplicate_export_negative_test: Fail # Issue 6134
+duplicate_implements_test/01: MissingCompileTimeError
+duplicate_implements_test/02: MissingCompileTimeError
+dynamic_prefix_core_test/none: CompileTimeError
+dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
+emit_const_fields_test: CompileTimeError # Issue 31533
+enum_mirror_test: SkipByDesign
+example_constructor_test: Fail, OK
+export_ambiguous_main_negative_test: Fail # Issue 14763
+export_ambiguous_main_negative_test: Skip # Issue 29895
+export_double_same_main_test: Crash # Issue 29895
+export_double_same_main_test: Skip # Issue 29895
+external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
+external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
+external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
+external_test/24: Pass, CompileTimeError # Started to pass after switching to batch-mode.
+extract_type_arguments_test: RuntimeError # Issue 31371
+f_bounded_quantification_test/01: MissingCompileTimeError
+f_bounded_quantification_test/02: MissingCompileTimeError
+factory2_test/03: MissingCompileTimeError
+factory3_test/01: Pass
+factory4_test/00: MissingCompileTimeError
+field3_test/01: MissingCompileTimeError
+field_increment_bailout_test: SkipByDesign
+field_initialization_order_test: Fail, OK
+field_method4_test: Crash
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
+field_override_test/00: MissingCompileTimeError
+field_override_test/01: MissingCompileTimeError
+first_class_types_test: RuntimeError
+flatten_test/05: MissingRuntimeError
+flatten_test/08: MissingRuntimeError
+flatten_test/09: MissingRuntimeError
+flatten_test/12: MissingRuntimeError
+for_in_side_effects_test/01: MissingCompileTimeError
+function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
+function_subtype3_test: RuntimeError
+function_subtype_bound_closure1_test: RuntimeError
+function_subtype_bound_closure2_test: RuntimeError
+function_subtype_bound_closure5_test: RuntimeError
+function_subtype_bound_closure5a_test: RuntimeError
+function_subtype_bound_closure6_test: RuntimeError
+function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
+function_subtype_bound_closure7_test: RuntimeError
+function_subtype_call1_test: RuntimeError
+function_subtype_call2_test: RuntimeError
+function_subtype_cast0_test: RuntimeError
+function_subtype_cast2_test: RuntimeError
+function_subtype_cast3_test: RuntimeError
+function_subtype_checked0_test: RuntimeError
+function_subtype_inline2_test: RuntimeError
+function_subtype_local1_test: RuntimeError
+function_subtype_local2_test: RuntimeError
+function_subtype_local5_test: RuntimeError
+function_subtype_not0_test: RuntimeError
+function_subtype_not2_test: RuntimeError
+function_subtype_not3_test: RuntimeError
+function_subtype_setter0_test: RuntimeError
+function_subtype_simple1_test: RuntimeError
+function_subtype_top_level1_test: RuntimeError
+function_subtype_typearg5_test: RuntimeError
 function_type2_test: RuntimeError
 function_type_alias2_test: RuntimeError
 function_type_alias3_test: RuntimeError
@@ -1855,56 +1294,32 @@
 generic_async_star_test: RuntimeError
 generic_closure_test: RuntimeError
 generic_function_bounds_test: CompileTimeError
-generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: CompileTimeError
-generic_function_dcall_test: RuntimeError
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError, OK # No type inference
-generic_function_type_as_type_argument_test/02: Pass
-generic_function_typedef2_test/04: MissingCompileTimeError
-generic_function_typedef_test/01: Pass
-generic_function_typedef_test/01: RuntimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
-generic_list_checked_test: RuntimeError
 generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
-generic_methods_bounds_test/01: Crash
+generic_list_checked_test: RuntimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
-generic_methods_optional_parameters_test: Pass
-generic_methods_optional_parameters_test: RuntimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
-generic_methods_recursive_bound_test/02: Crash
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
-generic_methods_recursive_bound_test/03: Pass
-generic_methods_recursive_bound_test/03: MissingRuntimeError
 generic_methods_recursive_bound_test/03: Crash, Pass
+generic_methods_recursive_bound_test/03: MissingRuntimeError
+generic_methods_recursive_bound_test/03: Pass
 generic_methods_reuse_type_variables_test: Pass
 generic_methods_tearoff_specialization_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_methods_tearoff_specialization_test: RuntimeError
 generic_methods_unused_parameter_test: CompileTimeError # Issue 31402 (Variable declaration)
-generic_methods_unused_parameter_test: RuntimeError
 generic_no_such_method_dispatcher_simple_test: CompileTimeError # Issue 31533
 generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
 generic_tearoff_test: CompileTimeError
-generic_tearoff_test: RuntimeError
 generic_test: RuntimeError
-getter_no_setter2_test/01: MissingCompileTimeError
-getter_no_setter2_test/03: MissingCompileTimeError
-getter_no_setter_test/01: MissingCompileTimeError
-getter_no_setter_test/03: MissingCompileTimeError
 getter_override_test/03: MissingCompileTimeError
-getters_setters2_test/*: Pass # Correctly passes.
-getters_setters2_test/01: RuntimeError
-getters_setters2_test/02: MissingCompileTimeError
-getters_setters2_test/none: RuntimeError
 hello_dart_test: Skip # Incompatible flag: --compile_all
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
-if_null_assignment_behavior_test/13: MissingCompileTimeError
-if_null_assignment_behavior_test/15: MissingCompileTimeError
-if_null_precedence_test/none: RuntimeError
 implicit_closure_test: Skip # Incompatible flag: --use_slow_path
 implicit_downcast_during_assignment_test: Pass # Correctly passes.
 implicit_downcast_during_combiner_test: Pass # Correctly passes.
@@ -1927,71 +1342,30 @@
 implicit_downcast_during_yield_star_test: Pass # Correctly passes.
 implicit_downcast_during_yield_test: Pass # Correctly passes.
 implicit_this_test/01: MissingCompileTimeError
-implicit_this_test/02: MissingCompileTimeError
 implicit_this_test/04: MissingCompileTimeError
-import_combinators2_test/00: MissingCompileTimeError
-import_self_test/01: MissingCompileTimeError
-initializing_formal_final_test: MissingCompileTimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: SkipByDesign
-instanceof4_test/01: RuntimeError
-instanceof4_test/01: Pass
-instanceof4_test/none: Pass
-instanceof4_test/none: RuntimeError
 instantiate_tearoff_after_contravariance_check_test: CompileTimeError
 instantiate_tearoff_of_call_test: CompileTimeError
 instantiate_tearoff_test: CompileTimeError
-interface_test/00: MissingCompileTimeError
 invocation_mirror2_test: SkipByDesign
 invocation_mirror_invoke_on2_test: SkipByDesign
 invocation_mirror_invoke_on_test: SkipByDesign
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
-is_malformed_type_test/95: MissingCompileTimeError
-is_malformed_type_test/97: MissingCompileTimeError
-is_malformed_type_test/99: MissingCompileTimeError
-is_not_class2_test/01: MissingCompileTimeError
-isnot_malformed_type_test/01: MissingCompileTimeError
-issue11724_test/01: MissingCompileTimeError
 issue13179_test: CompileTimeError # Issue 31402 (Parameter default value)
-issue15606_test/01: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: SkipByDesign
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: Crash
-known_identifier_prefix_error_test/09: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/10: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/11: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/12: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/13: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/14: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/15: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/16: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/17: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/18: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/19: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/20: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/21: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/22: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/23: MissingCompileTimeError # Issue 28814
-known_identifier_prefix_error_test/24: MissingCompileTimeError # Issue 28814
 language_2/least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_expansive_test/none: RuntimeError
 least_upper_bound_expansive_test/none: CompileTimeError
-library_ambiguous_test/00: MissingCompileTimeError
-library_ambiguous_test/01: MissingCompileTimeError
-library_ambiguous_test/02: MissingCompileTimeError
-library_ambiguous_test/03: MissingCompileTimeError
-library_ambiguous_test/04: MissingCompileTimeError
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
-library_env_test/has_html_support: RuntimeError, OK
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
-library_env_test/has_no_io_support: RuntimeError, OK
 list_is_test: RuntimeError
-list_literal_syntax_test/01: MissingCompileTimeError
-list_literal_syntax_test/02: MissingCompileTimeError
-list_literal_syntax_test/03: MissingCompileTimeError
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/01: MissingCompileTimeError
@@ -2015,95 +1389,28 @@
 malbounded_type_test_test/00: MissingCompileTimeError
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
-malformed2_test/01: MissingCompileTimeError
-malformed2_test/02: MissingCompileTimeError
-malformed2_test/03: MissingCompileTimeError
-malformed2_test/04: MissingCompileTimeError
-malformed2_test/05: MissingCompileTimeError
-malformed2_test/06: MissingCompileTimeError
-malformed2_test/07: MissingCompileTimeError
-malformed2_test/08: MissingCompileTimeError
-malformed2_test/09: MissingCompileTimeError
-malformed2_test/10: MissingCompileTimeError
-malformed2_test/11: MissingCompileTimeError
-malformed2_test/12: MissingCompileTimeError
-malformed2_test/13: MissingCompileTimeError
-malformed_bound_test/00: MissingCompileTimeError
-malformed_inheritance_test/01: MissingCompileTimeError
-malformed_inheritance_test/03: MissingCompileTimeError
-malformed_inheritance_test/05: MissingCompileTimeError
-malformed_test/00: MissingCompileTimeError
-malformed_test/01: MissingCompileTimeError
-malformed_test/02: MissingCompileTimeError
-malformed_test/03: MissingCompileTimeError
-malformed_test/04: MissingCompileTimeError
-malformed_test/05: MissingCompileTimeError
-malformed_test/06: MissingCompileTimeError
-malformed_test/07: MissingCompileTimeError
-malformed_test/08: MissingCompileTimeError
-malformed_test/09: MissingCompileTimeError
-malformed_test/10: MissingCompileTimeError
-malformed_test/11: MissingCompileTimeError
-malformed_test/12: MissingCompileTimeError
-malformed_test/13: MissingCompileTimeError
-malformed_test/14: MissingCompileTimeError
-malformed_test/15: MissingCompileTimeError
-malformed_test/16: MissingCompileTimeError
-malformed_test/17: MissingCompileTimeError
-malformed_test/18: MissingCompileTimeError
-malformed_test/19: MissingCompileTimeError
-malformed_test/20: MissingCompileTimeError
-malformed_test/21: MissingCompileTimeError
-malformed_test/22: MissingCompileTimeError
-malformed_test/23: MissingCompileTimeError
-malformed_test/24: MissingCompileTimeError
-malformed_type_test: MissingCompileTimeError
 many_overridden_no_such_method_test: SkipByDesign
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-map_literal3_test/04: MissingCompileTimeError
-map_literal8_test: Pass
-map_literal8_test: RuntimeError
-method_override2_test/*: MissingCompileTimeError
-method_override2_test/00: MissingCompileTimeError
-method_override2_test/01: MissingCompileTimeError
-method_override2_test/02: MissingCompileTimeError
-method_override2_test/03: MissingCompileTimeError
-method_override2_test/none: Pass
-method_override3_test/*: MissingCompileTimeError
-method_override3_test/00: MissingCompileTimeError
-method_override3_test/01: MissingCompileTimeError
-method_override3_test/02: MissingCompileTimeError
-method_override3_test/none: Pass
-method_override4_test/*: MissingCompileTimeError
 method_override4_test/01: MissingCompileTimeError
 method_override4_test/02: MissingCompileTimeError
 method_override4_test/03: MissingCompileTimeError
-method_override4_test/none: Pass
-method_override5_test/*: MissingCompileTimeError
 method_override5_test/01: MissingCompileTimeError
 method_override5_test/02: MissingCompileTimeError
 method_override5_test/03: MissingCompileTimeError
-method_override5_test/none: Pass
-method_override6_test/*: MissingCompileTimeError
 method_override6_test/01: MissingCompileTimeError
 method_override6_test/02: MissingCompileTimeError
 method_override6_test/03: MissingCompileTimeError
-method_override6_test/none: Pass
 method_override7_test/03: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError # Issue 31616
 mixin_black_listed_test/02: MissingCompileTimeError
-mixin_illegal_constructor_test/13: MissingCompileTimeError
-mixin_illegal_constructor_test/14: MissingCompileTimeError
-mixin_illegal_constructor_test/15: MissingCompileTimeError
-mixin_illegal_constructor_test/16: MissingCompileTimeError
-mixin_illegal_static_access_test/01: MissingCompileTimeError
-mixin_illegal_static_access_test/02: MissingCompileTimeError
+mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
+mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
+mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_illegal_super_use_test: Skip # Issues 24478 and 23773
 mixin_illegal_superclass_test: Skip # Issues 24478 and 23773
-mixin_illegal_syntax_test/13: MissingCompileTimeError
 mixin_invalid_bound2_test/02: MissingCompileTimeError
 mixin_invalid_bound2_test/03: MissingCompileTimeError
 mixin_invalid_bound2_test/04: MissingCompileTimeError
@@ -2146,64 +1453,28 @@
 mixin_type_parameters_errors_test/03: MissingCompileTimeError
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
-mixin_with_two_implicit_constructors_test: MissingCompileTimeError
 mock_writable_final_private_field_test: RuntimeError # Issue 30849
-multiline_strings_test: Pass
-multiline_strings_test: Fail # Issue 23020
-named_constructor_test/01: MissingRuntimeError # Fasta bug: Bad compilation of constructor reference.
 named_constructor_test/01: MissingCompileTimeError
-named_constructor_test/03: MissingCompileTimeError
-named_parameters2_test: MissingCompileTimeError
-named_parameters3_test: MissingCompileTimeError
-named_parameters4_test: MissingCompileTimeError
-named_parameters_aggregated_test/05: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 named_parameters_default_eq_test/none: RuntimeError
-named_parameters_test/01: MissingCompileTimeError
 named_parameters_test/02: MissingCompileTimeError
-named_parameters_test/03: MissingCompileTimeError
 named_parameters_test/04: MissingCompileTimeError
-named_parameters_test/05: MissingCompileTimeError
 named_parameters_test/06: MissingCompileTimeError
-named_parameters_test/07: MissingCompileTimeError
 named_parameters_test/08: MissingCompileTimeError
-named_parameters_test/09: MissingCompileTimeError
 named_parameters_test/10: MissingCompileTimeError
-nested_generic_closure_test: Crash
 nested_generic_closure_test: RuntimeError
-new_expression_type_args_test/00: MissingCompileTimeError
-new_expression_type_args_test/01: MissingCompileTimeError
-new_expression_type_args_test/02: MissingCompileTimeError
-new_prefix_test/01: MissingCompileTimeError
 no_main_test/01: Skip
-no_such_constructor_test/01: MissingCompileTimeError
 no_such_method_mock_test: RuntimeError
-no_such_method_mock_test: Pass
 no_such_method_test: SkipByDesign
-not_enough_positional_arguments_test/00: MissingCompileTimeError
-not_enough_positional_arguments_test/01: MissingCompileTimeError
-not_enough_positional_arguments_test/02: MissingCompileTimeError
-not_enough_positional_arguments_test/03: MissingCompileTimeError
-not_enough_positional_arguments_test/05: MissingCompileTimeError
-not_enough_positional_arguments_test/06: MissingCompileTimeError
-not_enough_positional_arguments_test/07: MissingCompileTimeError
 null_no_such_method_test: CompileTimeError # Issue 31533
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
 null_test/mirrors: Skip # Uses mirrors.
 null_test/none: SkipByDesign
-on_catch_malformed_type_test: MissingCompileTimeError
-optional_named_parameters_test/01: MissingCompileTimeError
-optional_named_parameters_test/02: Crash
 optional_named_parameters_test/02: MissingCompileTimeError
-optional_named_parameters_test/03: MissingCompileTimeError
-optional_named_parameters_test/04: Crash
 optional_named_parameters_test/04: MissingCompileTimeError
-optional_named_parameters_test/05: MissingCompileTimeError
 optional_named_parameters_test/06: MissingCompileTimeError
-optional_named_parameters_test/07: MissingCompileTimeError
 optional_named_parameters_test/08: MissingCompileTimeError
-optional_named_parameters_test/09: MissingCompileTimeError
 overridden_no_such_method_test: SkipByDesign
 override_field_test/02: MissingCompileTimeError
 override_field_test/03: MissingCompileTimeError
@@ -2226,38 +1497,20 @@
 override_inheritance_abstract_test/24: MissingCompileTimeError
 override_inheritance_abstract_test/25: MissingCompileTimeError
 override_inheritance_abstract_test/26: MissingCompileTimeError
-override_inheritance_abstract_test/28: MissingCompileTimeError
-override_inheritance_field_test/05: MissingCompileTimeError
-override_inheritance_field_test/07: MissingCompileTimeError
-override_inheritance_field_test/08: MissingCompileTimeError
-override_inheritance_field_test/09: MissingCompileTimeError
-override_inheritance_field_test/10: MissingCompileTimeError
-override_inheritance_field_test/11: MissingCompileTimeError
-override_inheritance_field_test/28: MissingCompileTimeError
-override_inheritance_field_test/30: MissingCompileTimeError
-override_inheritance_field_test/31: MissingCompileTimeError
-override_inheritance_field_test/32: MissingCompileTimeError
-override_inheritance_field_test/33: MissingCompileTimeError
-override_inheritance_field_test/33a: MissingCompileTimeError
-override_inheritance_field_test/34: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError # Issue 31616
+override_inheritance_field_test/06: CompileTimeError # Issue 31616
+override_inheritance_field_test/26: CompileTimeError # Issue 31616
+override_inheritance_field_test/29: CompileTimeError # Issue 31616
 override_inheritance_field_test/44: MissingCompileTimeError
 override_inheritance_field_test/47: MissingCompileTimeError
 override_inheritance_field_test/48: MissingCompileTimeError
 override_inheritance_field_test/53: MissingCompileTimeError
 override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/02: CompileTimeError # Issue 31616
-override_inheritance_method_test/04: MissingCompileTimeError
-override_inheritance_method_test/05: MissingCompileTimeError
-override_inheritance_method_test/06: MissingCompileTimeError
-override_inheritance_method_test/11: MissingCompileTimeError
-override_inheritance_method_test/12: MissingCompileTimeError
-override_inheritance_method_test/13: MissingCompileTimeError
-override_inheritance_method_test/14: MissingCompileTimeError
-override_inheritance_method_test/19: MissingCompileTimeError
-override_inheritance_method_test/20: MissingCompileTimeError
-override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/28: CompileTimeError # Issue 31616
-override_inheritance_method_test/29: CompileTimeError # Issue 31616
+override_inheritance_generic_test/02: CompileTimeError
+override_inheritance_method_test/17: CompileTimeError
+override_inheritance_method_test/18: CompileTimeError
+override_inheritance_method_test/28: CompileTimeError
+override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/06: MissingCompileTimeError
 override_inheritance_mixed_test/07: MissingCompileTimeError
 override_inheritance_mixed_test/08: MissingCompileTimeError
@@ -2272,49 +1525,27 @@
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
-part2_test/01: MissingCompileTimeError
-positional_parameters_type_test/none: Crash
-positional_parameters_type_test/none: Pass
-prefix16_test/00: MissingCompileTimeError
-prefix16_test/01: MissingCompileTimeError
-prefix22_test/00: MissingCompileTimeError
-prefix23_test/00: MissingCompileTimeError
-private_access_test/01: MissingCompileTimeError
-private_access_test/02: MissingCompileTimeError
-private_access_test/03: MissingCompileTimeError
-private_access_test/04: MissingCompileTimeError
-private_access_test/05: MissingCompileTimeError
-private_access_test/06: MissingCompileTimeError
 recursive_generic_test: RuntimeError
 recursive_mixin_test: Crash
+redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
+redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/03: MissingCompileTimeError
-redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
+redirecting_factory_long_test: RuntimeError # Fasta bug: Bad compilation of type arguments for redirecting factory.
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: SkipByDesign
 regress_13462_0_test: SkipByDesign
 regress_13462_1_test: SkipByDesign
-regress_13494_test: MissingCompileTimeError
-regress_17382_test: MissingCompileTimeError
 regress_18535_test: SkipByDesign
-regress_19413_test: MissingCompileTimeError
-regress_21793_test/01: MissingCompileTimeError
-regress_22438_test: MissingCompileTimeError
 regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-regress_22936_test: MissingCompileTimeError
 regress_22976_test/01: CompileTimeError # Issue 31402 (Variable declaration)
 regress_23089_test: Crash
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 regress_23408_test: RuntimeError
 regress_25550_test: CompileTimeError # Issue 31402 (Variable declaration)
-regress_27572_test: MissingCompileTimeError
 regress_27617_test/1: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
-regress_28217_test/01: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
-regress_28217_test/none: MissingCompileTimeError # Fasta bug: Bad constructor redirection.
 regress_28255_test: SkipByDesign
 regress_28278_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-regress_28341_test: RuntimeError
-regress_28341_test: Pass
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
 regress_29405_test: CompileTimeError # Issue 31402 (Invocation arguments)
 regress_29784_test/01: MissingCompileTimeError
@@ -2325,37 +1556,28 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError
-static_field3_test/01: MissingCompileTimeError
-static_field3_test/02: MissingCompileTimeError
-static_field3_test/03: MissingCompileTimeError
-static_field3_test/04: MissingCompileTimeError
-static_final_field2_test/01: MissingCompileTimeError
-static_getter_no_setter1_test/01: MissingCompileTimeError
-static_getter_no_setter2_test/01: MissingCompileTimeError
-static_setter_get_test/01: MissingCompileTimeError
 string_interpolate_test: CompileTimeError # Issue 31533
 string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
 string_split_test: CompileTimeError # Issue 31616
 string_supertype_checked_test: CompileTimeError # Issue 31616
 super_bound_closure_test/none: CompileTimeError # Issue 31533
 super_call4_test: CompileTimeError
-super_call4_test: RuntimeError
 super_getter_setter_test: CompileTimeError
-super_getter_setter_test: RuntimeError
-super_operator_index_test/01: MissingCompileTimeError
-super_operator_index_test/02: MissingCompileTimeError
-super_operator_index_test/03: MissingCompileTimeError
-super_operator_index_test/04: MissingCompileTimeError
-super_operator_index_test/05: MissingCompileTimeError
-super_operator_index_test/06: MissingCompileTimeError
-super_operator_index_test/07: MissingCompileTimeError
+super_no_such_method1_test: CompileTimeError
+super_no_such_method2_test: CompileTimeError
+super_no_such_method3_test: CompileTimeError
+super_no_such_method4_test: CompileTimeError
+super_no_such_method5_test: CompileTimeError
+super_operator_index5_test: CompileTimeError
+super_operator_index6_test: CompileTimeError
+super_operator_index7_test: CompileTimeError
+super_operator_index8_test: CompileTimeError
 super_test: Fail, OK
 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.
-switch_fallthru_test/01: MissingCompileTimeError
 syntax_test/00: MissingCompileTimeError
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
@@ -2363,21 +1585,7 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-top_level_getter_no_setter1_test: MissingCompileTimeError
-top_level_getter_no_setter2_test: MissingCompileTimeError
-transitive_private_library_access_test: MissingCompileTimeError
-try_catch_on_syntax_test/07: MissingCompileTimeError
-try_catch_on_syntax_test/10: MissingCompileTimeError
-try_catch_on_syntax_test/11: MissingCompileTimeError
-try_catch_syntax_test/08: MissingCompileTimeError
-type_error_test: RuntimeError # Issue 31402 (Variable declaration)
 type_literal_test: RuntimeError
-type_parameter_test/01: MissingCompileTimeError
-type_parameter_test/02: MissingCompileTimeError
-type_parameter_test/06: MissingCompileTimeError
-type_parameter_test/07: MissingCompileTimeError
-type_parameter_test/08: MissingCompileTimeError
-type_parameter_test/09: MissingCompileTimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
 type_promotion_functions_test/04: CompileTimeError # Issue 31537
@@ -2392,33 +1600,14 @@
 type_variable_bounds2_test: MissingCompileTimeError
 type_variable_bounds3_test/00: MissingCompileTimeError
 type_variable_bounds4_test/01: MissingCompileTimeError
-type_variable_bounds_test/00: MissingCompileTimeError
 type_variable_bounds_test/01: MissingCompileTimeError
 type_variable_bounds_test/02: MissingCompileTimeError
 type_variable_bounds_test/03: MissingCompileTimeError
 type_variable_bounds_test/04: MissingCompileTimeError
 type_variable_bounds_test/05: MissingCompileTimeError
 type_variable_bounds_test/06: MissingCompileTimeError
-type_variable_bounds_test/07: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
-type_variable_bounds_test/09: MissingCompileTimeError
-type_variable_bounds_test/10: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_conflict2_test/03: MissingCompileTimeError
-type_variable_conflict2_test/04: MissingCompileTimeError
-type_variable_scope2_test: MissingCompileTimeError
-type_variable_scope_test/00: MissingCompileTimeError
-type_variable_scope_test/01: MissingCompileTimeError
-type_variable_scope_test/03: MissingCompileTimeError
-type_variable_scope_test/03: Pass # Correctly passes.
-type_variable_scope_test/04: MissingCompileTimeError
-type_variable_scope_test/05: MissingCompileTimeError
-type_variable_static_context_test: MissingCompileTimeError
-unresolved_default_constructor_test/01: MissingCompileTimeError
-unresolved_in_factory_test: MissingCompileTimeError
-unresolved_top_level_method_test: MissingCompileTimeError
-unresolved_top_level_var_test: MissingCompileTimeError
-vm/canonicalization_preserves_deopt_test: CompileTimeError # Issue 31402 (Assert statement)
 vm/causal_async_exception_stack2_test: SkipByDesign
 vm/causal_async_exception_stack_test: SkipByDesign
 vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
@@ -2436,7 +1625,6 @@
 vm/regress_29145_test: Skip # Issue 29145
 vm/type_cast_vm_test: RuntimeError # Expects line and column numbers
 vm/type_vm_test: RuntimeError, Pass # Expects line and column numbers
-vm/type_vm_test: RuntimeError # Expects line and column numbers
 vm/type_vm_test/01: MissingCompileTimeError
 vm/type_vm_test/02: MissingCompileTimeError
 vm/type_vm_test/03: MissingCompileTimeError
@@ -2501,8 +1689,7 @@
 void_type_usage_test/paren_for: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
-wrong_number_type_arguments_test/*: MissingCompileTimeError
-wrong_number_type_arguments_test/none: Pass
+wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartkp && !$strong ]
 *: SkipByDesign # language_2 is only supported in strong mode.
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 117ba9f..5a95759 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -1092,6 +1092,7 @@
 implicit_downcast_during_super_method_invocation_test: RuntimeError
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
+issue31596_test: RuntimeError
 tearoff_dynamic_test: RuntimeError
 type_argument_in_super_type_test: RuntimeError
 type_check_const_function_typedef2_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 8795fa1..f967113 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -1126,6 +1126,7 @@
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
+issue31596_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 tearoff_dynamic_test: RuntimeError
diff --git a/tests/language_2/vm/canonicalization_preserves_deopt_test.dart b/tests/language_2/vm/canonicalization_preserves_deopt_test.dart
index da282a5..37d1587 100644
--- a/tests/language_2/vm/canonicalization_preserves_deopt_test.dart
+++ b/tests/language_2/vm/canonicalization_preserves_deopt_test.dart
@@ -28,13 +28,13 @@
     assert(() {
       Expect.isTrue(bar(-1 << 63));
       return true;
-    });
+    }());
     Expect.isTrue(baz(-1 << 63));
   }
   Expect.isFalse(foo(new X()));
   assert(() {
     Expect.isFalse(bar(new X()));
     return true;
-  });
+  }());
   Expect.isFalse(baz(new X()));
 }
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index c9203ed..0508dbe 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -26,6 +26,10 @@
 mirrors/variable_is_const_test/01: Crash # Please triage.
 
 [ $compiler == dartk && $runtime == vm && $checked && $strong ]
+mirrors/invocation_fuzz_test/emptyarray: Pass
+mirrors/invocation_fuzz_test/false: Pass
+mirrors/invocation_fuzz_test/none: Pass
+mirrors/invocation_fuzz_test/string: Pass
 mirrors/redirecting_factory_different_type_test/01: Crash # Issue 28424
 mirrors/redirecting_factory_different_type_test/none: Crash # Issue 28424
 mirrors/reflected_type_generics_test/02: Pass
@@ -33,7 +37,6 @@
 # ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
 async/async_await_sync_completer_test: RuntimeError
-async/future_or_only_in_async_test/00: MissingCompileTimeError
 async/future_or_strong_test: RuntimeError
 async/future_value_chain4_test: CompileTimeError # Issue 31616
 async/slow_consumer2_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -95,8 +98,8 @@
 mirrors/constructor_private_name_test: RuntimeError
 mirrors/constructors_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/dart2js_mirrors_test: CompileTimeError # Issue 31537
-mirrors/deferred_mirrors_metadata_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_metadata_test: RuntimeError
+mirrors/deferred_mirrors_metadata_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_metatarget_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_metatarget_test: RuntimeError
 mirrors/deferred_mirrors_test: Crash
@@ -146,8 +149,8 @@
 mirrors/library_enumeration_deferred_loading_test: RuntimeError
 mirrors/library_exports_hidden_test: RuntimeError, Crash
 mirrors/library_exports_hidden_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_exports_shown_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_exports_shown_test: RuntimeError
+mirrors/library_exports_shown_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_import_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/library_imports_bad_metadata_test/none: Crash
 mirrors/library_imports_deferred_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -172,8 +175,8 @@
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
-mirrors/metadata_constructed_constant_test: Crash
 mirrors/metadata_constructed_constant_test: RuntimeError
+mirrors/metadata_constructed_constant_test: Crash
 mirrors/metadata_scope_test/none: RuntimeError
 mirrors/method_mirror_location_test: RuntimeError
 mirrors/method_mirror_name_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -271,7 +274,6 @@
 isolate/illegal_msg_function_test: RuntimeError
 isolate/illegal_msg_mirror_test: RuntimeError
 isolate/isolate_current_test: RuntimeError
-isolate/isolate_import_test/01: MissingCompileTimeError
 isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
 isolate/kill_test: RuntimeError
@@ -290,7 +292,7 @@
 isolate/request_reply_test: Pass, Timeout
 isolate/stacktrace_message_test: RuntimeError
 isolate/typed_message_test: RuntimeError
-isolate/unresolved_ports_test: Pass, Timeout
+isolate/unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
 mirrors/class_mirror_type_variables_test: RuntimeError
 mirrors/closures_test: RuntimeError
 mirrors/constructors_test: RuntimeError
@@ -315,6 +317,7 @@
 mirrors/instance_members_with_override_test: RuntimeError
 mirrors/instantiate_abstract_class_test: RuntimeError
 mirrors/intercepted_class_test: RuntimeError
+mirrors/invocation_fuzz_test/smi: Crash, Pass # Crashes on opt counter builder (#31838)
 mirrors/invoke_closurization2_test: RuntimeError
 mirrors/library_declarations_test/01: RuntimeError
 mirrors/library_imports_bad_metadata_test/none: RuntimeError
@@ -365,7 +368,6 @@
 # ===== dartkp + dart_precompiled status lines =====
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 async/async_await_sync_completer_test: RuntimeError
-async/future_or_only_in_async_test/00: MissingCompileTimeError
 async/future_or_strong_test: RuntimeError
 async/future_test/01: RuntimeError
 async/future_test/none: RuntimeError
@@ -412,7 +414,6 @@
 isolate/handle_error2_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/handle_error3_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/isolate_current_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/isolate_import_test/01: MissingCompileTimeError
 isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
diff --git a/tests/standalone_2/assert_test.dart b/tests/standalone_2/assert_test.dart
deleted file mode 100644
index 17f9e31..0000000
--- a/tests/standalone_2/assert_test.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-// VMOptions=--enable_asserts
-
-// Dart test program testing assert statements.
-
-import "package:expect/expect.dart";
-
-class AssertTest {
-  static test() {
-    try {
-      assert(false);
-      Expect.fail("Assertion 'false' didn't fail.");
-    } on AssertionError catch (error) {
-      Expect.isTrue(error.toString().contains("'false'"));
-      Expect.isTrue(
-          error.stackTrace.toString().contains("assert_test.dart:13:14"));
-    }
-  }
-
-  static testClosure() {
-    try {
-      assert(() => false);
-      Expect.fail("Assertion '() => false' didn't fail.");
-    } on AssertionError catch (error) {
-      Expect.isTrue(error.toString().contains("'() => false'"));
-      Expect.isTrue(
-          error.stackTrace.toString().contains("assert_test.dart:24:14"));
-    }
-  }
-
-  static testMain() {
-    test();
-    testClosure();
-  }
-}
-
-main() {
-  AssertTest.testMain();
-}
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 678a688..198f5b6 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -30,9 +30,6 @@
 io/socket_ipv6_test: SkipByDesign
 io/socket_source_address_test: SkipByDesign
 
-[ $compiler == app_jit ]
-assert_test: RuntimeError
-
 [ $compiler == dart2analyzer ]
 deferred_transitive_import_error_test: Skip
 
@@ -92,7 +89,6 @@
 io/socket_many_connections_test: Skip # This test fails with "Too many open files" on the Mac OS buildbot. This is expected as MacOS by default runs with a very low number of allowed open files ('ulimit -n' says something like 256).
 
 [ $strong && ($compiler == dartk || $compiler == dartkp) ]
-assert_test: RuntimeError
 io/dependency_graph_test: CompileTimeError
 io/directory_test: RuntimeError
 io/file_error_test: RuntimeError
@@ -100,21 +96,24 @@
 io/file_test: RuntimeError
 io/http_auth_digest_test: RuntimeError
 io/http_auth_test: RuntimeError
+io/http_cookie_date_test: CompileTimeError
+io/http_headers_test: CompileTimeError
+io/http_parser_test: CompileTimeError
 io/http_proxy_advanced_test: CompileTimeError
 io/http_redirect_test: RuntimeError
 io/http_reuse_server_port_test: RuntimeError
 io/http_server_response_test: RuntimeError
 io/regress_10026_test: RuntimeError
+io/secure_socket_argument_test: CompileTimeError
 io/skipping_dart2js_compilations_test: CompileTimeError
 io/socket_upgrade_to_secure_test: RuntimeError
 io/test_harness_analyzer_test: CompileTimeError
 io/test_runner_test: CompileTimeError
 io/web_socket_pipe_test: RuntimeError
-io/web_socket_protocol_processor_test: RuntimeError
+io/web_socket_protocol_processor_test: CompileTimeError
 io/zlib_test: RuntimeError
 
 [ !$strong && ($compiler == dartk || $compiler == dartkp) ]
-assert_test: RuntimeError
 io/compile_all_test: Skip # Crashes
 io/http_client_connect_test: Skip # Flaky.
 io/http_content_length_test: Skip # Flaky.
@@ -142,11 +141,10 @@
 [ $arch == arm || $arch == arm64 || $runtime != vm || $mode == debug && $system == windows ]
 fragmentation_test: Skip
 
-[ $compiler == dart2js || $compiler == dartdevc ]
+[ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
 *: SkipByDesign
 
 [ $mode == product || $runtime == dart_precompiled ]
-assert_test: SkipByDesign
 no_assert_test: SkipByDesign
 
 [ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index e854872..ca96d89 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -21,7 +21,6 @@
 
 # ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
-assert_test: CompileTimeError # Issue 31402 (Assert statement)
 io/compile_all_test: Crash
 io/http_client_request_test: Pass, Timeout
 io/http_compression_test: RuntimeError
diff --git a/tools/VERSION b/tools/VERSION
index d5d15b0..0015155 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 16
+PRERELEASE 17
 PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index b55c6ef..784895d 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -116,7 +116,9 @@
     },
     {
       "builders": [
-        "vm-kernel-precomp-linux-release-x64"
+        "vm-kernel-precomp-linux-release-x64",
+        "vm-kernel-precomp-linux-release-simarm",
+        "vm-kernel-precomp-linux-release-simarm64"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel release builder."
@@ -126,21 +128,13 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime",
             "runtime_kernel",
-            "dart_bootstrap",
             "dart_precompiled_runtime"
           ]
         },
         {
           "name": "vm tests",
           "arguments": ["--compiler=dartkp", "--runtime=dart_precompiled"],
-          "exclude_tests": [
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ],
           "fileset": "vm_debug",
           "shards": 6
         },
@@ -151,12 +145,6 @@
             "--runtime=dart_precompiled",
             "--strong"
           ],
-          "tests": [
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ],
           "fileset": "vm_debug",
           "shards": 6
         }
@@ -167,16 +155,14 @@
         "vm-kernel-precomp-linux-debug-x64"
       ],
       "meta": {
-        "description": "This configuration is used by the vm kernel debug builder."
+        "description": "This configuration is used by the vm kernel precomp debug builder."
       },
       "steps": [
         {
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime",
             "runtime_kernel",
-            "dart_bootstrap",
             "dart_precompiled_runtime"
           ]
         },
@@ -187,12 +173,6 @@
             "--runtime=dart_precompiled",
             "--vm-options=--no-enable-malloc-hooks"
           ],
-          "exclude_tests": [
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ],
           "fileset": "vm_debug",
           "shards": 6
         },
@@ -204,12 +184,6 @@
             "--vm-options=--no-enable-malloc-hooks",
             "--strong"
           ],
-          "tests": [
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ],
           "fileset": "vm_debug",
           "shards": 6
         }
@@ -254,77 +228,10 @@
     {
       "builders": [
         "vm-kernel-linux-debug-simdbc64",
+        "vm-kernel-linux-debug-x64",
         "vm-kernel-linux-release-simarm",
         "vm-kernel-linux-release-simarm64",
-        "vm-kernel-linux-release-simdbc64"
-      ],
-      "meta": {
-        "description": "This configuration is used by the simarm/simdbc vm kernel builders."
-      },
-      "steps": [
-        {
-          "name": "build dart",
-          "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
-        },
-        {
-          "name": "dartk tests",
-          "arguments": ["-cdartk"]
-        },
-        {
-          "name": "dartk strong tests",
-          "arguments": [
-            "-cdartk",
-            "--strong",
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ]
-        }
-      ]
-    },
-    {
-      "builders": [
-        "vm-kernel-precomp-linux-release-simarm",
-        "vm-kernel-precomp-linux-release-simarm64"
-      ],
-      "meta": {
-        "description": "This configuration is used by the simarm vm kernel precomp release builders."
-      },
-      "steps": [
-        {
-          "name": "build dart",
-          "script": "tools/build.py",
-          "arguments": [
-            "runtime_kernel",
-            "dart_precompiled_runtime"
-          ]
-        },
-        {
-          "name": "dartk tests",
-          "arguments": [
-            "-cdartk",
-            "-rdart_precompiled"
-          ]
-        },
-        {
-          "name": "dartk strong tests",
-          "arguments": [
-            "-cdartk",
-            "-rdart_precompiled",
-            "--strong",
-            "language_2",
-            "corelib_2",
-            "lib_2",
-            "standalone_2"
-          ]
-        }
-      ]
-    },
-    {
-      "builders": [
-        "vm-kernel-linux-debug-x64",
+        "vm-kernel-linux-release-simdbc64",
         "vm-kernel-linux-release-x64",
         "vm-kernel-mac-debug-x64",
         "vm-kernel-mac-release-x64"
@@ -336,22 +243,20 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime","runtime_kernel"]
+          "arguments": ["runtime_kernel"]
         },
         {
           "name": "front-end tests",
-          "arguments": ["--runtime=vm","--compiler=none","--checked"],
+          "arguments": ["--compiler=none", "--checked"],
           "tests": ["pkg/front_end"]
         },
         {
           "name": "vm tests",
-          "arguments": ["--runtime=vm","--compiler=dartk"],
-          "exclude_tests": ["language_2","corelib_2","lib_2","standalone_2"]
+          "arguments": ["--compiler=dartk"]
         },
         {
           "name": "strong vm tests",
-          "arguments": ["--runtime=vm","--compiler=dartk","--strong"],
-          "tests": ["language_2","corelib_2","lib_2","standalone_2"]
+          "arguments": ["--compiler=dartk", "--strong"]
         }
       ]
     },
@@ -532,7 +437,7 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime","runtime_precompiled"]
+          "arguments": ["runtime", "runtime_precompiled"]
         },
         {
           "name": "vm tests",
@@ -554,7 +459,7 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--arch=arm","--os=android","runtime","runtime_precompiled"]
+          "arguments": ["--arch=arm", "--os=android", "runtime", "runtime_precompiled"]
         },
         {
           "name": "vm tests",
@@ -597,6 +502,38 @@
     },
     {
       "builders": [
+        "vm-kernel-optcounter-threshold-linux-release-x64"
+      ],
+      "meta": {
+        "description": "This is the configuration for the kernel optcounter builders, under the vm-kernel group. They run the same tests as the ordinary VM kernel builders, but add extra options to the vm."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": [
+            "runtime_kernel"
+          ]
+        },
+        {
+          "name": "vm tests",
+          "arguments": [
+            "--compiler=dartk",
+            "--vm-options=--optimization-counter-threshold=5"
+          ]
+        },
+        {
+          "name": "strong vm tests",
+          "arguments": [
+            "--compiler=dartk",
+            "--strong",
+            "--vm-options=--optimization-counter-threshold=5"
+          ]
+        }
+      ]
+    },
+    {
+      "builders": [
         "vm-reload-linux-debug-x64",
         "vm-reload-linux-release-x64",
         "vm-reload-mac-debug-simdbc64",
diff --git a/tools/copy_tree.py b/tools/copy_tree.py
index 893fcc1..a9925b4 100755
--- a/tools/copy_tree.py
+++ b/tools/copy_tree.py
@@ -65,7 +65,8 @@
   else:
     ignored_names = set()
 
-  os.makedirs(dst)
+  if not os.path.exists(dst):
+    os.makedirs(dst)
   errors = []
   for name in names:
     if name in ignored_names:
@@ -143,8 +144,6 @@
     SourcesToGN(args.gn_paths)
     return 0
 
-  if os.path.exists(args.to):
-    shutil.rmtree(args.to)
   if args.exclude_patterns == None:
     CopyTree(args.copy_from, args.to)
   else:
diff --git a/tools/create_tarball.py b/tools/create_tarball.py
index 887bc86..46ea0b9 100755
--- a/tools/create_tarball.py
+++ b/tools/create_tarball.py
@@ -40,8 +40,7 @@
 versiondir = ''
 
 # Ignore Git/SVN files, checked-in binaries, backup files, etc..
-ignoredPaths = ['tools/sdks',
-                'third_party/7zip', 'third_party/android_tools',
+ignoredPaths = ['third_party/7zip', 'third_party/android_tools',
                 'third_party/clang', 'third_party/d8',
                 'third_party/firefox_jsshell']
 ignoredDirs = ['.svn', '.git']
diff --git a/tools/gardening/bin/status_summary.dart b/tools/gardening/bin/status_summary.dart
index ad0621e..2c0bcdf 100644
--- a/tools/gardening/bin/status_summary.dart
+++ b/tools/gardening/bin/status_summary.dart
@@ -37,6 +37,8 @@
   List<Uri> statusFiles = await findStatusFiles(testDirectory);
   Directory pkgDirectory = findTestDirectory('pkg');
   statusFiles.addAll(await findStatusFiles(pkgDirectory));
+  Directory runtimeDirectory = findTestDirectory('runtime');
+  statusFiles.addAll(await findStatusFiles(runtimeDirectory));
   Map<String, List<StatusFile>> statusMap = <String, List<StatusFile>>{};
   for (Uri uri in statusFiles) {
     Map<String, StatusFile> currentMap = <String, StatusFile>{};
diff --git a/tools/gn.py b/tools/gn.py
index c9bb463..d727fbc 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -28,6 +28,8 @@
 # use instead of --platform-sdk
 DART_MAKE_PLATFORM_SDK = "DART_MAKE_PLATFORM_SDK"
 
+DART_GN_ARGS = "DART_GN_ARGS"
+
 def UseASAN():
   return DART_USE_ASAN in os.environ
 
@@ -60,6 +62,13 @@
   return DART_MAKE_PLATFORM_SDK in os.environ
 
 
+def GetGNArgs(args):
+  if args.gn_args != None:
+    return args.gn_args
+  args = os.environ.get(DART_GN_ARGS) or ""
+  return args.split()
+
+
 def GetOutDir(mode, arch, target_os):
   return utils.GetBuildRoot(HOST_OS, mode, arch, target_os)
 
@@ -484,8 +493,7 @@
         out_dir = GetOutDir(mode, arch, target_os)
         command = [gn, 'gen', out_dir, '--check']
         gn_args = ToCommandLine(ToGnArgs(args, mode, arch, target_os))
-        if args.gn_args != None:
-          gn_args += args.gn_args
+        gn_args += GetGNArgs(args)
         if args.verbose:
           print "gn gen --check in %s" % out_dir
         if args.ide:
diff --git a/tools/make_version.py b/tools/make_version.py
index f4c25d0..68d6064 100755
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -62,7 +62,7 @@
   version_cc_text = version_cc_text.replace("{{VERSION_STR}}",
                                             version_string)
   version_time = utils.GetGitTimestamp()
-  if version_time == None:
+  if ignore_svn_revision or version_time == None:
     version_time = "Unknown timestamp"
   version_cc_text = version_cc_text.replace("{{COMMIT_TIME}}",
                                             version_time)
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index aa61803..da1d9be 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -588,7 +588,7 @@
     var args = sharedOptions.toList();
 
     var sdkSummary = new Path(_configuration.buildDirectory)
-        .append("/gen/utils/dartdevc/ddc_sdk.dill")
+        .append("/gen/utils/dartdevc/kernel/ddc_sdk.dill")
         .absolute
         .toNativePath();
 
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index cd1be47..8d562ce 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -33,7 +33,7 @@
       this.hotReload,
       this.hotReloadRollback,
       this.isChecked,
-      this.isStrong,
+      bool isStrong,
       this.isHostChecked,
       this.isCsp,
       this.isMinified,
@@ -81,7 +81,11 @@
       this.fastTestsOnly,
       this.printPassingStdout})
       : _packages = packages,
-        _timeout = timeout;
+        _timeout = timeout,
+        isStrong = isStrong ||
+            // DDC always runs in strong mode.
+            compiler == Compiler.dartdevc ||
+            compiler == Compiler.dartdevk;
 
   final Architecture architecture;
   final Compiler compiler;
@@ -375,11 +379,6 @@
       print("-rflutter is applicable only for --arch=x64");
     }
 
-    if (compiler == Compiler.dartdevc && !isStrong) {
-      isValid = false;
-      print("--compiler dartdevc requires --strong");
-    }
-
     return isValid;
   }
 
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index cca9e4e..0bc7943 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -173,7 +173,7 @@
         throw 'Can not use --dart when testing Dart 2.0 configuration';
       }
 
-      dartExecutable = 'pkg/vm/tool/dart2';
+      dartExecutable = 'pkg/vm/tool/dart2$executableScriptSuffix';
     }
 
     if (dartExecutable == null) {
@@ -251,6 +251,7 @@
   }
 
   String get executableBinarySuffix => Platform.isWindows ? '.exe' : '';
+  String get executableScriptSuffix => Platform.isWindows ? '.bat' : '';
 
   /**
    * Call the callback function onTest with a [TestCase] argument for each
@@ -1239,7 +1240,6 @@
     if (options != null) args.addAll(options);
     options = optionsFromFile['dart2jsOptions'] as List<String>;
     if (options != null) args.addAll(options);
-    print('options = ${args}');
 
     return Command.compilation(Compiler.dart2js.name, outputFile,
         dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides,
diff --git a/utils/bazel/kernel_summary_worker.dart b/utils/bazel/kernel_summary_worker.dart
index 55589f9..3cfe4d6 100644
--- a/utils/bazel/kernel_summary_worker.dart
+++ b/utils/bazel/kernel_summary_worker.dart
@@ -119,7 +119,7 @@
   var multiRoots = parsedArgs['multi-root'].map(Uri.base.resolve).toList();
   if (multiRoots.isEmpty) multiRoots.add(Uri.base);
   var fileSystem = new MultiRootFileSystem(parsedArgs['multi-root-scheme'],
-      multiRoots, fe.PhysicalFileSystem.instance);
+      multiRoots, fe.StandardFileSystem.instance);
   var sources = parsedArgs['source'].map(Uri.parse).toList();
   var state = await fe.initializeCompiler(
       // TODO(sigmund): pass an old state once we can make use of it.
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 5285538..c6e913d9 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -8,7 +8,7 @@
 
 patched_sdk_dir = "$target_gen_dir/patched_sdk"
 sdk_summary = "$target_gen_dir/ddc_sdk.sum"
-sdk_dill = "$target_gen_dir/ddc_sdk.dill"
+sdk_dill = "$target_gen_dir/kernel/ddc_sdk.dill"
 
 application_snapshot("dartdevc") {
   main_dart = "../../pkg/dev_compiler/bin/dartdevc.dart"
@@ -42,7 +42,7 @@
 application_snapshot("dartdevk") {
   main_dart = "../../pkg/dev_compiler/bin/dartdevk.dart"
 
-  # TODO: Train this on real input.
+  # TODO(vsm): Train this on real input.
   training_args = [
     "--dart-sdk-summary",
     rebase_path(sdk_dill),
@@ -303,7 +303,7 @@
   ]
 
   inputs = [
-    "$target_gen_dir/ddc_sdk.dill",
+    sdk_dill,
     sdk_summary,
     "$target_gen_dir/dartdevc_files.stamp",
     "$root_gen_dir/pkg_files.stamp",
@@ -347,13 +347,13 @@
     "--analyzer-sdk",
     rebase_path(sdk_summary),
     "--kernel-sdk",
-    rebase_path("$target_gen_dir/ddc_sdk.dill"),
+    rebase_path(sdk_dill),
     "--output",
     rebase_path("$target_gen_dir"),
   ]
 }
 
-# Compiles the DDC SDK's kernel summary.
+# Compiles the DDC SDK's kernel summary and JS code.
 compiled_action("dartdevc_sdk_kernel_summary") {
   tool = "../../runtime/bin:dart"
 
@@ -366,11 +366,19 @@
   ]
 
   outputs = [
-    "$target_gen_dir/ddc_sdk.dill",
+    sdk_dill,
+    "$target_gen_dir/kernel/amd/dart_sdk.js",
+    "$target_gen_dir/kernel/amd/dart_sdk.js.map",
+    "$target_gen_dir/kernel/common/dart_sdk.js",
+    "$target_gen_dir/kernel/common/dart_sdk.js.map",
+    "$target_gen_dir/kernel/es6/dart_sdk.js",
+    "$target_gen_dir/kernel/es6/dart_sdk.js.map",
+    "$target_gen_dir/kernel/legacy/dart_sdk.js",
+    "$target_gen_dir/kernel/legacy/dart_sdk.js.map",
   ]
 
   args = [
     rebase_path("../../pkg/dev_compiler/tool/kernel_sdk.dart"),
-    rebase_path("$target_gen_dir/ddc_sdk.dill"),
+    rebase_path(sdk_dill),
   ]
 }
