diff --git a/DEPS b/DEPS
index 07dc0fc..c546b2a 100644
--- a/DEPS
+++ b/DEPS
@@ -42,7 +42,7 @@
   # Fuchsia. This revision should be kept up to date with the revision pulled
   # by the Flutter engine. If there are problems with the toolchain, contact
   # fuchsia-toolchain@.
-  "buildtools_revision": "@de2d6da936fa0be8bcb0bacd096fe124efff2854",
+  "buildtools_revision": "@446d5b1019dcbe7835236dc85261e91cf29a9239",
 
   # Scripts that make 'git cl format' work.
   "clang_format_scripts_rev": "@c09c8deeac31f05bd801995c475e7c8070f9ecda",
@@ -51,7 +51,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_tag": "@0.13.7",
-  "async_tag": "@2.0.4",
+  "async_tag": "@2.0.6",
   "barback-0.13.0_rev": "@34853",
   "barback-0.14.0_rev": "@36398",
   "barback-0.14.1_rev": "@38525",
@@ -63,7 +63,7 @@
   "charcode_tag": "@v1.1.1",
   "chrome_rev" : "@19997",
   "cli_util_tag" : "@0.1.2+1",
-  "collection_tag": "@1.14.5",
+  "collection_tag": "@5943e1681204250f33a833eb5550f270357ad6c8",
   "convert_tag": "@2.0.1",
   "crypto_tag" : "@2.0.2+1",
   "csslib_tag" : "@0.14.1",
@@ -117,7 +117,7 @@
   "protobuf_tag": "@0.7.0",
   "pub_rev": "@73ff0d3d9f80f60d41e3135ac44597d011abb4f3",
   "pub_semver_tag": "@1.3.2",
-  "quiver_tag": "@0.28.0",
+  "quiver_tag": "@5aaa3f58c48608af5b027444d561270b53f15dbf",
   "resource_rev":"@af5a5bf65511943398146cf146e466e5f0b95cb9",
   "root_certificates_rev": "@16ef64be64c7dfdff2b9f4b910726e635ccc519e",
   "shelf_static_rev": "@3558aa35a0d2f0f35868c3fd64b258e140db0122",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 0c8bbea..d1c2c40 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -341,12 +341,14 @@
   # define into the compile line.
   if (is_clang && (is_linux || is_mac)) {
     if (is_linux) {
-      toolchain_stamp_file = "//buildtools/linux64/clang.stamp"
+      toolchain_stamp_file =
+          "//buildtools/linux-x64/clang/.versions/clang.cipd_version"
     } else {
-      toolchain_stamp_file = "//buildtools/mac/clang.stamp"
+      toolchain_stamp_file =
+          "//buildtools/mac-x64/clang/.versions/clang.cipd_version"
     }
-    toolchain_version = read_file(toolchain_stamp_file, "trim string")
-    defines = [ "TOOLCHAIN_VERSION=$toolchain_version" ]
+    cipd_version = read_file(toolchain_stamp_file, "json")
+    defines = [ "TOOLCHAIN_VERSION=${cipd_version.instance_id}" ]
   }
 
   # Assign any flags set for the C compiler to asmflags so that they are sent
@@ -369,7 +371,7 @@
       "-mstack-alignment=16",
       "-mstackrealign",
     ]
- }
+  }
 }
 
 config("compiler_arm_fpu") {
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index 313deba..4692784 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -42,8 +42,7 @@
 }
 
 gcc_toolchain("clang_arm") {
-  prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
-                       root_build_dir)
+  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
diff --git a/docs/language/informal/subtyping.md b/docs/language/informal/subtyping.md
new file mode 100644
index 0000000..121a657
--- /dev/null
+++ b/docs/language/informal/subtyping.md
@@ -0,0 +1,446 @@
+# Dart 2.0 static and runtime subtyping
+
+leafp@google.com
+
+Status: Draft
+
+This is intended to define the core of the Dart 2.0 static and runtime subtyping
+relation.
+
+## Types
+
+The syntactic set of types used in this draft are a slight simplification of
+full Dart types.
+
+The meta-variables `X`, `Y`, and `Z` range over type variables.
+
+The meta-variables `T`, `S`, and `U` range over types.
+
+The meta-variable `C` ranges over classes.
+
+The meta-variable `B` ranges over types used as bounds for type variables.
+
+The set of types under consideration are as follows:
+
+- Type variables `X`
+- Promoted type variables `X & T` *Note: static only*
+- `Object`
+- `dynamic`
+- `void`
+- `Null`
+- `Function`
+- `Future<T>`
+- `FutureOr<T>`
+- Interface types `C`, `C<T0, ..., Tn>`
+- Function types
+  - `U Function<X0 extends B0, ...., Xl extends Bl>(T0 x0, ...., Tn xn, [Tn+1 xn+1, ..., Tm xm])`
+  - `U Function<X0 extends B0, ...., Xl extends Bl>(T0 x0, ...., Tn xn, {Tn+1 xn+1, ..., Tm xm})`
+
+We leave the set of interface types unspecified, but assume a class hierarchy
+which provides a mapping from interfaces types `T` to the set of direct
+super-interfaces of `T` induced by the superclass declaration, implemented
+interfaces, and mixins of the class of `T`.  Among other well-formedness
+constraints, the edges induced by this mapping must form a directed acyclic
+graph rooted at `Object`.
+
+The types `Object`, `dynamic` and `void` are all referred to as *top* types, and
+are considered equivalent as types (including when they appear as sub-components
+of other types).  They exist as distinct names only to support distinct errors
+and warnings (or absense thereof).
+
+The type `X & T` represents the result of a type promotion operation on a
+variable.  In certain circumstances (defined elsewhere) a variable `x` of type
+`X` that is tested against the type `T` (e.g. `x is T`) will have its type
+replaced with the more specific type `X & T`, indicating that while it is known
+to have type `X`, it is also known to have the more specific type `T`.  Promoted
+type variables only occur statically (never at runtime).
+
+Given the current promotion semantics the following properties are also true:
+   - If `X` has bound `B` then for any type `X & T`, `T <: B` will be true
+   - Promoted type variable types will only appear as top level types: that is,
+     they can never appear as sub-components of other types, in bounds, or as
+     part of other promoted type variables.
+
+## Notation
+
+We use `S[T0/Y0, ..., Tl/Yl]` for the result of performing a simultaneous
+capture-avoiding substitution of types `T0, ..., Tl` for the type variables `Y0,
+..., Yl` in the type `S`.
+
+## Type equality
+
+We say that a type `T0` is equal to another type `T1` (written `T0 === T1`) if
+the two types are structurally equal up to renaming of bound type variables,
+and equating all top types.
+
+TODO: make these rules explicit.
+
+## Algorithmic (Syntax Directed) Subtyping
+
+By convention the following rules are intended to be applied in top down order,
+with exactly one rule syntactically applying.  That is, rules are written in the
+form:
+
+```
+Syntactic criteria.
+  - Additional condition 1
+  - Additional or alternative condition 2
+```
+
+and it is the case that if a subtyping query matches the syntactic criteria for
+a rule (but not the syntactic criteria for any rule preceeding it), then the
+subtyping query holds iff the listed additional conditions hold.
+
+The runtime subtyping rules can be derived by eliminating all clauses dealing
+with promoted type variables.
+
+### Rules
+
+We say that a type `T0` is a subtype of a type `T1` (written `T0 <: T1`) when:
+
+- **Reflexivity**: `T0` and `T1` are the same type.
+  - *Note that this check is necessary as the base case for primitive types, and
+    type variables but not for composite types.  In particular, algorithmically
+    a structural equality check is admissible, but not required
+    here. Pragmatically, non-constant time identity checks here are
+    counter-productive*
+
+- **Right Top**: `T1` is a top type (i.e. `Object`, `dynamic`, or `void`).
+
+- **Left Bottom**: `T0` is `Null`
+
+- **Left FutureOr**: `T0` is `FutureOr<S0>`
+  - and `Future<S0> <: T1`
+  - and `S0 <: T1`
+
+- **Type Variable Reflexivity 1**: `T0` is a type variable `X0` or a
+promoted type variables `X0 & S0` and `T1` is `X0`.
+  - *Note that this rule is admissible, and can be safely elided if desired*
+
+- **Type Variable Reflexivity 2**: Promoted`T0` is a type variable `X0` or a
+promoted type variables `X0 & S0` and `T1` is `X0 & S1`
+  - and `T0 <: S1`.
+  - *Note that this rule is admissible, and can be safely elided if desired*
+
+- **Right Promoted Variable**: `T1` is a promoted type variable `X1 & S1`
+  - and `T0 <: X1`
+  - and `T0 <: S1`
+
+- **Right FutureOr**: `T1` is `FutureOr<S1>` and
+  - either `T0 <: Future<S1>`
+  - or `T0 <: S1`
+  - or `T0` is `X0` and `X0` has bound `S0` and `S0 <: T1`
+  - or `T0` is `X0 & S0` and `S0 <: T1`
+
+- **Left Promoted Variable**: `T0` is a promoted type variable `X0 & S0`
+  - and `S0 <: T1`
+
+- **Left Type Variable Bound**: `T0` is a type variable `X0` with bound `B0`
+  - and `B0 <: T1`
+
+- **Function Type/Function**: `T0` is a function type and `T1` is `Function`
+
+- **Interface Compositionality**: `T0` is an interface type `C0<S0, ..., Sn>`
+  and `T1` is `C0<U0, ..., Un>`
+  - and each `Si <: Ui`
+
+- **Super-Interface**: `T0` is an interface type with super-interfaces `S0,...Sn`
+  - and `Si <: T1` for some `i`
+
+- **Positional Function Types**: `T0` is `U0 Function<X0 extends B00, ..., Xk extends B0k>(T0 x0, ..., Tn xn, [Tn+1 xn+1, ..., Tm xm])`
+  - and `T1` is `U1 Function<Y0 extends B10, ..., Yk extends B1k>(S0 y0, ..., Sp yp, [Sp+1 yp+1, ..., Sq yq])`
+  - and `p >= n`
+  - and `m >= q`
+  - and `Si[Z0/Y0, ..., Zk/Yk] <: Ti[Z0/X0, ..., Zk/Xk]` for `i` in `0...q`
+  - and `U0[Z0/X0, ..., Zk/Xk] <: U1[Z0/Y0, ..., Zk/Yk]`
+  - and `B0i[Z0/X0, ..., Zk/Xk] === B1i[Z0/Y0, ..., Zk/Yk]` for `i` in `0...k`
+  - where the `Zi` are fresh type variables with bounds `B0i[Z0/X0, ..., Zk/Xk]`
+
+- **Named Function Types**: `T0` is `U0 Function<X0 extends B00, ..., Xk extends B0k>(T0 x0, ..., Tn xn, {Tn+1 xn+1, ..., Tm xm})`
+  - and `T1` is `U1 Function<Y0 extends B10, ..., Yk extends B1k>(S0 y0, ..., Sn yn, {Sn+1 yn+1, ..., Sq yq})`
+  - and `{yn+1, ... , yq}` subsetof `{xn+1, ... , xm}`
+  - and `Si[Z0/Y0, ..., Zk/Yk] <: Ti[Z0/X0, ..., Zk/Xk]` for `i` in `0...n`
+  - and `Si[Z0/Y0, ..., Zk/Yk] <: Tj[Z0/X0, ..., Zk/Xk]` for `i` in `n+1...q`, `yj = xi`
+  - and `U0[Z0/X0, ..., Zk/Xk] <: U1[Z0/Y0, ..., Zk/Yk]`
+  - and `B0i[Z0/X0, ..., Zk/Xk] === B1i[Z0/Y0, ..., Zk/Yk]` for `i` in `0...k`
+  - where the `Zi` are fresh type variables with bounds `B0i[Z0/X0, ..., Zk/Xk]`
+
+*Note: the requirement that `Zi` are fresh is as usual strictly a requirement
+that the choice of common variable names avoid capture.  It is valid to choose
+the `Xi` or the `Yi` for `Zi` so long as capture is avoided*
+
+## Derivation of syntax directed rules
+
+This section sketches out the derivation of the syntax directed rules from the
+interpretation of `FutureOr` and promoted type bounds as intersection types.
+
+### Non syntax directed rules
+
+The non syntax directed rules that we derive from first principles of union and
+intersection types are as follows:
+
+Left union introduction:
+ - `FutureOr<S> <: T` if `Future<S> <: T` and `S <: T`
+
+Right union introduction:
+ - `S <: FutureOr<T>` if `S <: Future<T>` or `S <: T`
+
+Left intersection introduction:
+ - `X & S <: T` if `X <: T` or `S <: T`
+
+Right intersection introduction:
+ - `S <: X & T` if `S <: X` and `S <: T`
+
+The only remaining non-syntax directed rule is the variable bounds rule:
+
+Variable bounds:
+  - `X <: T` if `X extends B` and `B <: T`
+
+All other rules are syntax directed.
+
+Note: I believe that bounds can be treated simply as uses of intersections,
+which could simplify this presentation.
+
+### Preliminaries
+
+**Lemma 1**: If there is any derivation of `FutureOr<S> <: T`, then there is a
+derivation ending in a use of left union introduction.
+
+Proof.  By induction on derivations.  Consider a derivation of `FutureOr<S> <:
+T`.
+
+If the last rule applied is:
+  - Top type rules are trivial.
+
+  - Null, Function and interface rules can't apply.
+
+  - Left union introduction rule is immediate.
+
+  - Right union introduction. Then `T` is of the form `FutureOr<T0>`, and either
+    - we have a sub-derivation of `FutureOr<S> <: Future<T0>`
+      - by induction we therefore have a derivation ending in left union
+       introduction, so by inversion we have:
+         - a derivation of `Future<S> <: Future<T0> `, and so by right union
+           introduction we have `Future<S> <: FutureOr<T0>`
+         - a derivation of `S <: Future<T0> `, and so by right union
+           introduction we have `S <: FutureOr<T0>`
+      - by left union introduction, we have `FutureOr<S> <: FutureOr<T0>`
+      - QED
+    - we have a sub-derivation of `FutureOr<S> <: T0`
+      - by induction we therefore have a derivation ending in left union
+       introduction, so by inversion we have:
+         - a derivation of `Future<S> <: T0 `, and so by right union
+           introduction we have `Future<S> <: FutureOr<T0>`
+         - a derivation of `S <: T0 `, and so by right union
+           introduction we have `S <: FutureOr<T0>`
+      - by left union introduction, we have `FutureOr<S> <: FutureOr<T0>`
+      - QED
+
+  - Right intersection introduction.  Then `T` is of the form `X & T0`, and
+     - we have sub-derivations `FutureOr<S> <: X` and `FutureOr<S> <: T0`
+     - By induction, we can get derivations of the above ending in left union
+       introduction, so by inversion we have derivations of:
+       - `Future<S> <: X`, `S <: X`, `Future<S> <: T0`, `S <: T0`
+         - so we have derivations of `S <: X`, `S <: T0`, so by right
+           intersection introduction we have
+           - `S <: X & T0`
+         - so we have derivations of `Future<S> <: X`, `Future<S> <: T0`, so by right
+           intersection introduction we have
+           - `Future<S> <: X & T0`
+     - so by left union introduction, we have a derivation of `FutureOr<S> <: X & T0`
+     - QED
+
+
+Note: The reverse is not true.  Counter-example:
+
+Given arbitrary `B <: A`, suppose we wish to show that `(X extends FutureOr<B>)
+<: FutureOr<A>`.  If we apply right union introduction first, we must show
+either:
+  - `X <: Future<A>`
+  - only variable bounds rule applies, so we must show
+    - `FutureOr<B> <: Future<A>`
+    - Only left union introduction applies, so we must show both of:
+      - `Future<B> <: Future<A>` (yes)
+      - `B <: Future<A>` (no)
+  - `X <: A`
+  - only variable bounds rule applies, so we must show that
+    - `FutureOr<B> <: A`
+    - Only left union introduction applies, so we must show both of:
+      - `Future<B> <: Future<A>` (no)
+      - `B <: Future<A>` (yes)
+
+On the other hand, the derivation via first applying the variable bounds rule is
+trivial.
+
+Note though that we can also not simply always apply the variable bounds rule
+first.  Counter-example:
+
+Given `X extends Object`, it is trivial to derive `X <: FutureOr<X>` via the
+right union introduction rule.  But applying the variable bounds rule doesn't
+work.
+
+
+**Lemma 2**: If there is any derivation of `S <: X & T`, then there is
+derivation ending in a use of right intersection introduction.
+
+Proof.  By induction on derivations.  Consider a derivation D of `S <: X & T`.
+
+If last rule applied in D is:
+  - Bottom types are trivial.
+
+  - Function and interface type rules can't apply.
+
+  - Right intersection introduction then we're done.
+
+  - Left intersection introduction. Then `S` is of the form `Y & S0`, and either
+    - we have a sub-derivation of `Y <: X & T`
+      - by induction we therefore have a derivation ending in right intersection
+       introduction, so by inversion we have:
+         - a derivation of `Y <: X `, and so by left intersection
+           introduction we have `Y & S0 <: X`
+         - a derivation of `Y <: T `, and so by left intersection
+           introduction we have `Y & S0 <: T`
+      - by right intersection introduction, we have `Y & S0 <: X & T`
+      - QED
+    - we have a sub-derivation of `S0 <: X & T`
+      - by induction we therefore have a derivation ending in right intersection
+       introduction, so by inversion we have:
+         - a derivation of `S0 <: X `, and so by left intersection
+           introduction we have `Y & S0 <: X`
+         - a derivation of `S0 <: T `, and so by left intersection
+           introduction we have `Y & S0 <: T`
+     - by right intersection introduction, we have `Y & S0 <: X & T`
+     - QED
+
+  - Left union introduction.  Then `S` is of the form `FutureOr<S0>`, and
+     - we have sub-derivations `Future<S0> <: X & T` and `S0 <: X & T`
+     - By induction, we can get derivations of the above ending in right intersection
+       introduction, so by inversion we have derivations of:
+       - `Future<S0> <: X`, `S0 <: X`, `Future<S0> <: T`, `S0 <: T`
+         - so we have derivations of `S0 <: X`, `Future<S0> <: X`, so by left
+           union introduction we have
+           - `FutureOr<S0> <: X`
+         - so we have derivations of `S0 <: T`, `Future<S0> <: T`, so by left
+           union introduction we have
+           - `FutureOr<S0> <: T`
+     - so by right intersection introduction, we have a derivation of `FutureOr<S0> <: X & T`
+     - QED
+
+
+**Conjecture 1**: `FutureOr<A> <: FutureOr<B>` is derivable iff `A <: B` is
+derivable.
+
+pf: Showing that `A <: B => FutureOr<A> <: FutureOr<B>` is easy, it's not
+immediately clear to me how to tackle the opposite direction.
+
+
+**Lemma 3**: Transitivity of subtyping is admissible.  Given derivations of `A <: B`
+and `B <: C`, there is a derivation of `A <: C`.
+
+proof sketch: The proof should go through by induction on sizes of derivations,
+cases on pairs of rules used.  For any pair of rules used, we can construct a
+new derivation of the desired result using only smaller derivations.
+
+**Observation 1**: Given `X` with bound `S`, we have the property that for all
+instances of `X & T`, `T <: S` will be true, and hence `S <: M => T <: M`.
+
+### Syntax directed rules
+
+Consider `T0 <: T1`.
+
+#### Union on the left
+By lemma 1, if `T0` is of the form `FutureOr<S0>` and there is any derivation of
+`T0 <: T1`, then there is a derivation ending with a use of left union
+introduction so we have the rule:
+
+- `T0` is `FutureOr<S0>`
+  - and `Future<S0> <: T1`
+  - and `S0 <: T1`
+
+#### Identical type variables
+
+If `T0` and `T1` are both the same unpromoted type variable, then subtyping
+holds by reflexivity.  If `T0` is a promoted type variable `X0 & S0`, and `T0`
+is `X0` then it suffices to show that `X0 <: X0` or `S0 <: X0`, and the former
+holds immediately.  This justifies the rule:
+
+- `T0` is a type variable `X0` or a promoted type variables `X0 & S0` and `T1`
+is `X0`.
+
+If `T0` is `X0` or `X0 & S0` and `T1` is `X0 & S1`, then by lemma 1 it suffices
+to show that `X0 & S0 <: X0` and `X0 & S0 <: S1`.  The first holds immediately
+by reflexivity on the type variable, so it is sufficient to check `T0 <: S1`.
+
+- `T0` is a type variable `X0` or a promoted type variables `X0 & S0` and `T1`
+is `X0 & S1`
+  - and `T0 <: S1`.
+
+*Note that neither of the previous rules are required to make the rules syntax
+directed: they are merely useful special cases of the next rule.*
+
+#### Intersection on the right
+By lemma 2, if `T1` is of the `X1 & S1` and there is any derivation of `T0 <:
+T1`, then there is a derivation ending with a use of right intersection
+introduction, hence the rule:
+
+- `T1` is a promoted type variable `X1 & S1`
+  - and `T0 <: X1`
+  - and `T0 <: S1`
+
+#### Union on the right
+Suppose `T1` is `FutureOr<S1>`. The rules above have eliminated the possibility
+that `T0` is of the form `FutureOr<S0`.  The only rules that could possibly
+apply then are right union introduction, left intersection introduction, or the
+variable bounds rules.  Combining these yields the following preliminary
+disjunctive rule:
+
+- `T1` is `FutureOr<S1>` and
+  - either `T0 <: Future<S1>`
+  - or `T0 <: S1`
+  - or `T0` is `X0` and `X0` has bound `S0` and `S0 <: T1`
+  - or `T0` is `X0 & S0` and `X0 <: T1` and `S0 <: T1`
+
+The last disjunctive clause can be further simplified to
+  - or `T0` is `X0 & S0` and `S0 <: T1`
+
+since the premise `X0 <: FutureOr<S1>` can only derived either using the
+variable bounds rule or right union introduction.  For the variable bounds rule,
+the premise `B0 <: T1` is redundant with `S0 <: T1` by observation 1.  For right
+union introduction, `X0 <: S1` is redundant with `T0 <: S1`, since if `X0 <: S1`
+is derivable, then `T0 <: S1` is derivable by left union introduction; and `X0
+<: Future<S1>` is redundant with `T0 <: Future<S1>`, since if the former is
+derivable, then the latter is also derivable by left intersection introduction.
+So we have the final rule:
+
+- `T1` is `FutureOr<S1>` and
+  - either `T0 <: Future<S1>`
+  - or `T0 <: S1`
+  - or `T0` is `X0` and `X0` has bound `S0` and `S0 <: T1`
+  - or `T0` is `X0 & S0` and `S0 <: T1`
+
+#### Intersection on the left
+Suppose `T0` is `X0 & S0`. We've eliminated the possibility that `T1` is
+`FutureOr<S1>`, the possibility that `T1` is `X1 & S1`, and the possibility that
+`T1` is any variant of `X0`.  The only remaining rule that applies is left
+intersection introduction, and so it suffices to check that `X0 <: T1` and `S0
+<: T1`.  But given the remaining possible forms for `T1`, the only rule that can
+apply to `X0 <: T1` is the variable bounds rule, which by observation 1 is
+redundant with the second premise, and so we have the rule:
+
+`T0` is a promoted type variable `X0 & S0`
+  - and `S0 <: T1`
+
+#### Type variable on the left
+Suppose `T0` is `X0`.  We've eliminated the possibility that `T1` is
+`FutureOr<S1>`, the possibility that `T1` is `X1 & S1`, and the possibility that
+`T1` is any variant of `X0`.  The only rule that applies is the variable bounds
+rule:
+
+`T0` is a type variable `X0` with bound `B0`
+  - and `B0 <: T1`
+
+This eliminates all of the non-syntax directed rules: the remainder are strictly
+syntax directed.
+
+
+## Testing
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index 2ad30a4..8ef13df 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -25,7 +25,7 @@
       name,
       Element.makeFlags(
           isPrivate: element.isPrivate,
-          isDeprecated: element.isDeprecated,
+          isDeprecated: element.hasDeprecated,
           isAbstract: _isAbstract(element),
           isConst: _isConst(element),
           isFinal: _isFinal(element),
@@ -145,17 +145,15 @@
       sb.write(', ');
     }
     if (closeOptionalString.isEmpty) {
-      engine.ParameterKind kind = parameter.parameterKind;
-      if (kind == engine.ParameterKind.NAMED) {
+      if (parameter.isNamed) {
         sb.write('{');
         closeOptionalString = '}';
-      }
-      if (kind == engine.ParameterKind.POSITIONAL) {
+      } else if (parameter.isOptionalPositional) {
         sb.write('[');
         closeOptionalString = ']';
       }
     }
-    if (parameter.isRequired) {
+    if (parameter.hasRequired) {
       sb.write('@required ');
     }
     parameter.appendToWithoutDelimiters(sb);
@@ -224,11 +222,7 @@
 // Sort @required named parameters before optional ones.
 int _preferRequiredParams(
     engine.ParameterElement e1, engine.ParameterElement e2) {
-  int rank1 = e1.isRequired
-      ? 0
-      : e1.parameterKind != engine.ParameterKind.NAMED ? -1 : 1;
-  int rank2 = e2.isRequired
-      ? 0
-      : e2.parameterKind != engine.ParameterKind.NAMED ? -1 : 1;
+  int rank1 = e1.hasRequired ? 0 : !e1.isNamed ? -1 : 1;
+  int rank2 = e2.hasRequired ? 0 : !e2.isNamed ? -1 : 1;
   return rank1 - rank2;
 }
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index cf044e0..02de8b5 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -208,8 +208,8 @@
 const String EXECUTION_RESPONSE_MAP_URI_URI = 'uri';
 const String FLUTTER_NOTIFICATION_OUTLINE = 'flutter.outline';
 const String FLUTTER_NOTIFICATION_OUTLINE_FILE = 'file';
-const String FLUTTER_NOTIFICATION_OUTLINE_INSTRUMENTATION_EDITS =
-    'instrumentationEdits';
+const String FLUTTER_NOTIFICATION_OUTLINE_INSTRUMENTED_CODE =
+    'instrumentedCode';
 const String FLUTTER_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
 const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS = 'flutter.setSubscriptions';
 const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 78949dd..07bc629 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -11734,7 +11734,7 @@
  * {
  *   "file": FilePath
  *   "outline": FlutterOutline
- *   "instrumentationEdits": List<SourceEdit>
+ *   "instrumentedCode": optional String
  * }
  *
  * Clients may not extend, implement or mix-in this class.
@@ -11744,7 +11744,7 @@
 
   FlutterOutline _outline;
 
-  List<SourceEdit> _instrumentationEdits;
+  String _instrumentedCode;
 
   /**
    * The file with which the outline is associated.
@@ -11773,27 +11773,28 @@
   }
 
   /**
-   * If the file has Flutter widgets that can be rendered, the list of edits
-   * that should be applied to the file to instrument widgets and associate
-   * them with outline nodes.
+   * If the file has Flutter widgets that can be rendered, this field has the
+   * instrumented content of the file, that allows associating widgets with
+   * corresponding outline nodes. If there are no widgets to render, this field
+   * is absent.
    */
-  List<SourceEdit> get instrumentationEdits => _instrumentationEdits;
+  String get instrumentedCode => _instrumentedCode;
 
   /**
-   * If the file has Flutter widgets that can be rendered, the list of edits
-   * that should be applied to the file to instrument widgets and associate
-   * them with outline nodes.
+   * If the file has Flutter widgets that can be rendered, this field has the
+   * instrumented content of the file, that allows associating widgets with
+   * corresponding outline nodes. If there are no widgets to render, this field
+   * is absent.
    */
-  void set instrumentationEdits(List<SourceEdit> value) {
-    assert(value != null);
-    this._instrumentationEdits = value;
+  void set instrumentedCode(String value) {
+    this._instrumentedCode = value;
   }
 
   FlutterOutlineParams(String file, FlutterOutline outline,
-      List<SourceEdit> instrumentationEdits) {
+      {String instrumentedCode}) {
     this.file = file;
     this.outline = outline;
-    this.instrumentationEdits = instrumentationEdits;
+    this.instrumentedCode = instrumentedCode;
   }
 
   factory FlutterOutlineParams.fromJson(
@@ -11815,17 +11816,13 @@
       } else {
         throw jsonDecoder.mismatch(jsonPath, "outline");
       }
-      List<SourceEdit> instrumentationEdits;
-      if (json.containsKey("instrumentationEdits")) {
-        instrumentationEdits = jsonDecoder.decodeList(
-            jsonPath + ".instrumentationEdits",
-            json["instrumentationEdits"],
-            (String jsonPath, Object json) =>
-                new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, "instrumentationEdits");
+      String instrumentedCode;
+      if (json.containsKey("instrumentedCode")) {
+        instrumentedCode = jsonDecoder.decodeString(
+            jsonPath + ".instrumentedCode", json["instrumentedCode"]);
       }
-      return new FlutterOutlineParams(file, outline, instrumentationEdits);
+      return new FlutterOutlineParams(file, outline,
+          instrumentedCode: instrumentedCode);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "flutter.outline params", json);
     }
@@ -11841,8 +11838,9 @@
     Map<String, dynamic> result = {};
     result["file"] = file;
     result["outline"] = outline.toJson();
-    result["instrumentationEdits"] =
-        instrumentationEdits.map((SourceEdit value) => value.toJson()).toList();
+    if (instrumentedCode != null) {
+      result["instrumentedCode"] = instrumentedCode;
+    }
     return result;
   }
 
@@ -11858,8 +11856,7 @@
     if (other is FlutterOutlineParams) {
       return file == other.file &&
           outline == other.outline &&
-          listEqual(instrumentationEdits, other.instrumentationEdits,
-              (SourceEdit a, SourceEdit b) => a == b);
+          instrumentedCode == other.instrumentedCode;
     }
     return false;
   }
@@ -11869,7 +11866,7 @@
     int hash = 0;
     hash = JenkinsSmiHash.combine(hash, file.hashCode);
     hash = JenkinsSmiHash.combine(hash, outline.hashCode);
-    hash = JenkinsSmiHash.combine(hash, instrumentationEdits.hashCode);
+    hash = JenkinsSmiHash.combine(hash, instrumentedCode.hashCode);
     return JenkinsSmiHash.finish(hash);
   }
 }
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index 96b07f5..271e6d2 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -54,7 +54,7 @@
         // description
         hover.elementDescription = element.toString();
         hover.elementKind = element.kind.displayName;
-        hover.isDeprecated = element.isDeprecated;
+        hover.isDeprecated = element.hasDeprecated;
         // not local element
         if (element.enclosingElement is! ExecutableElement) {
           // containing class
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index 23c0983..0f5bac1 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -377,7 +377,7 @@
    */
   static bool _isDeprecated(Declaration declaration) {
     engine.Element element = declaration.element;
-    return element != null && element.isDeprecated;
+    return element != null && element.hasDeprecated;
   }
 
   static String _safeToSource(AstNode node) =>
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 1b6b3a6..d6c3d91 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -1433,8 +1433,7 @@
         // had a chance to process the event, resource might be a Folder.  In
         // that case don't add it.
         if (resource is File) {
-          File file = resource;
-          if (_shouldFileBeAnalyzed(file)) {
+          if (_shouldFileBeAnalyzed(resource)) {
             info.analysisDriver.addFile(path);
           }
         }
@@ -1475,10 +1474,15 @@
         callbacks.applyFileRemoved(info.analysisDriver, path);
         break;
       case ChangeType.MODIFY:
-        for (AnalysisDriver driver in driverMap.values) {
-          driver.changeFile(path);
+        Resource resource = resourceProvider.getResource(path);
+        if (resource is File) {
+          if (_shouldFileBeAnalyzed(resource)) {
+            for (AnalysisDriver driver in driverMap.values) {
+              driver.changeFile(path);
+            }
+            break;
+          }
         }
-        break;
     }
     _checkForPackagespecUpdate(path, info, info.folder);
     _checkForAnalysisOptionsUpdate(path, info, type);
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
index bf407e1..f526036 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
@@ -15,7 +15,7 @@
         new FlutterOutlineComputer(file, content, lineInfo, dartUnit);
     protocol.FlutterOutline outline = computer.compute();
     // send notification
-    var params = new protocol.FlutterOutlineParams(file, outline, []);
+    var params = new protocol.FlutterOutlineParams(file, outline);
     server.sendNotification(params.toNotification());
   });
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index 0208901..e37be19 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /**
  * Determine the number of arguments.
@@ -219,7 +218,7 @@
     bool appendColon = !_isInNamedExpression(request);
     Iterable<String> namedArgs = _namedArgs(request);
     for (ParameterElement parameter in parameters) {
-      if (parameter.parameterKind == ParameterKind.NAMED) {
+      if (parameter.isNamed) {
         _addNamedParameterSuggestion(
             namedArgs, parameter, appendColon, appendComma);
       }
@@ -253,7 +252,7 @@
         completion += ',';
       }
 
-      final int relevance = parameter.isRequired
+      final int relevance = parameter.hasRequired
           ? DART_RELEVANCE_NAMED_PARAMETER_REQUIRED
           : DART_RELEVANCE_NAMED_PARAMETER;
 
@@ -280,8 +279,8 @@
     if (parameters == null || parameters.length == 0) {
       return;
     }
-    Iterable<ParameterElement> requiredParam = parameters.where(
-        (ParameterElement p) => p.parameterKind == ParameterKind.REQUIRED);
+    Iterable<ParameterElement> requiredParam =
+        parameters.where((ParameterElement p) => p.isNotOptional);
     int requiredCount = requiredParam.length;
     // TODO (jwren) _isAppendingToArgList can be split into two cases (with and
     // without preceded), then _isAppendingToArgList,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 3ae0120..0205b18 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -17,7 +17,6 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
     show Element, ElementKind;
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
@@ -468,12 +467,12 @@
     }).toList();
 
     Iterable<ParameterElement> requiredParameters = paramList
-        .where((FormalParameter param) => param.kind == ParameterKind.REQUIRED)
+        .where((FormalParameter param) => param.isRequired)
         .map((p) => p.element);
     suggestion.requiredParameterCount = requiredParameters.length;
 
     Iterable<ParameterElement> namedParameters = paramList
-        .where((FormalParameter param) => param.kind == ParameterKind.NAMED)
+        .where((FormalParameter param) => param.isNamed)
         .map((p) => p.element);
     suggestion.hasNamedParameters = namedParameters.isNotEmpty;
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index d0bc0b2..3f9c444 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -110,7 +110,7 @@
         completion,
         selectionRange.offset - offsetDelta,
         selectionRange.length,
-        element.isDeprecated,
+        element.hasDeprecated,
         false,
         displayText: displayText);
     suggestion.element = protocol.convertElement(element);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 9ebcf46..23248e4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -12,7 +12,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:path/path.dart' as path;
 
 const String DYNAMIC = 'dynamic';
@@ -38,7 +37,7 @@
   if (completion == null) {
     completion = element.displayName;
   }
-  bool isDeprecated = element.isDeprecated;
+  bool isDeprecated = element.hasDeprecated;
   CompletionSuggestion suggestion = new CompletionSuggestion(
       kind,
       isDeprecated ? DART_RELEVANCE_LOW : relevance,
@@ -70,13 +69,12 @@
       return paramType != null ? paramType.displayName : 'var';
     }).toList();
 
-    Iterable<ParameterElement> requiredParameters = element.parameters.where(
-        (ParameterElement param) =>
-            param.parameterKind == ParameterKind.REQUIRED);
+    Iterable<ParameterElement> requiredParameters = element.parameters
+        .where((ParameterElement param) => param.isNotOptional);
     suggestion.requiredParameterCount = requiredParameters.length;
 
-    Iterable<ParameterElement> namedParameters = element.parameters.where(
-        (ParameterElement param) => param.parameterKind == ParameterKind.NAMED);
+    Iterable<ParameterElement> namedParameters =
+        element.parameters.where((ParameterElement param) => param.isNamed);
     suggestion.hasNamedParameters = namedParameters.isNotEmpty;
 
     addDefaultArgDetails(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index baf199e..cfd7cf4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -55,7 +55,7 @@
   }
 
   for (ParameterElement param in namedParams) {
-    if (param.isRequired) {
+    if (param.hasRequired) {
       if (sb.isNotEmpty) {
         sb.write(', ');
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 93e8299..634df8d 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -42,7 +42,6 @@
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide AnalysisError, Element, ElementKind;
 import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
@@ -528,10 +527,10 @@
       if (targetElement is ExecutableElement) {
         List<ParameterElement> parameters = targetElement.parameters;
         int numParameters = parameters.length;
-        Iterable<ParameterElement> requiredParameters = parameters
-            .takeWhile((p) => p.parameterKind == ParameterKind.REQUIRED);
-        Iterable<ParameterElement> optionalParameters = parameters
-            .skipWhile((p) => p.parameterKind == ParameterKind.REQUIRED);
+        Iterable<ParameterElement> requiredParameters =
+            parameters.takeWhile((p) => p.isNotOptional);
+        Iterable<ParameterElement> optionalParameters =
+            parameters.skipWhile((p) => p.isNotOptional);
         // prepare the argument to add a new parameter for
         int numRequired = requiredParameters.length;
         if (numRequired >= arguments.length) {
@@ -866,7 +865,7 @@
       int numberOfPositionalParameters = 0;
       var namedParameters = <ParameterElement>[];
       for (var parameter in executable.parameters) {
-        if (parameter.parameterKind == ParameterKind.NAMED) {
+        if (parameter.isNamed) {
           namedParameters.add(parameter);
         } else {
           numberOfPositionalParameters++;
@@ -1183,7 +1182,7 @@
           bool firstParameter = true;
           for (ParameterElement parameter in superConstructor.parameters) {
             // skip non-required parameters
-            if (parameter.parameterKind != ParameterKind.REQUIRED) {
+            if (parameter.isOptional) {
               break;
             }
             // comma
@@ -1219,9 +1218,9 @@
         continue;
       }
       // prepare parameters and arguments
-      Iterable<ParameterElement> requiredParameters =
-          superConstructor.parameters.where(
-              (parameter) => parameter.parameterKind == ParameterKind.REQUIRED);
+      Iterable<ParameterElement> requiredParameters = superConstructor
+          .parameters
+          .where((parameter) => parameter.isNotOptional);
       // add proposal
       ClassMemberLocation targetLocation =
           utils.prepareNewConstructorLocation(targetClassNode);
@@ -2809,7 +2808,7 @@
     FormalParameter lastRequiredParameter;
     List<FormalParameter> parameters = constructor.parameters.parameters;
     for (FormalParameter parameter in parameters) {
-      if (parameter.kind == ParameterKind.REQUIRED) {
+      if (parameter.isRequired) {
         lastRequiredParameter = parameter;
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index caf7a35..83da06e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -18,7 +18,6 @@
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/ast_provider.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 /**
@@ -73,7 +72,7 @@
       argumentSource = utils.getNodeText(argument);
     } else {
       // report about a missing required parameter
-      if (parameter.parameterKind == ParameterKind.REQUIRED) {
+      if (parameter.isNotOptional) {
         status.addError('No argument for the parameter "${parameter.name}".',
             newLocation_fromNode(contextNode));
         return;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index 85f86e4..8a02a2b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -18,7 +18,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/ast_provider.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /**
  * A [Refactoring] for renaming [LocalElement]s.
@@ -89,7 +88,7 @@
     Element enclosing = element.enclosingElement;
     if (enclosing is MethodElement &&
         element is ParameterElement &&
-        (element as ParameterElement).parameterKind == ParameterKind.NAMED) {
+        (element as ParameterElement).isNamed) {
       // prepare hierarchy methods
       Set<ClassMemberElement> methods =
           await getHierarchyMembers(searchEngine, enclosing);
@@ -97,8 +96,7 @@
       for (ClassMemberElement method in methods) {
         if (method is MethodElement) {
           for (ParameterElement parameter in method.parameters) {
-            if (parameter.parameterKind == ParameterKind.NAMED &&
-                parameter.name == element.name) {
+            if (parameter.isNamed && parameter.name == element.name) {
               elements.add(parameter);
             }
           }
diff --git a/pkg/analysis_server/lib/src/status/ast_writer.dart b/pkg/analysis_server/lib/src/status/ast_writer.dart
index 908cb67..3532d32 100644
--- a/pkg/analysis_server/lib/src/status/ast_writer.dart
+++ b/pkg/analysis_server/lib/src/status/ast_writer.dart
@@ -75,7 +75,13 @@
       properties['static keyword'] = node.staticKeyword;
     } else if (node is FormalParameter) {
       properties['element'] = node.element;
-      properties['kind'] = node.kind;
+      if (node.isNamed) {
+        properties['kind'] = 'named';
+      } else if (node.isOptionalPositional) {
+        properties['kind'] = 'positional';
+      } else {
+        properties['kind'] = 'required';
+      }
     } else if (node is FunctionDeclaration) {
       properties['element'] = node.element;
       properties['external keyword'] = node.externalKeyword;
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index 8299ef9..e80d2ea 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -128,7 +128,13 @@
     if (element is ParameterElement) {
       properties['defaultValueCode'] = element.defaultValueCode;
       properties['isInitializingFormal'] = element.isInitializingFormal;
-      properties['parameterKind'] = element.parameterKind;
+      if (element.isNotOptional) {
+        properties['parameterKind'] = 'required';
+      } else if (element.isOptionalPositional) {
+        properties['parameterKind'] = 'positional';
+      } else if (element.isNamed) {
+        properties['parameterKind'] = 'named';
+      }
     }
     if (element is PropertyAccessorElement) {
       properties['isGetter'] = element.isGetter;
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index d63240c..b9727e8 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -2432,6 +2432,27 @@
     await new Future.delayed(new Duration(milliseconds: 1));
     expect(callbacks.watchEvents, hasLength(1));
   }
+
+  test_non_analyzable_files_not_considered() async {
+    // Set up project and get a reference to the driver.
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    Folder projectFolder = resourceProvider.newFolder(projPath);
+    var drivers = manager.getDriversInAnalysisRoot(projectFolder);
+    expect(drivers, hasLength(1));
+
+    // Add the driver to the manager so that it will receive the events.
+    manager.driverMap[projectFolder] = drivers[0];
+
+    // Ensure adding a file that shouldn't be analyzed is not picked up.
+    newFile('$projPath/test.txt');
+    await pumpEventQueue();
+    expect(drivers[0].hasFilesToAnalyze, false);
+
+    // Ensure modifying a file that shouldn't be analyzed is not picked up.
+    modifyFile('$projPath/test.txt', 'new content');
+    await pumpEventQueue();
+    expect(drivers[0].hasFilesToAnalyze, false);
+  }
 }
 
 class TestContextManagerCallbacks extends ContextManagerCallbacks {
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 33968b2..f1c05fc 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -2169,11 +2169,12 @@
    *
    *   The outline associated with the file.
    *
-   * instrumentationEdits: List<SourceEdit>
+   * instrumentedCode: String (optional)
    *
-   *   If the file has Flutter widgets that can be rendered, the list of edits
-   *   that should be applied to the file to instrument widgets and associate
-   *   them with outline nodes.
+   *   If the file has Flutter widgets that can be rendered, this field has the
+   *   instrumented content of the file, that allows associating widgets with
+   *   corresponding outline nodes. If there are no widgets to render, this
+   *   field is absent.
    */
   Stream<FlutterOutlineParams> onFlutterOutline;
 
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index aaaa3d9..6a6dc6a 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -2455,15 +2455,13 @@
  * {
  *   "file": FilePath
  *   "outline": FlutterOutline
- *   "instrumentationEdits": List<SourceEdit>
+ *   "instrumentedCode": optional String
  * }
  */
-final Matcher isFlutterOutlineParams =
-    new LazyMatcher(() => new MatchesJsonObject("flutter.outline params", {
-          "file": isFilePath,
-          "outline": isFlutterOutline,
-          "instrumentationEdits": isListOf(isSourceEdit)
-        }));
+final Matcher isFlutterOutlineParams = new LazyMatcher(() =>
+    new MatchesJsonObject("flutter.outline params",
+        {"file": isFilePath, "outline": isFlutterOutline},
+        optionalFields: {"instrumentedCode": isString}));
 
 /**
  * flutter.setSubscriptions params
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index dc4c218..645d03c 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -240,7 +240,7 @@
     engine.CompilationUnit unit = await resolveLibraryUnit(source);
     {
       engine.ClassElement engineElement = findElementInUnit(unit, '_E1');
-      expect(engineElement.isDeprecated, isTrue);
+      expect(engineElement.hasDeprecated, isTrue);
       // create notification Element
       Element element = convertElement(engineElement);
       expect(element.kind, ElementKind.ENUM);
@@ -257,7 +257,7 @@
       expect(element.parameters, isNull);
       expect(
           element.flags,
-          (engineElement.isDeprecated ? Element.FLAG_DEPRECATED : 0) |
+          (engineElement.hasDeprecated ? Element.FLAG_DEPRECATED : 0) |
               Element.FLAG_PRIVATE);
     }
     {
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 0de9134..5be66ae 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -2699,14 +2699,13 @@
           The outline associated with the file.
         </p>
       </field>
-      <field name="instrumentationEdits">
-        <list>
-          <ref>SourceEdit</ref>
-        </list>
+      <field name="instrumentedCode" optional="true">
+        <ref>String</ref>
         <p>
-          If the file has Flutter widgets that can be rendered, the list
-          of edits that should be applied to the file to instrument widgets and
-          associate them with outline nodes.
+          If the file has Flutter widgets that can be rendered, this field
+          has the instrumented content of the file, that allows associating
+          widgets with corresponding outline nodes. If there are no widgets
+          to render, this field is absent.
         </p>
       </field>
     </params>
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index e49bab4..0c5fbe9 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -3028,8 +3028,43 @@
   bool get isFinal;
 
   /**
+   * Return `true` if this parameter is a named parameter. Named parameters are
+   * always optional, even when they are annotated with the `@required`
+   * annotation.
+   */
+  bool get isNamed;
+
+  /**
+   * Return `true` if this parameter is an optional parameter. Optional
+   * parameters can either be positional or named.
+   */
+  bool get isOptional;
+
+  /**
+   * Return `true` if this parameter is both an optional and positional
+   * parameter.
+   */
+  bool get isOptionalPositional;
+
+  /**
+   * Return `true` if this parameter is a positional parameter. Positional
+   * parameters can either be required or optional.
+   */
+  bool get isPositional;
+
+  /**
+   * Return `true` if this parameter is a required parameter. Required
+   * parameters are always positional.
+   *
+   * Note: this will return `false` for a named parameter that is annotated with
+   * the `@required` annotation.
+   */
+  bool get isRequired;
+
+  /**
    * Return the kind of this parameter.
    */
+  @deprecated
   ParameterKind get kind;
 
   /**
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index c618f14..12a88e8 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -604,6 +604,49 @@
   Element get enclosingElement;
 
   /**
+   * Return `true` if this element has an annotation of the form
+   * `@alwaysThrows`.
+   */
+  bool get hasAlwaysThrows;
+
+  /**
+   * Return `true` if this element has an annotation of the form `@deprecated`
+   * or `@Deprecated('..')`.
+   */
+  bool get hasDeprecated;
+
+  /**
+   * Return `true` if this element has an annotation of the form `@factory`.
+   */
+  bool get hasFactory;
+
+  /**
+   * Return `true` if this element has an annotation of the form `@JS(..)`.
+   */
+  bool get hasJS;
+
+  /**
+   * Return `true` if this element has an annotation of the form `@override`.
+   */
+  bool get hasOverride;
+
+  /**
+   * Return `true` if this element has an annotation of the form `@protected`.
+   */
+  bool get hasProtected;
+
+  /**
+   * Return `true` if this element has an annotation of the form '@required'.
+   */
+  bool get hasRequired;
+
+  /**
+   * Return `true` if this element has an annotation of the form
+   * `@visibleForTesting`.
+   */
+  bool get hasVisibleForTesting;
+
+  /**
    * The unique integer identifier of this element.
    */
   int get id;
@@ -612,27 +655,32 @@
    * Return `true` if this element has an annotation of the form
    * '@alwaysThrows'.
    */
+  @deprecated
   bool get isAlwaysThrows;
 
   /**
    * Return `true` if this element has an annotation of the form '@deprecated'
    * or '@Deprecated('..')'.
    */
+  @deprecated
   bool get isDeprecated;
 
   /**
    * Return `true` if this element has an annotation of the form '@factory'.
    */
+  @deprecated
   bool get isFactory;
 
   /**
    * Return `true` if this element has an annotation of the form '@JS(..)'.
    */
+  @deprecated
   bool get isJS;
 
   /**
    * Return `true` if this element has an annotation of the form '@override'.
    */
+  @deprecated
   bool get isOverride;
 
   /**
@@ -644,6 +692,7 @@
   /**
    * Return `true` if this element has an annotation of the form '@protected'.
    */
+  @deprecated
   bool get isProtected;
 
   /**
@@ -655,6 +704,7 @@
   /**
    * Return `true` if this element has an annotation of the form '@required'.
    */
+  @deprecated
   bool get isRequired;
 
   /**
@@ -667,6 +717,7 @@
 
   /// Return `true` if this element has an annotation of the form
   /// '@visibleForTesting'.
+  @deprecated
   bool get isVisibleForTesting;
 
   /**
@@ -877,8 +928,10 @@
    */
   bool get isRequired;
 
-  /// Return `true` if this annotation marks the associated member as being
-  /// visible for testing.
+  /**
+   * Return `true` if this annotation marks the associated member as being
+   * visible for testing.
+   */
   bool get isVisibleForTesting;
 
   /**
@@ -1700,8 +1753,44 @@
   bool get isInitializingFormal;
 
   /**
+   * Return `true` if this parameter is a named parameter. Named parameters are
+   * always optional, even when they are annotated with the `@required`
+   * annotation.
+   */
+  bool get isNamed;
+
+  /**
+   * Return `true` if this parameter is a required parameter. Required
+   * parameters are always positional.
+   *
+   * Note: this will return `false` for a named parameter that is annotated with
+   * the `@required` annotation.
+   */
+  // TODO(brianwilkerson) Rename this to `isRequired`.
+  bool get isNotOptional;
+
+  /**
+   * Return `true` if this parameter is an optional parameter. Optional
+   * parameters can either be positional or named.
+   */
+  bool get isOptional;
+
+  /**
+   * Return `true` if this parameter is both an optional and positional
+   * parameter.
+   */
+  bool get isOptionalPositional;
+
+  /**
+   * Return `true` if this parameter is a positional parameter. Positional
+   * parameters can either be required or optional.
+   */
+  bool get isPositional;
+
+  /**
    * Return the kind of this parameter.
    */
+  @deprecated
   ParameterKind get parameterKind;
 
   /**
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 724bc66..9ef6cdf 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -76,6 +76,7 @@
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD,
   CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD,
   CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER,
+  CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
   CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION,
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 2efe773..ea45784 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -506,11 +506,17 @@
   /**
    * Return the analysis options file that should be used when analyzing code in
    * the directory with the given [path].
+   *
+   * If [forceSearch] is true, then don't return the default analysis options
+   * path. This allows cli to locate what *would* have been the analysis options
+   * file path, and super-impose the defaults over it in-place.
    */
-  File getOptionsFile(String path) {
-    String filePath = builderOptions.defaultAnalysisOptionsFilePath;
-    if (filePath != null) {
-      return resourceProvider.getFile(filePath);
+  File getOptionsFile(String path, {bool forceSearch: false}) {
+    if (!forceSearch) {
+      String filePath = builderOptions.defaultAnalysisOptionsFilePath;
+      if (filePath != null) {
+        return resourceProvider.getFile(filePath);
+      }
     }
     Folder root = resourceProvider.getFolder(path);
     for (Folder folder = root; folder != null; folder = folder.parent) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 66337bb..448de64 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/member.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 
@@ -442,7 +441,7 @@
             element.enclosingElement is ExecutableElement ||
         elementKind == ElementKind.PARAMETER &&
             element is ParameterElement &&
-            element.parameterKind != ParameterKind.NAMED ||
+            !element.isNamed ||
         false) {
       return;
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index ac98670..bc02210 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -673,6 +673,11 @@
     new DeclarationResolver(enableKernelDriver: _enableKernelDriver)
         .resolve(unit, unitElement);
 
+    if (_libraryElement.context.analysisOptions.previewDart2) {
+      unit.accept(new AstRewriteVisitor(_libraryElement, source, _typeProvider,
+          AnalysisErrorListener.NULL_LISTENER));
+    }
+
     // TODO(scheglov) remove EnumMemberBuilder class
 
     new TypeParameterBoundsResolver(
@@ -722,6 +727,11 @@
     new DeclarationResolver(enableKernelDriver: true, applyKernelTypes: true)
         .resolve(unit, unitElement);
 
+    if (_libraryElement.context.analysisOptions.previewDart2) {
+      unit.accept(new AstRewriteVisitor(_libraryElement, file.source,
+          _typeProvider, AnalysisErrorListener.NULL_LISTENER));
+    }
+
     for (var declaration in unit.declarations) {
       if (declaration is ClassDeclaration) {
         if (declaration.metadata.isNotEmpty) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 90b0d6a..6b8d5e3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -15,7 +15,6 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart' show NamespaceBuilder;
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:collection/collection.dart';
 
@@ -681,7 +680,7 @@
       AstNode parent = node.parent;
       return parent is ClassDeclaration || parent is CompilationUnit;
     }));
-    if (parameter.parameterKind == ParameterKind.NAMED) {
+    if (parameter.isNamed) {
       results.addAll(await _searchReferences(parameter));
     }
     return results;
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 0ec3a44..94fce0c 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -4784,6 +4784,27 @@
     }
     return identifier.staticElement as ParameterElement;
   }
+
+  @override
+  bool get isNamed => kind == ParameterKind.NAMED;
+
+  @override
+  bool get isOptional =>
+      kind == ParameterKind.NAMED || kind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isOptionalPositional => kind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isPositional =>
+      kind == ParameterKind.POSITIONAL || kind == ParameterKind.REQUIRED;
+
+  @override
+  bool get isRequired => kind == ParameterKind.REQUIRED;
+
+  @override
+  // Overridden to remove the 'deprecated' annotation.
+  ParameterKind get kind;
 }
 
 /**
@@ -8350,6 +8371,7 @@
     _identifier = _becomeParentOf(identifier as AstNodeImpl);
   }
 
+  @deprecated
   @override
   ParameterKind get kind {
     AstNode parent = this.parent;
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 7c95144..0fe0143 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -17,7 +17,6 @@
 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap;
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:meta/meta.dart';
 
 /**
@@ -349,6 +348,7 @@
   @override
   DefaultFormalParameter visitDefaultFormalParameter(
           DefaultFormalParameter node) =>
+      // ignore: deprecated_member_use
       astFactory.defaultFormalParameter(cloneNode(node.parameter), node.kind,
           cloneToken(node.separator), cloneNode(node.defaultValue));
 
@@ -1393,6 +1393,7 @@
   bool visitDefaultFormalParameter(DefaultFormalParameter node) {
     DefaultFormalParameter other = _other as DefaultFormalParameter;
     return isEqualNodes(node.parameter, other.parameter) &&
+        // ignore: deprecated_member_use
         node.kind == other.kind &&
         isEqualTokens(node.separator, other.separator) &&
         isEqualNodes(node.defaultValue, other.defaultValue);
@@ -5719,6 +5720,7 @@
     DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
     return _and(
         _isEqualNodes(node.parameter, toNode.parameter),
+        // ignore: deprecated_member_use
         node.kind == toNode.kind,
         _isEqualTokens(node.separator, toNode.separator),
         _isEqualNodes(node.defaultValue, toNode.defaultValue));
@@ -7443,7 +7445,7 @@
         _writer.print(", ");
       }
       if (groupEnd == null && parameter is DefaultFormalParameter) {
-        if (parameter.kind == ParameterKind.NAMED) {
+        if (parameter.isNamed) {
           groupEnd = "}";
           _writer.print('{');
         } else {
@@ -8758,7 +8760,7 @@
         sink.write(", ");
       }
       if (groupEnd == null && parameter is DefaultFormalParameter) {
-        if (parameter.kind == ParameterKind.NAMED) {
+        if (parameter.isNamed) {
           groupEnd = "}";
           sink.write('{');
         } else {
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 5f7251b..2dc985f 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -26,7 +26,6 @@
 import 'package:analyzer/src/generated/type_system.dart'
     show TypeSystem, TypeSystemImpl;
 import 'package:analyzer/src/generated/utilities_collection.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
 import 'package:analyzer/src/task/dart.dart';
 
 /**
@@ -622,7 +621,7 @@
       }
       DartObjectImpl argumentValue = null;
       AstNode errorTarget = null;
-      if (baseParameter.parameterKind == ParameterKind.NAMED) {
+      if (baseParameter.isNamed) {
         argumentValue = namedArgumentValues[baseParameter.name];
         errorTarget = namedArgumentNodes[baseParameter.name];
       } else if (i < argumentCount) {
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index d4475b7..ce9381b 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -1406,6 +1406,7 @@
     parameter.isConst = node.isConst;
     parameter.isExplicitlyCovariant = node.parameter.covariantKeyword != null;
     parameter.isFinal = node.isFinal;
+    // ignore: deprecated_member_use
     parameter.parameterKind = node.kind;
     // visible range
     _setParameterVisibleRange(node, parameter);
@@ -1433,6 +1434,7 @@
       parameter.isConst = node.isConst;
       parameter.isExplicitlyCovariant = node.covariantKeyword != null;
       parameter.isFinal = node.isFinal;
+      // ignore: deprecated_member_use
       parameter.parameterKind = node.kind;
       _currentHolder.addParameter(parameter);
       parameterName.staticElement = parameter;
@@ -1462,6 +1464,7 @@
       parameter.isConst = node.isConst;
       parameter.isExplicitlyCovariant = node.covariantKeyword != null;
       parameter.isFinal = node.isFinal;
+      // ignore: deprecated_member_use
       parameter.parameterKind = node.kind;
       _setParameterVisibleRange(node, parameter);
       _currentHolder.addParameter(parameter);
@@ -1506,6 +1509,7 @@
       parameter.isConst = node.isConst;
       parameter.isExplicitlyCovariant = node.covariantKeyword != null;
       parameter.isFinal = node.isFinal;
+      // ignore: deprecated_member_use
       parameter.parameterKind = node.kind;
       _setParameterVisibleRange(node, parameter);
       if (node.type == null) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 23397df..5f3d53b 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1159,7 +1159,7 @@
     // Otherwise only constructors that lack optional parameters are
     // accessible (see dartbug.com/19576).
     for (ParameterElement parameter in constructor.parameters) {
-      if (parameter.parameterKind != ParameterKind.REQUIRED) {
+      if (parameter.isOptional) {
         return false;
       }
     }
@@ -1253,6 +1253,7 @@
               new ParameterElementImpl(superParameter.name, -1);
           implicitParameter.isConst = superParameter.isConst;
           implicitParameter.isFinal = superParameter.isFinal;
+          // ignore: deprecated_member_use
           implicitParameter.parameterKind = superParameter.parameterKind;
           implicitParameter.isSynthetic = true;
           implicitParameter.type =
@@ -2373,7 +2374,7 @@
     }
     // no required parameters
     for (ParameterElement parameter in parameters) {
-      if (parameter.parameterKind == ParameterKind.REQUIRED) {
+      if (parameter.isNotOptional) {
         return false;
       }
     }
@@ -3172,6 +3173,18 @@
   }
 
   @override
+  bool get hasAlwaysThrows =>
+      metadata.any((ElementAnnotation annotation) => annotation.isAlwaysThrows);
+
+  @override
+  bool get hasDeprecated =>
+      metadata.any((ElementAnnotation annotation) => annotation.isDeprecated);
+
+  @override
+  bool get hasFactory =>
+      metadata.any((ElementAnnotation annotation) => annotation.isFactory);
+
+  @override
   int get hashCode {
     // TODO: We might want to re-visit this optimization in the future.
     // We cache the hash code value as this is a very frequently called method.
@@ -3181,6 +3194,26 @@
     return _cachedHashCode;
   }
 
+  @override
+  bool get hasJS =>
+      metadata.any((ElementAnnotation annotation) => annotation.isJS);
+
+  @override
+  bool get hasOverride =>
+      metadata.any((ElementAnnotation annotation) => annotation.isOverride);
+
+  @override
+  bool get hasProtected =>
+      metadata.any((ElementAnnotation annotation) => annotation.isProtected);
+
+  @override
+  bool get hasRequired =>
+      metadata.any((ElementAnnotation annotation) => annotation.isRequired);
+
+  @override
+  bool get hasVisibleForTesting => metadata
+      .any((ElementAnnotation annotation) => annotation.isVisibleForTesting);
+
   /**
    * Return an identifier that uniquely identifies this element among the
    * children of this element's parent.
@@ -4377,6 +4410,7 @@
           buffer.write(", ");
         }
         ParameterElement parameter = parameters[i];
+        // ignore: deprecated_member_use
         ParameterKind parameterKind = parameter.parameterKind;
         if (parameterKind != kind) {
           if (closing != null) {
@@ -7470,6 +7504,30 @@
   Element get enclosingElement => null;
 
   @override
+  bool get hasAlwaysThrows => false;
+
+  @override
+  bool get hasDeprecated => false;
+
+  @override
+  bool get hasFactory => false;
+
+  @override
+  bool get hasJS => false;
+
+  @override
+  bool get hasOverride => false;
+
+  @override
+  bool get hasProtected => false;
+
+  @override
+  bool get hasRequired => false;
+
+  @override
+  bool get hasVisibleForTesting => false;
+
+  @override
   bool get isAlwaysThrows => false;
 
   @override
@@ -8550,6 +8608,29 @@
  */
 abstract class ParameterElementMixin implements ParameterElement {
   @override
+  bool get isNamed => parameterKind == ParameterKind.NAMED;
+
+  @override
+  bool get isNotOptional => parameterKind == ParameterKind.REQUIRED;
+
+  @override
+  bool get isOptional =>
+      parameterKind == ParameterKind.NAMED ||
+      parameterKind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isOptionalPositional => parameterKind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isPositional =>
+      parameterKind == ParameterKind.POSITIONAL ||
+      parameterKind == ParameterKind.REQUIRED;
+
+  @override
+  // Overridden to remove the 'deprecated' annotation.
+  ParameterKind get parameterKind;
+
+  @override
   void appendToWithoutDelimiters(StringBuffer buffer) {
     buffer.write(type);
     buffer.write(" ");
diff --git a/pkg/analyzer/lib/src/dart/element/handle.dart b/pkg/analyzer/lib/src/dart/element/handle.dart
index 062b10f..a5f7cbe 100644
--- a/pkg/analyzer/lib/src/dart/element/handle.dart
+++ b/pkg/analyzer/lib/src/dart/element/handle.dart
@@ -44,12 +44,18 @@
   List<FieldElement> get fields => actualElement.fields;
 
   @override
+  bool get hasJS => actualElement.hasJS;
+
+  @override
   bool get hasNonFinalField => actualElement.hasNonFinalField;
 
   @override
   bool get hasReferenceToSuper => actualElement.hasReferenceToSuper;
 
   @override
+  bool get hasRequired => actualElement.hasRequired;
+
+  @override
   bool get hasStaticMember => actualElement.hasStaticMember;
 
   @override
@@ -62,7 +68,7 @@
   bool get isEnum => actualElement.isEnum;
 
   @override
-  bool get isJS => actualElement.isJS;
+  bool get isJS => actualElement.hasJS;
 
   @override
   bool get isMixinApplication => actualElement.isMixinApplication;
@@ -74,7 +80,7 @@
   bool get isProxy => actualElement.isProxy;
 
   @override
-  bool get isRequired => actualElement.isRequired;
+  bool get isRequired => actualElement.hasRequired;
 
   @override
   bool get isValidMixin => actualElement.isValidMixin;
@@ -345,40 +351,64 @@
   Element get enclosingElement => actualElement.enclosingElement;
 
   @override
+  bool get hasAlwaysThrows => actualElement.hasAlwaysThrows;
+
+  @override
+  bool get hasDeprecated => actualElement.hasDeprecated;
+
+  @override
+  bool get hasFactory => actualElement.hasFactory;
+
+  @override
   int get hashCode => _location.hashCode;
 
   @override
-  bool get isAlwaysThrows => actualElement.isAlwaysThrows;
+  bool get hasJS => actualElement.hasJS;
 
   @override
-  bool get isDeprecated => actualElement.isDeprecated;
+  bool get hasOverride => actualElement.hasOverride;
 
   @override
-  bool get isFactory => actualElement.isFactory;
+  bool get hasProtected => actualElement.hasProtected;
 
   @override
-  bool get isJS => actualElement.isJS;
+  bool get hasRequired => actualElement.hasRequired;
 
   @override
-  bool get isOverride => actualElement.isOverride;
+  bool get hasVisibleForTesting => actualElement.hasVisibleForTesting;
+
+  @override
+  bool get isAlwaysThrows => actualElement.hasAlwaysThrows;
+
+  @override
+  bool get isDeprecated => actualElement.hasDeprecated;
+
+  @override
+  bool get isFactory => actualElement.hasFactory;
+
+  @override
+  bool get isJS => actualElement.hasJS;
+
+  @override
+  bool get isOverride => actualElement.hasOverride;
 
   @override
   bool get isPrivate => actualElement.isPrivate;
 
   @override
-  bool get isProtected => actualElement.isProtected;
+  bool get isProtected => actualElement.hasProtected;
 
   @override
   bool get isPublic => actualElement.isPublic;
 
   @override
-  bool get isRequired => actualElement.isRequired;
+  bool get isRequired => actualElement.hasRequired;
 
   @override
   bool get isSynthetic => actualElement.isSynthetic;
 
   @override
-  bool get isVisibleForTesting => actualElement.isVisibleForTesting;
+  bool get isVisibleForTesting => actualElement.hasVisibleForTesting;
 
   @override
   LibraryElement get library =>
@@ -944,6 +974,7 @@
   @override
   ElementKind get kind => ElementKind.PARAMETER;
 
+  @deprecated
   @override
   ParameterKind get parameterKind => actualElement.parameterKind;
 
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index ac66f59..026a7ef 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -391,40 +391,64 @@
   String get documentationComment => _baseElement.documentationComment;
 
   @override
+  bool get hasAlwaysThrows => _baseElement.hasAlwaysThrows;
+
+  @override
+  bool get hasDeprecated => _baseElement.hasDeprecated;
+
+  @override
+  bool get hasFactory => _baseElement.hasFactory;
+
+  @override
+  bool get hasJS => _baseElement.hasJS;
+
+  @override
+  bool get hasOverride => _baseElement.hasOverride;
+
+  @override
+  bool get hasProtected => _baseElement.hasProtected;
+
+  @override
+  bool get hasRequired => _baseElement.hasRequired;
+
+  @override
+  bool get hasVisibleForTesting => _baseElement.hasVisibleForTesting;
+
+  @override
   int get id => _baseElement.id;
 
   @override
-  bool get isAlwaysThrows => _baseElement.isAlwaysThrows;
+  bool get isAlwaysThrows => _baseElement.hasAlwaysThrows;
 
   @override
-  bool get isDeprecated => _baseElement.isDeprecated;
+  bool get isDeprecated => _baseElement.hasDeprecated;
 
   @override
-  bool get isFactory => _baseElement.isFactory;
+  bool get isFactory => _baseElement.hasFactory;
 
   @override
-  bool get isJS => _baseElement.isJS;
+  bool get isJS => _baseElement.hasJS;
 
   @override
-  bool get isOverride => _baseElement.isOverride;
+  bool get isOverride => _baseElement.hasOverride;
 
   @override
   bool get isPrivate => _baseElement.isPrivate;
 
   @override
-  bool get isProtected => _baseElement.isProtected;
+  bool get isProtected => _baseElement.hasProtected;
 
   @override
   bool get isPublic => _baseElement.isPublic;
 
   @override
-  bool get isRequired => _baseElement.isRequired;
+  bool get isRequired => _baseElement.hasRequired;
 
   @override
   bool get isSynthetic => _baseElement.isSynthetic;
 
   @override
-  bool get isVisibleForTesting => _baseElement.isVisibleForTesting;
+  bool get isVisibleForTesting => _baseElement.hasVisibleForTesting;
 
   @override
   ElementKind get kind => _baseElement.kind;
@@ -578,6 +602,7 @@
         buffer.write(", ");
       }
       ParameterElement parameter = parameters[i];
+      // ignore: deprecated_member_use
       ParameterKind parameterKind = parameter.parameterKind;
       if (parameterKind != kind) {
         if (closing != null) {
@@ -661,6 +686,7 @@
   @override
   bool get isInitializingFormal => baseElement.isInitializingFormal;
 
+  @deprecated
   @override
   ParameterKind get parameterKind => baseElement.parameterKind;
 
@@ -707,13 +733,13 @@
     String left = "";
     String right = "";
     while (true) {
-      if (baseElement.parameterKind == ParameterKind.NAMED) {
+      if (baseElement.isNamed) {
         left = "{";
         right = "}";
-      } else if (baseElement.parameterKind == ParameterKind.POSITIONAL) {
+      } else if (baseElement.isOptionalPositional) {
         left = "[";
         right = "]";
-      } else if (baseElement.parameterKind == ParameterKind.REQUIRED) {}
+      }
       break;
     }
     return '$left$type ${baseElement.displayName}$right';
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 62345fc..2fe2d25 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -611,7 +611,7 @@
   @override
   List<String> get normalParameterNames {
     return baseParameters
-        .where((parameter) => parameter.parameterKind == ParameterKind.REQUIRED)
+        .where((parameter) => parameter.isNotOptional)
         .map((parameter) => parameter.name)
         .toList();
   }
@@ -628,8 +628,7 @@
   @override
   List<String> get optionalParameterNames {
     return baseParameters
-        .where(
-            (parameter) => parameter.parameterKind == ParameterKind.POSITIONAL)
+        .where((parameter) => parameter.isOptionalPositional)
         .map((parameter) => parameter.name)
         .toList();
   }
@@ -774,35 +773,6 @@
   }
 
   @override
-  bool isEquivalentTo(DartType other) {
-    if (other is FunctionTypeImpl) {
-      if (typeFormals.length != other.typeFormals.length) {
-        return false;
-      }
-      // `<T>T -> T` should be equal to `<U>U -> U`
-      // To test this, we instantiate both types with the same (unique) type
-      // variables, and see if the result is equal.
-      if (typeFormals.isNotEmpty) {
-        List<DartType> freshVariables =
-            relateTypeFormals(this, other, (t, s, _, __) => t == s);
-        if (freshVariables == null) {
-          return false;
-        }
-        return instantiate(freshVariables)
-            .isEquivalentTo(other.instantiate(freshVariables));
-      }
-
-      return returnType.isEquivalentTo(other.returnType) &&
-          TypeImpl.equivalentArrays(
-              normalParameterTypes, other.normalParameterTypes) &&
-          TypeImpl.equivalentArrays(
-              optionalParameterTypes, other.optionalParameterTypes) &&
-          _equivalent(namedParameterTypes, other.namedParameterTypes);
-    }
-    return false;
-  }
-
-  @override
   bool operator ==(Object object) {
     if (object is FunctionTypeImpl) {
       if (typeFormals.length != object.typeFormals.length) {
@@ -983,6 +953,35 @@
   }
 
   @override
+  bool isEquivalentTo(DartType other) {
+    if (other is FunctionTypeImpl) {
+      if (typeFormals.length != other.typeFormals.length) {
+        return false;
+      }
+      // `<T>T -> T` should be equal to `<U>U -> U`
+      // To test this, we instantiate both types with the same (unique) type
+      // variables, and see if the result is equal.
+      if (typeFormals.isNotEmpty) {
+        List<DartType> freshVariables =
+            relateTypeFormals(this, other, (t, s, _, __) => t == s);
+        if (freshVariables == null) {
+          return false;
+        }
+        return instantiate(freshVariables)
+            .isEquivalentTo(other.instantiate(freshVariables));
+      }
+
+      return returnType.isEquivalentTo(other.returnType) &&
+          TypeImpl.equivalentArrays(
+              normalParameterTypes, other.normalParameterTypes) &&
+          TypeImpl.equivalentArrays(
+              optionalParameterTypes, other.optionalParameterTypes) &&
+          _equivalent(namedParameterTypes, other.namedParameterTypes);
+    }
+    return false;
+  }
+
+  @override
   bool isMoreSpecificThan(DartType type,
       [bool withDynamic = false, Set<Element> visitedElements]) {
     // Note: visitedElements is only used for breaking recursion in the type
@@ -1083,6 +1082,7 @@
     int length = parameters.length;
     for (int i = 0; i < length; i++) {
       ParameterElement parameter = parameters[i];
+      // ignore: deprecated_member_use
       if (parameter.parameterKind == kind) {
         TypeImpl type = parameter.type ?? DynamicTypeImpl.instance;
         if (typeArguments.length != 0 &&
@@ -1252,13 +1252,12 @@
     var tOptional = <ParameterElement>[];
     var tNamed = <String, ParameterElement>{};
     for (var p in tParams) {
-      var kind = p.parameterKind;
-      if (kind == ParameterKind.REQUIRED) {
+      if (p.isNotOptional) {
         tRequired.add(p);
-      } else if (kind == ParameterKind.POSITIONAL) {
+      } else if (p.isOptionalPositional) {
         tOptional.add(p);
       } else {
-        assert(kind == ParameterKind.NAMED);
+        assert(p.isNamed);
         tNamed[p.name] = p;
       }
     }
@@ -1267,13 +1266,12 @@
     var sOptional = <ParameterElement>[];
     var sNamed = <String, ParameterElement>{};
     for (var p in sParams) {
-      var kind = p.parameterKind;
-      if (kind == ParameterKind.REQUIRED) {
+      if (p.isNotOptional) {
         sRequired.add(p);
-      } else if (kind == ParameterKind.POSITIONAL) {
+      } else if (p.isOptionalPositional) {
         sOptional.add(p);
       } else {
-        assert(kind == ParameterKind.NAMED);
+        assert(p.isNamed);
         sNamed[p.name] = p;
       }
     }
@@ -1723,18 +1721,6 @@
   }
 
   @override
-  bool isEquivalentTo(DartType other) {
-    if (identical(other, this)) {
-      return true;
-    }
-    if (other is InterfaceTypeImpl) {
-      return (element == other.element) &&
-          TypeImpl.equivalentArrays(typeArguments, other.typeArguments);
-    }
-    return false;
-  }
-
-  @override
   void appendTo(StringBuffer buffer, Set<TypeImpl> visitedTypes) {
     if (visitedTypes.add(this)) {
       buffer.write(name);
@@ -1849,6 +1835,18 @@
   }
 
   @override
+  bool isEquivalentTo(DartType other) {
+    if (identical(other, this)) {
+      return true;
+    }
+    if (other is InterfaceTypeImpl) {
+      return (element == other.element) &&
+          TypeImpl.equivalentArrays(typeArguments, other.typeArguments);
+    }
+    return false;
+  }
+
+  @override
   bool isMoreSpecificThan(DartType type,
       [bool withDynamic = false, Set<Element> visitedElements]) {
     //
@@ -2587,9 +2585,6 @@
    */
   final Element _element;
 
-  @override
-  bool isEquivalentTo(DartType other) => this == other;
-
   /**
    * The name of this type, or `null` if the type does not have a name.
    */
@@ -2672,6 +2667,9 @@
     return isSubtypeOf(type) || type.isSubtypeOf(this);
   }
 
+  @override
+  bool isEquivalentTo(DartType other) => this == other;
+
   /**
    * Return `true` if this type is more specific than the given [type] (written
    * in the spec as "T << S", where T=[this] and S=[type]).
@@ -2866,24 +2864,6 @@
     return false;
   }
 
-  @override
-  bool isEquivalentTo(DartType other) {
-    if (other is TypeParameterTypeImpl && element == other.element) {
-      if (_comparingBounds) {
-        // If we're comparing bounds already, then we only need type variable
-        // equality.
-        return true;
-      }
-      _comparingBounds = true;
-      try {
-        return bound.isEquivalentTo(other.bound);
-      } finally {
-        _comparingBounds = false;
-      }
-    }
-    return false;
-  }
-
   /**
    * Append a textual representation of this type to the given [buffer]. The set
    * of [visitedTypes] is used to prevent infinite recursion.
@@ -2906,6 +2886,24 @@
   }
 
   @override
+  bool isEquivalentTo(DartType other) {
+    if (other is TypeParameterTypeImpl && element == other.element) {
+      if (_comparingBounds) {
+        // If we're comparing bounds already, then we only need type variable
+        // equality.
+        return true;
+      }
+      _comparingBounds = true;
+      try {
+        return bound.isEquivalentTo(other.bound);
+      } finally {
+        _comparingBounds = false;
+      }
+    }
+    return false;
+  }
+
+  @override
   bool isMoreSpecificThan(DartType s,
       [bool withDynamic = false, Set<Element> visitedElements]) {
     //
diff --git a/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart b/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
index 8995708..cb19d0f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
@@ -460,6 +460,119 @@
   }
 
   /**
+   * Given some array of [ExecutableElement]s, this method creates a synthetic element as
+   * described in 8.1.1:
+   *
+   * Let <i>numberOfPositionals</i>(<i>f</i>) denote the number of positional parameters of a
+   * function <i>f</i>, and let <i>numberOfRequiredParams</i>(<i>f</i>) denote the number of
+   * required parameters of a function <i>f</i>. Furthermore, let <i>s</i> denote the set of all
+   * named parameters of the <i>m<sub>1</sub>, &hellip;, m<sub>k</sub></i>. Then let
+   * * <i>h = max(numberOfPositionals(m<sub>i</sub>)),</i>
+   * * <i>r = min(numberOfRequiredParams(m<sub>i</sub>)), for all <i>i</i>, 1 <= i <= k.</i>
+   * Then <i>I</i> has a method named <i>n</i>, with <i>r</i> required parameters of type
+   * <b>dynamic</b>, <i>h</i> positional parameters of type <b>dynamic</b>, named parameters
+   * <i>s</i> of type <b>dynamic</b> and return type <b>dynamic</b>.
+   *
+   */
+  ExecutableElement _computeMergedExecutableElement(
+      List<ExecutableElement> elementArrayToMerge) {
+    int h = _getNumOfPositionalParameters(elementArrayToMerge[0]);
+    int r = _getNumOfRequiredParameters(elementArrayToMerge[0]);
+    Set<String> namedParametersList = new HashSet<String>();
+    for (int i = 1; i < elementArrayToMerge.length; i++) {
+      ExecutableElement element = elementArrayToMerge[i];
+      int numOfPositionalParams = _getNumOfPositionalParameters(element);
+      if (h < numOfPositionalParams) {
+        h = numOfPositionalParams;
+      }
+      int numOfRequiredParams = _getNumOfRequiredParameters(element);
+      if (r > numOfRequiredParams) {
+        r = numOfRequiredParams;
+      }
+      namedParametersList.addAll(_getNamedParameterNames(element));
+    }
+    return _createSyntheticExecutableElement(
+        elementArrayToMerge,
+        elementArrayToMerge[0].displayName,
+        r,
+        h - r,
+        new List.from(namedParametersList));
+  }
+
+  /**
+   * Used by [computeMergedExecutableElement] to actually create the
+   * synthetic element.
+   *
+   * @param elementArrayToMerge the array used to create the synthetic element
+   * @param name the name of the method, getter or setter
+   * @param numOfRequiredParameters the number of required parameters
+   * @param numOfPositionalParameters the number of positional parameters
+   * @param namedParameters the list of [String]s that are the named parameters
+   * @return the created synthetic element
+   */
+  ExecutableElement _createSyntheticExecutableElement(
+      List<ExecutableElement> elementArrayToMerge,
+      String name,
+      int numOfRequiredParameters,
+      int numOfPositionalParameters,
+      List<String> namedParameters) {
+    DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
+    DartType bottomType = _library.context.analysisOptions.strongMode
+        ? BottomTypeImpl.instance
+        : dynamicType;
+    SimpleIdentifier nameIdentifier = astFactory
+        .simpleIdentifier(new StringToken(TokenType.IDENTIFIER, name, 0));
+    ExecutableElementImpl executable;
+    ExecutableElement elementToMerge = elementArrayToMerge[0];
+    if (elementToMerge is MethodElement) {
+      MultiplyInheritedMethodElementImpl unionedMethod =
+          new MultiplyInheritedMethodElementImpl(nameIdentifier);
+      unionedMethod.inheritedElements = elementArrayToMerge;
+      executable = unionedMethod;
+    } else if (elementToMerge is PropertyAccessorElement) {
+      MultiplyInheritedPropertyAccessorElementImpl unionedPropertyAccessor =
+          new MultiplyInheritedPropertyAccessorElementImpl(nameIdentifier);
+      unionedPropertyAccessor.getter = elementToMerge.isGetter;
+      unionedPropertyAccessor.setter = elementToMerge.isSetter;
+      unionedPropertyAccessor.inheritedElements = elementArrayToMerge;
+      executable = unionedPropertyAccessor;
+    } else {
+      throw new AnalysisException(
+          'Invalid class of element in merge: ${elementToMerge.runtimeType}');
+    }
+    int numOfParameters = numOfRequiredParameters +
+        numOfPositionalParameters +
+        namedParameters.length;
+    List<ParameterElement> parameters =
+        new List<ParameterElement>(numOfParameters);
+    int i = 0;
+    for (int j = 0; j < numOfRequiredParameters; j++, i++) {
+      ParameterElementImpl parameter = new ParameterElementImpl("", 0);
+      parameter.type = bottomType;
+      parameter.parameterKind = ParameterKind.REQUIRED;
+      parameters[i] = parameter;
+    }
+    for (int k = 0; k < numOfPositionalParameters; k++, i++) {
+      ParameterElementImpl parameter = new ParameterElementImpl("", 0);
+      parameter.type = bottomType;
+      parameter.parameterKind = ParameterKind.POSITIONAL;
+      parameters[i] = parameter;
+    }
+    for (int m = 0; m < namedParameters.length; m++, i++) {
+      ParameterElementImpl parameter =
+          new ParameterElementImpl(namedParameters[m], 0);
+      parameter.type = bottomType;
+      parameter.parameterKind = ParameterKind.NAMED;
+      parameters[i] = parameter;
+    }
+    executable.returnType = dynamicType;
+    executable.parameters = parameters;
+    FunctionTypeImpl methodType = new FunctionTypeImpl(executable);
+    executable.type = methodType;
+    return executable;
+  }
+
+  /**
    * Collect a list of interface lookup maps whose elements correspond to all of the classes
    * directly above [classElt] in the class hierarchy (the direct superclass if any, all
    * mixins, and all direct superinterfaces). Each item in the list is the interface lookup map
@@ -911,119 +1024,6 @@
   }
 
   /**
-   * Given some array of [ExecutableElement]s, this method creates a synthetic element as
-   * described in 8.1.1:
-   *
-   * Let <i>numberOfPositionals</i>(<i>f</i>) denote the number of positional parameters of a
-   * function <i>f</i>, and let <i>numberOfRequiredParams</i>(<i>f</i>) denote the number of
-   * required parameters of a function <i>f</i>. Furthermore, let <i>s</i> denote the set of all
-   * named parameters of the <i>m<sub>1</sub>, &hellip;, m<sub>k</sub></i>. Then let
-   * * <i>h = max(numberOfPositionals(m<sub>i</sub>)),</i>
-   * * <i>r = min(numberOfRequiredParams(m<sub>i</sub>)), for all <i>i</i>, 1 <= i <= k.</i>
-   * Then <i>I</i> has a method named <i>n</i>, with <i>r</i> required parameters of type
-   * <b>dynamic</b>, <i>h</i> positional parameters of type <b>dynamic</b>, named parameters
-   * <i>s</i> of type <b>dynamic</b> and return type <b>dynamic</b>.
-   *
-   */
-  ExecutableElement _computeMergedExecutableElement(
-      List<ExecutableElement> elementArrayToMerge) {
-    int h = _getNumOfPositionalParameters(elementArrayToMerge[0]);
-    int r = _getNumOfRequiredParameters(elementArrayToMerge[0]);
-    Set<String> namedParametersList = new HashSet<String>();
-    for (int i = 1; i < elementArrayToMerge.length; i++) {
-      ExecutableElement element = elementArrayToMerge[i];
-      int numOfPositionalParams = _getNumOfPositionalParameters(element);
-      if (h < numOfPositionalParams) {
-        h = numOfPositionalParams;
-      }
-      int numOfRequiredParams = _getNumOfRequiredParameters(element);
-      if (r > numOfRequiredParams) {
-        r = numOfRequiredParams;
-      }
-      namedParametersList.addAll(_getNamedParameterNames(element));
-    }
-    return _createSyntheticExecutableElement(
-        elementArrayToMerge,
-        elementArrayToMerge[0].displayName,
-        r,
-        h - r,
-        new List.from(namedParametersList));
-  }
-
-  /**
-   * Used by [computeMergedExecutableElement] to actually create the
-   * synthetic element.
-   *
-   * @param elementArrayToMerge the array used to create the synthetic element
-   * @param name the name of the method, getter or setter
-   * @param numOfRequiredParameters the number of required parameters
-   * @param numOfPositionalParameters the number of positional parameters
-   * @param namedParameters the list of [String]s that are the named parameters
-   * @return the created synthetic element
-   */
-  ExecutableElement _createSyntheticExecutableElement(
-      List<ExecutableElement> elementArrayToMerge,
-      String name,
-      int numOfRequiredParameters,
-      int numOfPositionalParameters,
-      List<String> namedParameters) {
-    DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
-    DartType bottomType = _library.context.analysisOptions.strongMode
-        ? BottomTypeImpl.instance
-        : dynamicType;
-    SimpleIdentifier nameIdentifier = astFactory
-        .simpleIdentifier(new StringToken(TokenType.IDENTIFIER, name, 0));
-    ExecutableElementImpl executable;
-    ExecutableElement elementToMerge = elementArrayToMerge[0];
-    if (elementToMerge is MethodElement) {
-      MultiplyInheritedMethodElementImpl unionedMethod =
-          new MultiplyInheritedMethodElementImpl(nameIdentifier);
-      unionedMethod.inheritedElements = elementArrayToMerge;
-      executable = unionedMethod;
-    } else if (elementToMerge is PropertyAccessorElement) {
-      MultiplyInheritedPropertyAccessorElementImpl unionedPropertyAccessor =
-          new MultiplyInheritedPropertyAccessorElementImpl(nameIdentifier);
-      unionedPropertyAccessor.getter = elementToMerge.isGetter;
-      unionedPropertyAccessor.setter = elementToMerge.isSetter;
-      unionedPropertyAccessor.inheritedElements = elementArrayToMerge;
-      executable = unionedPropertyAccessor;
-    } else {
-      throw new AnalysisException(
-          'Invalid class of element in merge: ${elementToMerge.runtimeType}');
-    }
-    int numOfParameters = numOfRequiredParameters +
-        numOfPositionalParameters +
-        namedParameters.length;
-    List<ParameterElement> parameters =
-        new List<ParameterElement>(numOfParameters);
-    int i = 0;
-    for (int j = 0; j < numOfRequiredParameters; j++, i++) {
-      ParameterElementImpl parameter = new ParameterElementImpl("", 0);
-      parameter.type = bottomType;
-      parameter.parameterKind = ParameterKind.REQUIRED;
-      parameters[i] = parameter;
-    }
-    for (int k = 0; k < numOfPositionalParameters; k++, i++) {
-      ParameterElementImpl parameter = new ParameterElementImpl("", 0);
-      parameter.type = bottomType;
-      parameter.parameterKind = ParameterKind.POSITIONAL;
-      parameters[i] = parameter;
-    }
-    for (int m = 0; m < namedParameters.length; m++, i++) {
-      ParameterElementImpl parameter =
-          new ParameterElementImpl(namedParameters[m], 0);
-      parameter.type = bottomType;
-      parameter.parameterKind = ParameterKind.NAMED;
-      parameters[i] = parameter;
-    }
-    executable.returnType = dynamicType;
-    executable.parameters = parameters;
-    FunctionTypeImpl methodType = new FunctionTypeImpl(executable);
-    executable.type = methodType;
-    return executable;
-  }
-
-  /**
    * Given some [ExecutableElement], return the list of named parameters.
    */
   static List<String> _getNamedParameterNames(
@@ -1032,7 +1032,7 @@
     List<ParameterElement> parameters = executableElement.parameters;
     for (int i = 0; i < parameters.length; i++) {
       ParameterElement parameterElement = parameters[i];
-      if (parameterElement.parameterKind == ParameterKind.NAMED) {
+      if (parameterElement.isNamed) {
         namedParameterNames.add(parameterElement.name);
       }
     }
@@ -1048,6 +1048,7 @@
     List<ParameterElement> parameters = executableElement.parameters;
     for (int i = 0; i < parameters.length; i++) {
       ParameterElement parameterElement = parameters[i];
+      // ignore: deprecated_member_use
       if (parameterElement.parameterKind == parameterKind) {
         parameterCount++;
       }
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index c3cdad5..8e812db 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -423,6 +423,12 @@
           "class.",
           "Try renaming either the constructor or the field.");
 
+  static const CompileTimeErrorCode CONFLICTING_GENERIC_INTERFACES =
+      const CompileTimeErrorCode(
+          'CONFLICTING_GENERIC_INTERFACES',
+          "The class '{0}' cannot implement both '{1}' and '{2}' because the "
+          "type arguments are different.");
+
   /**
    * 7. Classes: It is a compile time error if a generic class declares a type
    * variable with the same name as the class or any of its members or
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index e9fed4b..5823b35 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -38,12 +38,14 @@
         messageConstMethod,
         messageConstructorWithReturnType,
         messageDirectiveAfterDeclaration,
+        messageExpectedStatement,
         messageFieldInitializerOutsideConstructor,
         messageIllegalAssignmentToNonAssignable,
         messageInterpolationInUri,
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
-        messageStaticConstructor;
+        messageStaticConstructor,
+        templateDuplicateLabelInSwitchStatement;
 import 'package:front_end/src/fasta/kernel/kernel_builder.dart'
     show Builder, KernelLibraryBuilder, Scope;
 import 'package:front_end/src/fasta/quote.dart';
@@ -319,8 +321,28 @@
   void endExpressionStatement(Token semicolon) {
     assert(optional(';', semicolon));
     debugEvent("ExpressionStatement");
-
-    push(ast.expressionStatement(pop(), semicolon));
+    Expression expression = pop();
+    if (expression is SuperExpression) {
+      // This error is also reported by the body builder.
+      handleRecoverableError(messageMissingAssignableSelector,
+          expression.beginToken, expression.endToken);
+    }
+    if (expression is SimpleIdentifier &&
+        expression.token?.keyword?.isBuiltInOrPseudo == false) {
+      // This error is also reported by the body builder.
+      handleRecoverableError(
+          messageExpectedStatement, expression.beginToken, expression.endToken);
+    }
+    if (expression is AssignmentExpression) {
+      if (!expression.leftHandSide.isAssignable) {
+        // This error is also reported by the body builder.
+        handleRecoverableError(
+            messageIllegalAssignmentToNonAssignable,
+            expression.leftHandSide.beginToken,
+            expression.leftHandSide.endToken);
+      }
+    }
+    push(ast.expressionStatement(expression, semicolon));
   }
 
   @override
@@ -638,13 +660,24 @@
     push(variable);
   }
 
+  @override
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {
+    debugEvent("beginVariablesDeclaration");
+    if (varFinalOrConst != null) {
+      push(new _Modifiers()..finalConstOrVarKeyword = varFinalOrConst);
+    } else {
+      push(NullValue.Modifiers);
+    }
+  }
+
+  @override
   void endVariablesDeclaration(int count, Token semicolon) {
     assert(optionalOrNull(';', semicolon));
     debugEvent("VariablesDeclaration");
 
     List<VariableDeclaration> variables = popList(count);
+    _Modifiers modifiers = pop(NullValue.Modifiers);
     TypeAnnotation type = pop();
-    _Modifiers modifiers = pop();
     Token keyword = modifiers?.finalConstOrVarKeyword;
     List<Annotation> metadata = pop();
     Comment comment = _findComment(metadata,
@@ -1160,6 +1193,20 @@
     exitLocalScope();
     List<SwitchMember> members =
         membersList?.expand((members) => members)?.toList() ?? <SwitchMember>[];
+
+    Set<String> labels = new Set<String>();
+    for (SwitchMember member in members) {
+      for (Label label in member.labels) {
+        if (!labels.add(label.label.name)) {
+          handleRecoverableError(
+              templateDuplicateLabelInSwitchStatement
+                  .withArguments(label.label.name),
+              label.beginToken,
+              label.beginToken);
+        }
+      }
+    }
+
     push(leftBracket);
     push(members);
     push(rightBracket);
@@ -1357,9 +1404,7 @@
 
     Expression expression = pop();
     if (!expression.isAssignable) {
-      // TODO(danrubel): The fasta parser does not have enough context to
-      // report this error. Consider moving it to the resolution phase
-      // or at least to common location that can be shared by all listeners.
+      // This error is also reported by the body builder.
       handleRecoverableError(messageMissingAssignableSelector,
           expression.endToken, expression.endToken);
     }
@@ -1372,9 +1417,7 @@
 
     Expression expression = pop();
     if (!expression.isAssignable) {
-      // TODO(danrubel): The fasta parser does not have enough context to
-      // report this error. Consider moving it to the resolution phase
-      // or at least to common location that can be shared by all listeners.
+      // This error is also reported by the body builder.
       handleRecoverableError(
           messageIllegalAssignmentToNonAssignable, operator, operator);
     }
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index df8586b..c517b31 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -22,19 +22,7 @@
       String analyzerCode, int offset, int length, Message message) {
     Map<String, dynamic> arguments = message.arguments;
 
-    String stringOrTokenLexeme() {
-      var text = arguments['string'];
-      if (text == null) {
-        text = arguments['name'];
-        if (text == null) {
-          Token token = arguments['token'];
-          if (token != null) {
-            text = token.lexeme;
-          }
-        }
-      }
-      return text;
-    }
+    String lexeme() => (arguments['token'] as Token).lexeme;
 
     switch (analyzerCode) {
       case "ABSTRACT_CLASS_MEMBER":
@@ -58,12 +46,11 @@
             ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, offset, length);
         return;
       case "BUILT_IN_IDENTIFIER_AS_TYPE":
-        String name = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE,
             offset,
             length,
-            [name]);
+            [lexeme()]);
         return;
       case "CLASS_IN_CLASS":
         errorReporter?.reportErrorForOffset(
@@ -138,6 +125,13 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, offset, length);
         return;
+      case "DUPLICATE_LABEL_IN_SWITCH_STATEMENT":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
+            offset,
+            length,
+            [arguments['string']]);
+        return;
       case "COVARIANT_MEMBER":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.COVARIANT_MEMBER, offset, length);
@@ -155,9 +149,8 @@
             ParserErrorCode.DUPLICATE_DEFERRED, offset, length);
         return;
       case "DUPLICATED_MODIFIER":
-        String text = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
-            ParserErrorCode.DUPLICATED_MODIFIER, offset, length, [text]);
+            ParserErrorCode.DUPLICATED_MODIFIER, offset, length, [lexeme()]);
         return;
       case "DUPLICATE_PREFIX":
         errorReporter?.reportErrorForOffset(
@@ -190,9 +183,8 @@
             ParserErrorCode.EXPECTED_STRING_LITERAL, offset, length);
         return;
       case "EXPECTED_TOKEN":
-        String text = stringOrTokenLexeme();
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXPECTED_TOKEN, offset, length, [text]);
+        errorReporter?.reportErrorForOffset(ParserErrorCode.EXPECTED_TOKEN,
+            offset, length, [arguments['string']]);
         return;
       case "EXPECTED_TYPE_NAME":
         errorReporter?.reportErrorForOffset(
@@ -241,9 +233,8 @@
             ParserErrorCode.EXTERNAL_TYPEDEF, offset, length);
         return;
       case "EXTRANEOUS_MODIFIER":
-        String text = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
-            ParserErrorCode.EXTRANEOUS_MODIFIER, offset, length, [text]);
+            ParserErrorCode.EXTRANEOUS_MODIFIER, offset, length, [lexeme()]);
         return;
       case "FACTORY_TOP_LEVEL_DECLARATION":
         errorReporter?.reportErrorForOffset(
@@ -354,9 +345,8 @@
             offset, length);
         return;
       case "INVALID_OPERATOR":
-        String text = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_OPERATOR, offset, length, [text]);
+            ParserErrorCode.INVALID_OPERATOR, offset, length, [lexeme()]);
         return;
       case "INVALID_OPERATOR_FOR_SUPER":
         _reportByCode(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, message,
@@ -426,6 +416,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_STAR_AFTER_SYNC, offset, length);
         return;
+      case "MISSING_STATEMENT":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.MISSING_STATEMENT, offset, length);
+        return;
       case "MISSING_TYPEDEF_PARAMETERS":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, offset, length);
@@ -521,12 +515,11 @@
             ParserErrorCode.TOP_LEVEL_OPERATOR, offset, length);
         return;
       case "TYPE_ARGUMENTS_ON_TYPE_VARIABLE":
-        String text = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
             offset,
             length,
-            [text]);
+            [arguments['name']]);
         return;
       case "TYPEDEF_IN_CLASS":
         errorReporter?.reportErrorForOffset(
@@ -545,9 +538,8 @@
             StaticTypeWarningCode.UNDEFINED_SETTER, offset, length);
         return;
       case "UNEXPECTED_TOKEN":
-        String text = stringOrTokenLexeme();
         errorReporter?.reportErrorForOffset(
-            ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [text]);
+            ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [lexeme()]);
         return;
       case "UNTERMINATED_MULTI_LINE_COMMENT":
         errorReporter?.reportErrorForOffset(
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index c3376a6..7b3f436 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -5,7 +5,6 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/ast_factory.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -18,9 +17,7 @@
         IdentifierImpl,
         PrefixedIdentifierImpl,
         SimpleIdentifierImpl;
-import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -124,11 +121,6 @@
   TypePromotionManager _promoteManager;
 
   /**
-   * Gets an instance of [AstFactory] based on the standard AST implementation.
-   */
-  AstFactory _astFactory;
-
-  /**
    * Initialize a newly created visitor to work for the given [_resolver] to
    * resolve the nodes in a compilation unit.
    */
@@ -140,7 +132,6 @@
     _typeType = _resolver.typeProvider.typeType;
     _subtypeManager = new SubtypeManager();
     _promoteManager = _resolver.promoteManager;
-    _astFactory = new AstFactoryImpl();
   }
 
   /**
@@ -626,23 +617,9 @@
     }
     Element staticElement;
     Element propagatedElement;
-    bool previewDart2 = _definingLibrary.context.analysisOptions.previewDart2;
     if (target == null) {
       staticElement = _resolveInvokedElement(methodName);
       propagatedElement = null;
-
-      if (previewDart2 &&
-          staticElement != null &&
-          staticElement is ClassElement) {
-        // cases: C() or C<>()
-        InstanceCreationExpression instanceCreationExpression =
-            _handleImplicitConstructorCase(node, staticElement);
-        if (instanceCreationExpression != null) {
-          // If a non-null is returned, the node was created, replaced, so we
-          // can return here.
-          return null;
-        }
-      }
     } else if (methodName.name == FunctionElement.LOAD_LIBRARY_NAME &&
         _isDeferredPrefix(target)) {
       if (node.operator.type == TokenType.QUESTION_PERIOD) {
@@ -667,28 +644,6 @@
       bool isConditional = node.operator.type == TokenType.QUESTION_PERIOD;
       ClassElement typeReference = getTypeReference(target);
 
-      if (previewDart2) {
-        InstanceCreationExpression instanceCreationExpression;
-        if ((target is SimpleIdentifier &&
-                target.staticElement is PrefixElement) ||
-            (target is PrefixedIdentifier &&
-                target.prefix.staticElement is PrefixElement)) {
-          // case: p.C(), p.C<>() or p.C.n()
-          instanceCreationExpression =
-              _handlePrefixedImplicitConstructorCase(node, target);
-        } else if (typeReference is ClassElement) {
-          // case: C.n()
-          instanceCreationExpression =
-              _handleImplicitConstructorCase(node, typeReference);
-        }
-
-        if (instanceCreationExpression != null) {
-          // If a non-null is returned, the node was created, replaced, so we
-          // can return here.
-          return null;
-        }
-      }
-
       if (typeReference != null) {
         if (node.isCascaded) {
           typeReference = _typeType.element;
@@ -1630,216 +1585,6 @@
   }
 
   /**
-   * Return the newly created and replaced [InstanceCreationExpression], or
-   * `null` if this is not an implicit constructor case.
-   *
-   * This method covers the "ClassName()" and "ClassName.namedConstructor()"
-   * cases for the prefixed cases, i.e. "libraryPrefix.ClassName()" and
-   * "libraryPrefix.ClassName.namedConstructor()" see
-   * [_handlePrefixedImplicitConstructorCase].
-   */
-  InstanceCreationExpression _handleImplicitConstructorCase(
-      MethodInvocation node, ClassElement classElement) {
-    // If target == null, then this is the unnamed constructor, A(), case,
-    // otherwise it is the named constructor A.name() case.
-    Expression target = node.realTarget;
-    bool isNamedConstructorCase = target != null;
-
-    // If we are in the named constructor case, verify that the target is a
-    // SimpleIdentifier and that the operator is '.'
-    SimpleIdentifier targetSimpleId;
-    if (isNamedConstructorCase) {
-      if (target is SimpleIdentifier &&
-          node.operator.type == TokenType.PERIOD) {
-        targetSimpleId = target;
-      } else {
-        // Return null as this is not an implicit constructor case.
-        return null;
-      }
-    }
-
-    // Before any ASTs are created, look up ConstructorElement to see if we
-    // should construct an [InstanceCreationExpression] to replace this
-    // [MethodInvocation].
-    InterfaceType classType = classElement.type;
-    if (node.typeArguments != null) {
-      int parameterCount = classType.typeParameters.length;
-      int argumentCount = node.typeArguments.arguments.length;
-      if (parameterCount == argumentCount) {
-        // TODO(brianwilkerson) More gracefully handle the case where the counts
-        // are different.
-        List<DartType> typeArguments = node.typeArguments.arguments
-            .map((TypeAnnotation type) => type.type)
-            .toList();
-        classType = classType.instantiate(typeArguments);
-      }
-    } else {
-      int parameterCount = classType.typeParameters.length;
-      if (parameterCount > 0) {
-        List<DartType> typeArguments =
-            new List<DartType>.filled(parameterCount, _dynamicType);
-        classType = classType.instantiate(typeArguments);
-      }
-    }
-    ConstructorElement constructorElt;
-    if (isNamedConstructorCase) {
-      constructorElt =
-          classType.lookUpConstructor(node.methodName.name, _definingLibrary);
-    } else {
-      constructorElt = classType.lookUpConstructor(null, _definingLibrary);
-    }
-    // If the constructor was not looked up, return `null` so resulting
-    // resolution, such as error messages, will proceed as a [MethodInvocation].
-    if (constructorElt == null) {
-      return null;
-    }
-
-    // Create the Constructor name, in each case: A[.named]()
-    TypeName typeName;
-    ConstructorName constructorName;
-    if (isNamedConstructorCase) {
-      // A.named()
-      typeName = _astFactory.typeName(targetSimpleId, node.typeArguments);
-      typeName.type = classType;
-      constructorName =
-          _astFactory.constructorName(typeName, node.operator, node.methodName);
-    } else {
-      // A()
-      node.methodName.staticElement = classElement;
-      typeName = _astFactory.typeName(node.methodName, node.typeArguments);
-      typeName.type = classType;
-      constructorName = _astFactory.constructorName(typeName, null, null);
-    }
-    InstanceCreationExpression instanceCreationExpression = _astFactory
-        .instanceCreationExpression(null, constructorName, node.argumentList);
-
-    if (isNamedConstructorCase) {
-      constructorName.name.staticElement = constructorElt;
-    }
-    constructorName.staticElement = constructorElt;
-    instanceCreationExpression.staticElement = constructorElt;
-    instanceCreationExpression.staticType = classType;
-
-    node.argumentList.correspondingStaticParameters =
-        _computeCorrespondingParameters(node.argumentList, constructorElt.type);
-
-    // Finally, do the node replacement, true is returned iff the replacement
-    // was successful, only return the new node if it was successful.
-    if (NodeReplacer.replace(node, instanceCreationExpression)) {
-      return instanceCreationExpression;
-    }
-    return null;
-  }
-
-  /**
-   * Return the newly created and replaced [InstanceCreationExpression], or
-   * `null` if this is not an implicit constructor case.
-   *
-   * This method covers the "libraryPrefix.ClassName()" and
-   * "libraryPrefix.ClassName.namedConstructor()" cases for the non-prefixed
-   * cases, i.e. "ClassName()" and "ClassName.namedConstructor()" see
-   * [_handleImplicitConstructorCase].
-   */
-  InstanceCreationExpression _handlePrefixedImplicitConstructorCase(
-      MethodInvocation node, Identifier libraryPrefixId) {
-    bool isNamedConstructorCase = libraryPrefixId is PrefixedIdentifier;
-    ClassElement classElement;
-    if (isNamedConstructorCase) {
-      var elt = (libraryPrefixId as PrefixedIdentifier).staticElement;
-      if (elt is ClassElement) {
-        classElement = elt;
-      }
-    } else {
-      LibraryElement libraryElement = _getImportedLibrary(node.target);
-      if (libraryElement == null) {
-        // We cannot resolve the import to find the library, so we won't be able
-        // to find the class to see whether the method is actually a constructor.
-        return null;
-      }
-      classElement = libraryElement.getType(node.methodName.name);
-    }
-
-    // Before any ASTs are created, look up ConstructorElement to see if we
-    // should construct an [InstanceCreationExpression] to replace this
-    // [MethodInvocation].
-    if (classElement == null) {
-      return null;
-    }
-    InterfaceType classType = classElement.type;
-    if (node.typeArguments != null) {
-      int parameterCount = classType.typeParameters.length;
-      int argumentCount = node.typeArguments.arguments.length;
-      if (parameterCount == argumentCount) {
-        // TODO(brianwilkerson) More gracefully handle the case where the counts
-        // are different.
-        List<DartType> typeArguments = node.typeArguments.arguments
-            .map((TypeAnnotation type) => type.type)
-            .toList();
-        classType = classType.instantiate(typeArguments);
-      }
-    } else {
-      int parameterCount = classType.typeParameters.length;
-      if (parameterCount > 0) {
-        List<DartType> typeArguments =
-            new List<DartType>.filled(parameterCount, _dynamicType);
-        classType = classType.instantiate(typeArguments);
-      }
-    }
-    ConstructorElement constructorElt;
-    if (isNamedConstructorCase) {
-      constructorElt =
-          classType.lookUpConstructor(node.methodName.name, _definingLibrary);
-    } else {
-      constructorElt = classType.lookUpConstructor(null, _definingLibrary);
-    }
-    // If the constructor was not looked up, return `null` so resulting
-    // resolution, such as error messages, will proceed as a [MethodInvocation].
-    if (constructorElt == null) {
-      return null;
-    }
-
-    // Create the Constructor name, in each case: A[.named]()
-    TypeName typeName;
-    ConstructorName constructorName;
-    if (isNamedConstructorCase) {
-      // p.A.n()
-      // libraryPrefixId is a PrefixedIdentifier in this case
-      typeName = _astFactory.typeName(libraryPrefixId, node.typeArguments);
-      typeName.type = classType;
-      constructorName =
-          _astFactory.constructorName(typeName, node.operator, node.methodName);
-    } else {
-      // p.A()
-      // libraryPrefixId is a SimpleIdentifier in this case
-      node.methodName.staticElement = classElement;
-      PrefixedIdentifier prefixedIdentifier = _astFactory.prefixedIdentifier(
-          libraryPrefixId, node.operator, node.methodName);
-      typeName = _astFactory.typeName(prefixedIdentifier, node.typeArguments);
-      typeName.type = classType;
-      constructorName = _astFactory.constructorName(typeName, null, null);
-    }
-    InstanceCreationExpression instanceCreationExpression = _astFactory
-        .instanceCreationExpression(null, constructorName, node.argumentList);
-
-    if (isNamedConstructorCase) {
-      constructorName.name.staticElement = constructorElt;
-    }
-    constructorName.staticElement = constructorElt;
-    instanceCreationExpression.staticElement = constructorElt;
-    instanceCreationExpression.staticType = classType;
-
-    node.argumentList.correspondingStaticParameters =
-        _computeCorrespondingParameters(node.argumentList, constructorElt.type);
-
-    // Finally, do the node replacement, true is returned iff the replacement
-    // was successful, only return the new node if it was successful.
-    if (NodeReplacer.replace(node, instanceCreationExpression)) {
-      return instanceCreationExpression;
-    }
-    return null;
-  }
-
-  /**
    * Return `true` if the given [element] is or inherits from a class marked
    * with `@proxy`.
    *
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index abd1238..b3490e1 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -29,7 +29,6 @@
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/sdk.dart' show DartSdk, SdkLibrary;
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/task/dart.dart';
 
 /**
@@ -1329,6 +1328,7 @@
 
       if (_options.strongMode) {
         _checkForMixinWithConflictingPrivateMember(withClause, superclass);
+        _checkForConflictingGenerics(node);
       }
     }
   }
@@ -1944,8 +1944,7 @@
         AstNode parameterLocationToSelect = null;
         for (int i = 0; i < parameters.length; i++) {
           ParameterElement parameter = parameters[i];
-          if (parameter.parameterKind == ParameterKind.NAMED &&
-              overriddenName == parameter.name) {
+          if (parameter.isNamed && overriddenName == parameter.name) {
             parameterToSelect = parameter;
             parameterLocationToSelect = parameterLocations[i];
             break;
@@ -1978,13 +1977,13 @@
     List<ParameterElement> overriddenPEs = baseElement.parameters;
     for (int i = 0; i < parameters.length; i++) {
       ParameterElement parameter = parameters[i];
-      if (parameter.parameterKind.isOptional) {
+      if (parameter.isOptional) {
         formalParameters.add(parameterLocations[i]);
         parameterElts.add(parameter as ParameterElementImpl);
       }
     }
     for (ParameterElement parameterElt in overriddenPEs) {
-      if (parameterElt.parameterKind.isOptional) {
+      if (parameterElt.isOptional) {
         if (parameterElt is ParameterElementImpl) {
           overriddenParameterElts.add(parameterElt);
         }
@@ -1995,7 +1994,7 @@
     // overridden optional parameter elements.
     //
     if (parameterElts.length > 0) {
-      if (parameterElts[0].parameterKind == ParameterKind.NAMED) {
+      if (parameterElts[0].isNamed) {
         // Named parameters, consider the names when matching the parameterElts
         // to the overriddenParameterElts
         for (int i = 0; i < parameterElts.length; i++) {
@@ -2817,6 +2816,34 @@
     }
   }
 
+  void _checkForConflictingGenerics(NamedCompilationUnitMember node) {
+    var visitedClasses = <ClassElement>[];
+    var interfaces = <ClassElement, InterfaceType>{};
+    void visit(InterfaceType type) {
+      if (type == null) return;
+      var element = type.element;
+      if (visitedClasses.contains(element)) return;
+      visitedClasses.add(element);
+      if (element.typeParameters.isNotEmpty) {
+        var oldType = interfaces[element];
+        if (oldType == null) {
+          interfaces[element] = type;
+        } else if (oldType != type) {
+          _errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
+              node,
+              [_enclosingClass.name, oldType, type]);
+        }
+      }
+      visit(type.superclass);
+      type.mixins.forEach(visit);
+      type.interfaces.forEach(visit);
+      visitedClasses.removeLast();
+    }
+
+    visit(_enclosingClass.type);
+  }
+
   /**
    * Verify that the [_enclosingClass] does not have a method and getter pair
    * with the same name on, via inheritance.
@@ -4763,7 +4790,7 @@
 
   void _checkForMissingJSLibAnnotation(Annotation node) {
     if (resolutionMap.elementAnnotationForAnnotation(node)?.isJS ?? false) {
-      if (_currentLibrary.isJS != true) {
+      if (_currentLibrary.hasJS != true) {
         _errorReporter.reportErrorForNode(
             HintCode.MISSING_JS_LIB_ANNOTATION, node);
       }
@@ -5308,7 +5335,7 @@
 
     NodeList<FormalParameter> formalParameters = parameterList.parameters;
     for (FormalParameter formalParameter in formalParameters) {
-      if (formalParameter.kind.isOptional) {
+      if (formalParameter.isOptional) {
         _errorReporter.reportErrorForNode(
             CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR,
             formalParameter);
@@ -5337,7 +5364,7 @@
    */
   void _checkForPrivateOptionalParameter(FormalParameter parameter) {
     // should be named parameter
-    if (parameter.kind != ParameterKind.NAMED) {
+    if (!parameter.isNamed) {
       return;
     }
     // name should start with '_'
@@ -5951,6 +5978,31 @@
         [enclosingElement.name]);
   }
 
+  /**
+   * Check for situations where the result of a method or function is used, when
+   * it returns 'void'. Or, in rare cases, when other types of expressions are
+   * void, such as identifiers.
+   *
+   * See [StaticWarningCode.USE_OF_VOID_RESULT].
+   */
+  bool _checkForUseOfVoidResult(Expression expression) {
+    if (expression == null ||
+        !identical(expression.staticType, VoidTypeImpl.instance)) {
+      return false;
+    }
+
+    if (expression is MethodInvocation) {
+      SimpleIdentifier methodName = expression.methodName;
+      _errorReporter.reportErrorForNode(
+          StaticWarningCode.USE_OF_VOID_RESULT, methodName, []);
+    } else {
+      _errorReporter.reportErrorForNode(
+          StaticWarningCode.USE_OF_VOID_RESULT, expression, []);
+    }
+
+    return true;
+  }
+
   void _checkForValidField(FieldFormalParameter parameter) {
     AstNode parent2 = parameter.parent?.parent;
     if (parent2 is! ConstructorDeclaration &&
@@ -6086,8 +6138,7 @@
     }
 
     NodeList<FormalParameter> parameters = parameterList.parameters;
-    if (parameters.length != 1 ||
-        parameters[0].kind != ParameterKind.REQUIRED) {
+    if (parameters.length != 1 || !parameters[0].isRequired) {
       _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER,
           setterName);
@@ -6214,27 +6265,31 @@
     ClassElementImpl.collectAllSupertypes(
         supertypesForMixinInference, supertype, type);
     for (var typeName in withClause.mixinTypes) {
-      if (typeName.typeArguments != null) continue;
       var mixinElement = typeName.name.staticElement;
       if (mixinElement is ClassElement) {
-        var mixinSupertypeConstraints =
-            _typeSystem.gatherMixinSupertypeConstraints(mixinElement);
-        if (mixinSupertypeConstraints.isNotEmpty) {
-          var matchingInterfaceTypes = _findInterfaceTypesForConstraints(
-              typeName, mixinSupertypeConstraints, supertypesForMixinInference);
-          if (matchingInterfaceTypes != null) {
-            // Try to pattern match matchingInterfaceType against
-            // mixinSupertypeConstraint to find the correct set of type
-            // parameters to apply to the mixin.
-            var matchedType = _typeSystem.matchSupertypeConstraints(
-                mixinElement,
+        if (typeName.typeArguments == null) {
+          var mixinSupertypeConstraints =
+              _typeSystem.gatherMixinSupertypeConstraints(mixinElement);
+          if (mixinSupertypeConstraints.isNotEmpty) {
+            var matchingInterfaceTypes = _findInterfaceTypesForConstraints(
+                typeName,
                 mixinSupertypeConstraints,
-                matchingInterfaceTypes);
-            if (matchedType == null) {
-              _errorReporter.reportErrorForToken(
-                  CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
-                  typeName.name.beginToken,
-                  [typeName]);
+                supertypesForMixinInference);
+            if (matchingInterfaceTypes != null) {
+              // Try to pattern match matchingInterfaceType against
+              // mixinSupertypeConstraint to find the correct set of type
+              // parameters to apply to the mixin.
+              var matchedType = _typeSystem.matchSupertypeConstraints(
+                  mixinElement,
+                  mixinSupertypeConstraints,
+                  matchingInterfaceTypes);
+              if (matchedType == null) {
+                _errorReporter.reportErrorForToken(
+                    CompileTimeErrorCode
+                        .MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
+                    typeName.name.beginToken,
+                    [typeName]);
+              }
             }
           }
         }
@@ -6309,31 +6364,6 @@
     }
   }
 
-  /**
-   * Check for situations where the result of a method or function is used, when
-   * it returns 'void'. Or, in rare cases, when other types of expressions are
-   * void, such as identifiers.
-   *
-   * See [StaticWarningCode.USE_OF_VOID_RESULT].
-   */
-  bool _checkForUseOfVoidResult(Expression expression) {
-    if (expression == null ||
-        !identical(expression.staticType, VoidTypeImpl.instance)) {
-      return false;
-    }
-
-    if (expression is MethodInvocation) {
-      SimpleIdentifier methodName = expression.methodName;
-      _errorReporter.reportErrorForNode(
-          StaticWarningCode.USE_OF_VOID_RESULT, methodName, []);
-    } else {
-      _errorReporter.reportErrorForNode(
-          StaticWarningCode.USE_OF_VOID_RESULT, expression, []);
-    }
-
-    return true;
-  }
-
   DartType _computeReturnTypeForMethod(Expression returnExpression) {
     // This method should never be called for generators, since generators are
     // never allowed to contain return statements with expressions.
@@ -6360,24 +6390,6 @@
         isDeclarationCast: isDeclarationCast);
   }
 
-  List<InterfaceType> _findInterfaceTypesForConstraints(
-      TypeName mixin,
-      List<InterfaceType> supertypeConstraints,
-      List<InterfaceType> interfaceTypes) {
-    var result = <InterfaceType>[];
-    for (var constraint in supertypeConstraints) {
-      var interfaceType =
-          _findInterfaceTypeForMixin(mixin, constraint, interfaceTypes);
-      if (interfaceType == null) {
-        // No matching interface type found, so inference fails.  The error has
-        // already been reported.
-        return null;
-      }
-      result.add(interfaceType);
-    }
-    return result;
-  }
-
   InterfaceType _findInterfaceTypeForMixin(TypeName mixin,
       InterfaceType supertypeConstraint, List<InterfaceType> interfaceTypes) {
     var element = supertypeConstraint.element;
@@ -6405,6 +6417,24 @@
     return foundInterfaceType;
   }
 
+  List<InterfaceType> _findInterfaceTypesForConstraints(
+      TypeName mixin,
+      List<InterfaceType> supertypeConstraints,
+      List<InterfaceType> interfaceTypes) {
+    var result = <InterfaceType>[];
+    for (var constraint in supertypeConstraints) {
+      var interfaceType =
+          _findInterfaceTypeForMixin(mixin, constraint, interfaceTypes);
+      if (interfaceType == null) {
+        // No matching interface type found, so inference fails.  The error has
+        // already been reported.
+        return null;
+      }
+      result.add(interfaceType);
+    }
+    return result;
+  }
+
   MethodElement _findOverriddenMemberThatMustCallSuper(MethodDeclaration node) {
     ExecutableElement overriddenMember = _getOverriddenMember(node.element);
     List<ExecutableElement> seen = <ExecutableElement>[];
@@ -7103,7 +7133,7 @@
       DartType type, ArgumentList argumentList, AstNode node) {
     if (type is FunctionType) {
       for (ParameterElement parameter in type.parameters) {
-        if (parameter.parameterKind == ParameterKind.NAMED) {
+        if (parameter.isNamed) {
           ElementAnnotationImpl annotation = _getRequiredAnnotation(parameter);
           if (annotation != null) {
             String parameterName = parameter.name;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index d580ab9..81cc956 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/ast_factory.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -16,6 +17,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart' show ConstructorMember;
@@ -31,7 +33,6 @@
 import 'package:analyzer/src/generated/static_type_analyzer.dart';
 import 'package:analyzer/src/generated/testing/element_factory.dart';
 import 'package:analyzer/src/generated/type_system.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:path/path.dart' as path;
 
 export 'package:analyzer/src/dart/resolver/inheritance_manager.dart';
@@ -39,6 +40,150 @@
 export 'package:analyzer/src/generated/type_system.dart';
 
 /**
+ * A visitor that will re-write an AST to support the optional `new` and `const`
+ * feature.
+ */
+class AstRewriteVisitor extends ScopedVisitor {
+  /**
+   * Initialize a newly created visitor.
+   */
+  AstRewriteVisitor(LibraryElement definingLibrary, Source source,
+      TypeProvider typeProvider, AnalysisErrorListener errorListener,
+      {Scope nameScope})
+      : super(definingLibrary, source, typeProvider, errorListener,
+            nameScope: nameScope);
+
+  @override
+  Object visitMethodInvocation(MethodInvocation node) {
+    super.visitMethodInvocation(node);
+
+    SimpleIdentifier methodName = node.methodName;
+    if (methodName.isSynthetic) {
+      // This isn't a constructor invocation because the method name is
+      // synthetic.
+      return null;
+    }
+
+    Expression target = node.target;
+    if (target == null) {
+      // Possible cases: C() or C<>()
+      if (node.realTarget != null) {
+        // This isn't a constructor invocation because it's in a cascade.
+        return null;
+      }
+      Element element = nameScope.lookup(methodName, definingLibrary);
+      if (element is ClassElement) {
+        AstFactory astFactory = new AstFactoryImpl();
+        TypeName typeName = astFactory.typeName(methodName, node.typeArguments);
+        InstanceCreationExpression instanceCreationExpression =
+            astFactory.instanceCreationExpression(
+                null,
+                astFactory.constructorName(typeName, null, null),
+                node.argumentList);
+        DartType type = _getType(element, node.typeArguments);
+        methodName.staticElement = element;
+        methodName.staticType = type;
+        typeName.type = type;
+        NodeReplacer.replace(node, instanceCreationExpression);
+      }
+    } else if (target is SimpleIdentifier) {
+      // Possible cases: C.n(), p.C() or p.C<>()
+      if (node.operator.type == TokenType.QUESTION_PERIOD) {
+        // This isn't a constructor invocation because a null aware operator is
+        // being used.
+      }
+      Element element = nameScope.lookup(target, definingLibrary);
+      if (element is ClassElement) {
+        // Possible case: C.n()
+        if (element.getNamedConstructor(methodName.name) != null) {
+          AstFactory astFactory = new AstFactoryImpl();
+          TypeName typeName = astFactory.typeName(target, node.typeArguments);
+          InstanceCreationExpression instanceCreationExpression =
+              astFactory.instanceCreationExpression(
+                  null,
+                  astFactory.constructorName(
+                      typeName, node.operator, methodName),
+                  node.argumentList);
+          DartType type = _getType(element, node.typeArguments);
+          methodName.staticElement = element;
+          methodName.staticType = type;
+          typeName.type = type;
+          NodeReplacer.replace(node, instanceCreationExpression);
+        }
+      } else if (element is PrefixElement) {
+        // Possible cases: p.C() or p.C<>()
+        AstFactory astFactory = new AstFactoryImpl();
+        Identifier identifier = astFactory.prefixedIdentifier(
+            astFactory.simpleIdentifier(target.token),
+            null,
+            astFactory.simpleIdentifier(methodName.token));
+        Element prefixedElement = nameScope.lookup(identifier, definingLibrary);
+        if (prefixedElement is ClassElement) {
+          TypeName typeName = astFactory.typeName(
+              astFactory.prefixedIdentifier(target, node.operator, methodName),
+              node.typeArguments);
+          InstanceCreationExpression instanceCreationExpression =
+              astFactory.instanceCreationExpression(
+                  null,
+                  astFactory.constructorName(typeName, null, null),
+                  node.argumentList);
+          DartType type = _getType(prefixedElement, node.typeArguments);
+          methodName.staticElement = element;
+          methodName.staticType = type;
+          typeName.type = type;
+          NodeReplacer.replace(node, instanceCreationExpression);
+        }
+      }
+    } else if (target is PrefixedIdentifier) {
+      // Possible case: p.C.n()
+      Element prefixElement = nameScope.lookup(target.prefix, definingLibrary);
+      if (prefixElement is PrefixElement) {
+        Element element = nameScope.lookup(target, definingLibrary);
+        if (element is ClassElement) {
+          if (element.getNamedConstructor(methodName.name) != null) {
+            AstFactory astFactory = new AstFactoryImpl();
+            TypeName typeName = astFactory.typeName(target, node.typeArguments);
+            InstanceCreationExpression instanceCreationExpression =
+                astFactory.instanceCreationExpression(
+                    null,
+                    astFactory.constructorName(
+                        typeName, node.operator, methodName),
+                    node.argumentList);
+            DartType type = _getType(element, node.typeArguments);
+            methodName.staticElement = element;
+            methodName.staticType = type;
+            typeName.type = type;
+            NodeReplacer.replace(node, instanceCreationExpression);
+          }
+        }
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Return the type of the given class [element] after substituting any type
+   * arguments from the list of [typeArguments] for the class' type parameters.
+   */
+  DartType _getType(ClassElement element, TypeArgumentList typeArguments) {
+    DartType type = element.type;
+    List<TypeParameterElement> typeParameters = element.typeParameters;
+    if (typeArguments != null &&
+        typeParameters != null &&
+        typeArguments.arguments.length == typeParameters.length) {
+      List<DartType> argumentTypes = typeArguments.arguments
+          .map((TypeAnnotation argument) => argument.type)
+          .toList();
+      List<DartType> parameterTypes = typeParameters
+          .map((TypeParameterElement parameter) => parameter.type)
+          .toList();
+      type = type.substitute2(argumentTypes, parameterTypes);
+    }
+    return type;
+  }
+}
+
+/**
  * Instances of the class `BestPracticesVerifier` traverse an AST structure looking for
  * violations of Dart best practices.
  */
@@ -107,7 +252,7 @@
       : _nullType = typeProvider.nullType,
         _futureNullType = typeProvider.futureNullType,
         _typeSystem = typeSystem ?? new TypeSystemImpl(typeProvider) {
-    inDeprecatedMember = _currentLibrary.isDeprecated;
+    inDeprecatedMember = _currentLibrary.hasDeprecated;
   }
 
   @override
@@ -136,7 +281,7 @@
   Object visitArgumentList(ArgumentList node) {
     for (Expression argument in node.arguments) {
       ParameterElement parameter = argument.bestParameterElement;
-      if (parameter?.parameterKind == ParameterKind.POSITIONAL) {
+      if (parameter?.isOptionalPositional == true) {
         _checkForDeprecatedMemberUse(parameter, argument);
       }
     }
@@ -173,7 +318,7 @@
     ClassElementImpl outerClass = _enclosingClass;
     bool wasInDeprecatedMember = inDeprecatedMember;
     ClassElement element = AbstractClassElementImpl.getImpl(node.element);
-    if (element != null && element.isDeprecated) {
+    if (element != null && element.hasDeprecated) {
       inDeprecatedMember = true;
     }
     try {
@@ -218,7 +363,7 @@
   Object visitFunctionDeclaration(FunctionDeclaration node) {
     bool wasInDeprecatedMember = inDeprecatedMember;
     ExecutableElement element = node.element;
-    if (element != null && element.isDeprecated) {
+    if (element != null && element.hasDeprecated) {
       inDeprecatedMember = true;
     }
     try {
@@ -261,7 +406,7 @@
   Object visitMethodDeclaration(MethodDeclaration node) {
     bool wasInDeprecatedMember = inDeprecatedMember;
     ExecutableElement element = node.element;
-    if (element != null && element.isDeprecated) {
+    if (element != null && element.hasDeprecated) {
       inDeprecatedMember = true;
     }
     try {
@@ -564,9 +709,9 @@
         if (variable == null) {
           return false;
         }
-        return variable.isDeprecated;
+        return variable.hasDeprecated;
       }
-      return element.isDeprecated;
+      return element.hasDeprecated;
     }
 
     if (!inDeprecatedMember && isDeprecated(element)) {
@@ -764,12 +909,12 @@
     bool isProtected(Element element) {
       if (element is PropertyAccessorElement &&
           element.enclosingElement is ClassElement &&
-          (element.isProtected || element.variable.isProtected)) {
+          (element.hasProtected || element.variable.hasProtected)) {
         return true;
       }
       if (element is MethodElement &&
           element.enclosingElement is ClassElement &&
-          element.isProtected) {
+          element.hasProtected) {
         return true;
       }
       return false;
@@ -779,12 +924,12 @@
       if (element == null) {
         return false;
       }
-      if (element.isVisibleForTesting) {
+      if (element.hasVisibleForTesting) {
         return true;
       }
       if (element is PropertyAccessorElement &&
           element.enclosingElement is ClassElement &&
-          element.variable.isVisibleForTesting) {
+          element.variable.hasVisibleForTesting) {
         return true;
       }
       return false;
@@ -1179,11 +1324,11 @@
 
   void _checkRequiredParameter(FormalParameterList node) {
     final requiredParameters =
-        node.parameters.where((p) => p.element?.isRequired == true);
+        node.parameters.where((p) => p.element?.hasRequired == true);
     final nonNamedParamsWithRequired =
-        requiredParameters.where((p) => p.kind != ParameterKind.NAMED);
+        requiredParameters.where((p) => !p.isNamed);
     final namedParamsWithRequiredAndDefault = requiredParameters
-        .where((p) => p.kind == ParameterKind.NAMED)
+        .where((p) => p.isNamed)
         .where((p) => p.element.defaultValueCode != null);
     final paramsToHint = [
       nonNamedParamsWithRequired,
@@ -3322,7 +3467,7 @@
       }
     }
     Element element = node.methodName.staticElement;
-    if (element != null && element.isAlwaysThrows) {
+    if (element != null && element.hasAlwaysThrows) {
       return true;
     }
     return _nodeExits(node.argumentList);
@@ -4516,7 +4661,7 @@
    * @param element the element being tested
    * @return `true` if the element has an override annotation associated with it
    */
-  bool _isOverride(Element element) => element != null && element.isOverride;
+  bool _isOverride(Element element) => element != null && element.hasOverride;
 }
 
 /**
@@ -6876,12 +7021,11 @@
     int length = parameters.length;
     for (int i = 0; i < length; i++) {
       ParameterElement parameter = parameters[i];
-      ParameterKind kind = parameter.parameterKind;
-      if (kind == ParameterKind.REQUIRED) {
+      if (parameter.isNotOptional) {
         unnamedParameters.add(parameter);
         unnamedParameterCount++;
         requiredParameterCount++;
-      } else if (kind == ParameterKind.POSITIONAL) {
+      } else if (parameter.isOptionalPositional) {
         unnamedParameters.add(parameter);
         unnamedParameterCount++;
       } else {
@@ -7463,7 +7607,13 @@
 
   @override
   Object visitGenericFunctionType(GenericFunctionType node) {
-    GenericFunctionTypeElement element = node.type.element;
+    DartType type = node.type;
+    if (type == null) {
+      // The function type hasn't been resolved yet, so we can't create a scope
+      // for its parameters.
+      return super.visitGenericFunctionType(node);
+    }
+    GenericFunctionTypeElement element = type.element;
     Scope outerScope = nameScope;
     try {
       if (element == null) {
@@ -10030,20 +10180,6 @@
   }
 
   /**
-   * In strong mode we infer "void" as the setter return type (as void is the
-   * only legal return type for a setter). This allows us to give better
-   * errors later if an invalid type is returned.
-   */
-  void _inferSetterReturnType(ExecutableElementImpl element) {
-    if (_strongMode &&
-        element is PropertyAccessorElementImpl &&
-        element.isSetter &&
-        element.hasImplicitReturnType) {
-      element.declaredReturnType = VoidTypeImpl.instance;
-    }
-  }
-
-  /**
    * In strong mode we infer "void" as the return type of operator []= (as void
    * is the only legal return type for []=). This allows us to give better
    * errors later if an invalid type is returned.
@@ -10058,6 +10194,20 @@
   }
 
   /**
+   * In strong mode we infer "void" as the setter return type (as void is the
+   * only legal return type for a setter). This allows us to give better
+   * errors later if an invalid type is returned.
+   */
+  void _inferSetterReturnType(ExecutableElementImpl element) {
+    if (_strongMode &&
+        element is PropertyAccessorElementImpl &&
+        element.isSetter &&
+        element.hasImplicitReturnType) {
+      element.declaredReturnType = VoidTypeImpl.instance;
+    }
+  }
+
+  /**
    * Record that the static type of the given node is the given type.
    *
    * @param expression the node whose type is to be recorded
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 4ddd3d4..45c1a73 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -141,12 +141,10 @@
 
       List<ParameterElement> parameters = node.parameterElements;
       {
-        Iterator<ParameterElement> positional = parameters
-            .where((p) => p.parameterKind != ParameterKind.NAMED)
-            .iterator;
-        Iterator<ParameterElement> fnPositional = functionType.parameters
-            .where((p) => p.parameterKind != ParameterKind.NAMED)
-            .iterator;
+        Iterator<ParameterElement> positional =
+            parameters.where((p) => !p.isNamed).iterator;
+        Iterator<ParameterElement> fnPositional =
+            functionType.parameters.where((p) => !p.isNamed).iterator;
         while (positional.moveNext() && fnPositional.moveNext()) {
           inferType(positional.current, fnPositional.current.type);
         }
@@ -155,8 +153,7 @@
       {
         Map<String, DartType> namedParameterTypes =
             functionType.namedParameterTypes;
-        Iterable<ParameterElement> named =
-            parameters.where((p) => p.parameterKind == ParameterKind.NAMED);
+        Iterable<ParameterElement> named = parameters.where((p) => p.isNamed);
         for (ParameterElementImpl p in named) {
           if (!namedParameterTypes.containsKey(p.name)) {
             continue;
@@ -1657,17 +1654,6 @@
   }
 
   /**
-   * Gets the definite type of expression, which can be used in cases where
-   * the most precise type is desired, for example computing the least upper
-   * bound.
-   *
-   * See [getExpressionType] for more information. Without strong mode, this is
-   * equivalent to [_getStaticType].
-   */
-  DartType _getExpressionType(Expression expr, {bool read: false}) =>
-      getExpressionType(expr, _typeSystem, _typeProvider, read: read);
-
-  /**
    * If the given element name can be mapped to the name of a class defined within the given
    * library, return the type specified by the argument.
    *
@@ -1697,6 +1683,17 @@
   }
 
   /**
+   * Gets the definite type of expression, which can be used in cases where
+   * the most precise type is desired, for example computing the least upper
+   * bound.
+   *
+   * See [getExpressionType] for more information. Without strong mode, this is
+   * equivalent to [_getStaticType].
+   */
+  DartType _getExpressionType(Expression expr, {bool read: false}) =>
+      getExpressionType(expr, _typeSystem, _typeProvider, read: read);
+
+  /**
    * If the given argument list contains at least one argument, and if the argument is a simple
    * string literal, then parse that argument as a query string and return the type specified by the
    * argument.
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index a206cdf..c0562b4 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -21,22 +21,6 @@
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
 import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
 
-bool _isBottom(DartType t) {
-  return t.isBottom ||
-      t.isDartCoreNull ||
-      identical(t, UnknownInferredType.instance);
-}
-
-bool _isTop(DartType t) {
-  if (t.isDartAsyncFutureOr) {
-    return _isTop((t as InterfaceType).typeArguments[0]);
-  }
-  return t.isDynamic ||
-      t.isObject ||
-      t.isVoid ||
-      identical(t, UnknownInferredType.instance);
-}
-
 /**
  * `void`, `dynamic`, and `Object` are all equivalent. However, this makes
  * LUB/GLB indeterministic. Therefore, for the cases of LUB/GLB, we have some
@@ -63,6 +47,22 @@
   return -100000;
 }
 
+bool _isBottom(DartType t) {
+  return t.isBottom ||
+      t.isDartCoreNull ||
+      identical(t, UnknownInferredType.instance);
+}
+
+bool _isTop(DartType t) {
+  if (t.isDartAsyncFutureOr) {
+    return _isTop((t as InterfaceType).typeArguments[0]);
+  }
+  return t.isDynamic ||
+      t.isObject ||
+      t.isVoid ||
+      identical(t, UnknownInferredType.instance);
+}
+
 typedef bool _GuardedSubtypeChecker<T>(T t1, T t2, Set<TypeImpl> visitedTypes);
 
 /**
@@ -105,27 +105,6 @@
     return ft.parameters.any((p) => predicate(p.type));
   }
 
-  FunctionType _replaceDynamicParameters(FunctionType t, DartType replaceWith) {
-    if (!t.parameters.any((p) => p.type.isDynamic)) {
-      return t;
-    }
-    ParameterElement shave(ParameterElement p) {
-      if (p.type.isDynamic) {
-        return new ParameterElementImpl.synthetic(
-            p.name, replaceWith, p.parameterKind);
-      }
-      return p;
-    }
-
-    List<ParameterElement> parameters = t.parameters.map(shave).toList();
-    FunctionElementImpl function = new FunctionElementImpl("", -1);
-    function.isSynthetic = true;
-    function.returnType = t.returnType;
-    function.shareTypeParameters(t.typeFormals);
-    function.shareParameters(parameters);
-    return function.type = new FunctionTypeImpl(function);
-  }
-
   FunctionType functionTypeToConcreteType(FunctionType t) =>
       _replaceDynamicParameters(t, typeProvider.objectType);
 
@@ -971,6 +950,31 @@
     return guardedIsFunctionSubtype(t1, t2, visitedTypes);
   }
 
+  FunctionType _replaceDynamicParameters(FunctionType t, DartType replaceWith) {
+    if (!t.parameters.any((p) => p.type.isDynamic)) {
+      return t;
+    }
+    ParameterElement shave(ParameterElement p) {
+      if (p.type.isDynamic) {
+        return new ParameterElementImpl.synthetic(
+            // ignore: deprecated_member_use
+            p.name,
+            replaceWith,
+            // ignore: deprecated_member_use
+            p.parameterKind);
+      }
+      return p;
+    }
+
+    List<ParameterElement> parameters = t.parameters.map(shave).toList();
+    FunctionElementImpl function = new FunctionElementImpl("", -1);
+    function.isSynthetic = true;
+    function.returnType = t.returnType;
+    function.shareTypeParameters(t.typeFormals);
+    function.shareParameters(parameters);
+    return function.type = new FunctionTypeImpl(function);
+  }
+
   DartType _substituteForUnknownType(DartType type, {bool lowerBound: false}) {
     if (identical(type, UnknownInferredType.instance)) {
       if (lowerBound) {
@@ -996,7 +1000,11 @@
         var newType =
             _substituteForUnknownType(p.type, lowerBound: !lowerBound);
         return new ParameterElementImpl.synthetic(
-            p.name, newType, p.parameterKind);
+            // ignore: deprecated_member_use
+            p.name,
+            newType,
+            // ignore: deprecated_member_use
+            p.parameterKind);
       });
       // Return type is covariant.
       var newReturnType =
@@ -1112,6 +1120,11 @@
    */
   bool get isStrong;
 
+  /**
+   * The provider of types for the system
+   */
+  TypeProvider get typeProvider;
+
   List<InterfaceType> gatherMixinSupertypeConstraints(
       ClassElement mixinElement) {
     var mixinSupertypeConstraints = <InterfaceType>[];
@@ -1126,35 +1139,6 @@
     return mixinSupertypeConstraints;
   }
 
-  /// Attempts to find the appropriate substitution for [typeParameters] that can
-  /// be applied to [src] to make it equal to [dest].  If no such substitution can
-  /// be found, `null` is returned.
-  InterfaceType matchSupertypeConstraints(
-      ClassElement mixinElement, List<DartType> srcs, List<DartType> dests) {
-    var typeParameters = mixinElement.typeParameters;
-    var inferrer = new _GenericInferrer(typeProvider, this, typeParameters);
-    for (int i = 0; i < srcs.length; i++) {
-      inferrer.constrainReturnType(srcs[i], dests[i]);
-      inferrer.constrainReturnType(dests[i], srcs[i]);
-    }
-    var result = inferrer.infer(mixinElement.type, typeParameters,
-        considerExtendsClause: false);
-    for (int i = 0; i < srcs.length; i++) {
-      if (!srcs[i]
-          .substitute2(result.typeArguments, mixinElement.type.typeArguments)
-          .isEquivalentTo(dests[i])) {
-        // Failed to find an appropriate substitution
-        return null;
-      }
-    }
-    return result;
-  }
-
-  /**
-   * The provider of types for the system
-   */
-  TypeProvider get typeProvider;
-
   /**
    * Compute the least upper bound of two types.
    */
@@ -1259,6 +1243,30 @@
    */
   bool isSubtypeOf(DartType leftType, DartType rightType);
 
+  /// Attempts to find the appropriate substitution for [typeParameters] that can
+  /// be applied to [src] to make it equal to [dest].  If no such substitution can
+  /// be found, `null` is returned.
+  InterfaceType matchSupertypeConstraints(
+      ClassElement mixinElement, List<DartType> srcs, List<DartType> dests) {
+    var typeParameters = mixinElement.typeParameters;
+    var inferrer = new _GenericInferrer(typeProvider, this, typeParameters);
+    for (int i = 0; i < srcs.length; i++) {
+      inferrer.constrainReturnType(srcs[i], dests[i]);
+      inferrer.constrainReturnType(dests[i], srcs[i]);
+    }
+    var result = inferrer.infer(mixinElement.type, typeParameters,
+        considerExtendsClause: false);
+    for (int i = 0; i < srcs.length; i++) {
+      if (!srcs[i]
+          .substitute2(result.typeArguments, mixinElement.type.typeArguments)
+          .isEquivalentTo(dests[i])) {
+        // Failed to find an appropriate substitution
+        return null;
+      }
+    }
+    return result;
+  }
+
   /**
    * Searches the superinterfaces of [type] for implementations of [genericType]
    * and returns the most specific type argument used for that generic type.
diff --git a/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart b/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
index 9582f50..558aeb6 100644
--- a/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
+++ b/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
@@ -461,19 +461,13 @@
     for (var parameter in element.parameters) {
       var parameterNode = new ast.VariableDeclaration(parameter.name,
           type: buildType(parameter.type));
-      switch (parameter.parameterKind) {
-        case ParameterKind.REQUIRED:
-          positional.add(parameterNode);
-          ++requiredParameterCount;
-          break;
-
-        case ParameterKind.POSITIONAL:
-          positional.add(parameterNode);
-          break;
-
-        case ParameterKind.NAMED:
-          named.add(parameterNode);
-          break;
+      if (parameter.isNotOptional) {
+        positional.add(parameterNode);
+        ++requiredParameterCount;
+      } else if (parameter.isOptionalPositional) {
+        positional.add(parameterNode);
+      } else if (parameter.isNamed) {
+        named.add(parameterNode);
       }
     }
     var returnType = element is ConstructorElement
@@ -564,20 +558,14 @@
               : null,
           type: buildType(
               resolutionMap.elementDeclaredByFormalParameter(parameter).type));
-      switch (parameter.kind) {
-        case ParameterKind.REQUIRED:
-          positional.add(declaration);
-          ++requiredParameterCount;
-          declaration.initializer = null;
-          break;
-
-        case ParameterKind.POSITIONAL:
-          positional.add(declaration);
-          break;
-
-        case ParameterKind.NAMED:
-          named.add(declaration);
-          break;
+      if (parameter.isRequired) {
+        positional.add(declaration);
+        ++requiredParameterCount;
+        declaration.initializer = null;
+      } else if (parameter.isOptionalPositional) {
+        positional.add(declaration);
+      } else if (parameter.isNamed) {
+        named.add(declaration);
       }
     }
     int offset = formalParameters?.offset ?? body.offset;
@@ -690,34 +678,30 @@
       FunctionTypedElement target, ast.Arguments arguments) {
     var positionals = arguments.positional;
     var parameters = target.parameters;
-    const required = ParameterKind.REQUIRED; // For avoiding long lines.
-    const named = ParameterKind.NAMED;
     // If the first unprovided parameter is required, there are too few
     // positional arguments.
     if (positionals.length < parameters.length &&
-        parameters[positionals.length].parameterKind == required) {
+        parameters[positionals.length].isNotOptional) {
       return false;
     }
     // If there are more positional arguments than parameters, or if the last
     // positional argument corresponds to a named parameter, there are too many
     // positional arguments.
     if (positionals.length > parameters.length) return false;
-    if (positionals.isNotEmpty &&
-        parameters[positionals.length - 1].parameterKind == named) {
+    if (positionals.isNotEmpty && parameters[positionals.length - 1].isNamed) {
       return false; // Too many positional arguments.
     }
     if (arguments.named.isEmpty) return true;
     int firstNamedParameter = positionals.length;
     while (firstNamedParameter < parameters.length &&
-        parameters[firstNamedParameter].parameterKind != ParameterKind.NAMED) {
+        !parameters[firstNamedParameter].isNamed) {
       ++firstNamedParameter;
     }
     namedLoop:
     for (int i = 0; i < arguments.named.length; ++i) {
       String name = arguments.named[i].name;
       for (int j = firstNamedParameter; j < parameters.length; ++j) {
-        if (parameters[j].parameterKind == ParameterKind.NAMED &&
-            parameters[j].name == name) {
+        if (parameters[j].isNamed && parameters[j].name == name) {
           continue namedLoop;
         }
       }
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 759c3b4..f8e38c3 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -276,16 +276,12 @@
     TypeParameterizedElementMixin typeParameterContext) {
   UnlinkedParamBuilder b = new UnlinkedParamBuilder();
   b.name = parameter.name;
-  switch (parameter.parameterKind) {
-    case ParameterKind.REQUIRED:
-      b.kind = UnlinkedParamKind.required;
-      break;
-    case ParameterKind.POSITIONAL:
-      b.kind = UnlinkedParamKind.positional;
-      break;
-    case ParameterKind.NAMED:
-      b.kind = UnlinkedParamKind.named;
-      break;
+  if (parameter.isNotOptional) {
+    b.kind = UnlinkedParamKind.required;
+  } else if (parameter.isOptionalPositional) {
+    b.kind = UnlinkedParamKind.positional;
+  } else if (parameter.isNamed) {
+    b.kind = UnlinkedParamKind.named;
   }
   DartType type = parameter.type;
   if (!parameter.hasImplicitType) {
@@ -824,6 +820,14 @@
     return enclosingElement.enclosingElement._linker.typeProvider.objectType;
   }
 
+  InterfaceType _findInterfaceTypeForElement(
+      ClassElement element, List<InterfaceType> interfaceTypes) {
+    for (var interfaceType in interfaceTypes) {
+      if (interfaceType.element == element) return interfaceType;
+    }
+    return null;
+  }
+
   List<InterfaceType> _findInterfaceTypesForConstraints(
       List<InterfaceType> constraints, List<InterfaceType> interfaceTypes) {
     var result = <InterfaceType>[];
@@ -838,14 +842,6 @@
     }
     return result;
   }
-
-  InterfaceType _findInterfaceTypeForElement(
-      ClassElement element, List<InterfaceType> interfaceTypes) {
-    for (var interfaceType in interfaceTypes) {
-      if (interfaceType.element == element) return interfaceType;
-    }
-    return null;
-  }
 }
 
 /**
@@ -2764,7 +2760,7 @@
         int positionalIndex = 0;
         int numRequiredParameters = 0;
         for (ParameterElement parameter in rawMethodType.parameters) {
-          if (parameter.parameterKind == ParameterKind.REQUIRED) {
+          if (parameter.isNotOptional) {
             numRequiredParameters++;
             if (numRequiredParameters > numPositionalArguments) {
               return null;
@@ -2772,13 +2768,13 @@
             parameters.add(parameter);
             argumentTypes.add(positionalArgTypes[positionalIndex]);
             positionalIndex++;
-          } else if (parameter.parameterKind == ParameterKind.POSITIONAL) {
+          } else if (parameter.isOptionalPositional) {
             if (positionalIndex < numPositionalArguments) {
               parameters.add(parameter);
               argumentTypes.add(positionalArgTypes[positionalIndex]);
               positionalIndex++;
             }
-          } else if (parameter.parameterKind == ParameterKind.NAMED) {
+          } else if (parameter.isNamed) {
             DartType namedArgumentType = namedArgTypes[parameter.name];
             if (namedArgumentType != null) {
               parameters.add(parameter);
@@ -3636,9 +3632,17 @@
   String get name => _unlinkedTypedef.name;
 
   @override
+  DartType get returnType => enclosingElement.resolveTypeRef(
+      this, _unlinkedTypedef.returnType.syntheticReturnType);
+
+  @override
   TypeParameterizedElementMixin get typeParameterContext => this;
 
   @override
+  List<UnlinkedParam> get unlinkedParameters =>
+      _unlinkedTypedef.returnType.syntheticParams;
+
+  @override
   List<UnlinkedTypeParam> get unlinkedTypeParams =>
       _unlinkedTypedef.typeParameters;
 
@@ -4507,6 +4511,25 @@
   bool get isExplicitlyCovariant => _unlinkedParam.isExplicitlyCovariant;
 
   @override
+  bool get isNamed => parameterKind == ParameterKind.NAMED;
+
+  @override
+  bool get isNotOptional => parameterKind == ParameterKind.REQUIRED;
+
+  @override
+  bool get isOptional =>
+      parameterKind == ParameterKind.NAMED ||
+      parameterKind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isOptionalPositional => parameterKind == ParameterKind.POSITIONAL;
+
+  @override
+  bool get isPositional =>
+      parameterKind == ParameterKind.POSITIONAL ||
+      parameterKind == ParameterKind.REQUIRED;
+
+  @override
   String get name => _unlinkedParam.name;
 
   @override
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index 1d38fda..bf9328a 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/type.dart' show DartType;
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/public_namespace_computer.dart';
@@ -98,6 +97,10 @@
     }
   }
 
+  @override
+  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType node) =>
+      visitor.serializeGenericFunctionType(node);
+
   EntityRefBuilder serializeIdentifier(Identifier identifier) {
     EntityRefBuilder b = new EntityRefBuilder();
     if (identifier is SimpleIdentifier) {
@@ -148,10 +151,6 @@
       DartType type, Identifier name, TypeArgumentList arguments) {
     return visitor.serializeTypeName(name, arguments);
   }
-
-  @override
-  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType node) =>
-      visitor.serializeGenericFunctionType(node);
 }
 
 /**
@@ -792,6 +791,19 @@
   }
 
   /**
+   * Serialize a type name that appears in a "with" clause to an [EntityRef].
+   */
+  EntityRefBuilder serializeMixedInType(TypeAnnotation node) {
+    var builder = serializeType(node);
+    if (builder != null && builder.typeArguments.isEmpty) {
+      // Type arguments may get inferred so we need to assign a slot to hold the
+      // complete inferred mixed in type.
+      builder.refinedSlot = assignSlot();
+    }
+    return builder;
+  }
+
+  /**
    * Serialize a [FieldFormalParameter], [FunctionTypedFormalParameter], or
    * [SimpleFormalParameter] into an [UnlinkedParam].
    */
@@ -806,18 +818,15 @@
     if (_parametersMayInheritCovariance) {
       b.inheritsCovariantSlot = assignSlot();
     }
-    switch (node.kind) {
-      case ParameterKind.REQUIRED:
-        b.kind = UnlinkedParamKind.required;
-        break;
-      case ParameterKind.POSITIONAL:
-        b.kind = UnlinkedParamKind.positional;
-        break;
-      case ParameterKind.NAMED:
-        b.kind = UnlinkedParamKind.named;
-        break;
-      default:
-        throw new StateError('Unexpected parameter kind: ${node.kind}');
+    if (node.isRequired) {
+      b.kind = UnlinkedParamKind.required;
+    } else if (node.isOptionalPositional) {
+      b.kind = UnlinkedParamKind.positional;
+    } else if (node.isNamed) {
+      b.kind = UnlinkedParamKind.named;
+    } else {
+      // ignore: deprecated_member_use
+      throw new StateError('Unexpected parameter kind: ${node.kind}');
     }
     return b;
   }
@@ -870,6 +879,23 @@
    * 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(TypeAnnotation node) {
+    if (node is TypeName) {
+      return serializeTypeName(node?.name, node?.typeArguments);
+    } else if (node is GenericFunctionType) {
+      return serializeGenericFunctionType(node);
+    } else if (node != null) {
+      throw new ArgumentError('Cannot serialize a ${node.runtimeType}');
+    }
+    return null;
+  }
+
+  /**
+   * Serialize a type name (which might be defined in a nested scope, at top
+   * level within this library, or at top level within an imported library) to
+   * 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(
       Identifier identifier, TypeArgumentList typeArguments) {
     if (identifier == null) {
@@ -922,36 +948,6 @@
   }
 
   /**
-   * Serialize a type name that appears in a "with" clause to an [EntityRef].
-   */
-  EntityRefBuilder serializeMixedInType(TypeAnnotation node) {
-    var builder = serializeType(node);
-    if (builder != null && builder.typeArguments.isEmpty) {
-      // Type arguments may get inferred so we need to assign a slot to hold the
-      // complete inferred mixed in type.
-      builder.refinedSlot = assignSlot();
-    }
-    return builder;
-  }
-
-  /**
-   * Serialize a type name (which might be defined in a nested scope, at top
-   * level within this library, or at top level within an imported library) to
-   * 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(TypeAnnotation node) {
-    if (node is TypeName) {
-      return serializeTypeName(node?.name, node?.typeArguments);
-    } else if (node is GenericFunctionType) {
-      return serializeGenericFunctionType(node);
-    } else if (node != null) {
-      throw new ArgumentError('Cannot serialize a ${node.runtimeType}');
-    }
-    return null;
-  }
-
-  /**
    * Serialize the given [typeParameters] into a list of [UnlinkedTypeParam]s,
    * and also store them in [typeParameterScope].
    */
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index c95f382..95424ed 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -5135,6 +5135,13 @@
         library, unitElement.source, typeProvider, errorListener);
     unit.accept(visitor);
     //
+    // Re-write the AST to handle the optional new and const feature.
+    //
+    if (library.context.analysisOptions.previewDart2) {
+      unit.accept(new AstRewriteVisitor(library, unit.element.source,
+          typeProvider, AnalysisErrorListener.NULL_LISTENER));
+    }
+    //
     // Record outputs.
     //
     outputs[RESOLVE_TYPE_NAMES_ERRORS] =
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 8873c01..f2d1b2e 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -16,7 +16,6 @@
 import 'package:analyzer/src/generated/resolver.dart'
     show TypeProvider, InheritanceManager;
 import 'package:analyzer/src/generated/type_system.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart'
@@ -226,15 +225,14 @@
     //
     // Find the corresponding parameter.
     //
-    if (parameter.parameterKind == ParameterKind.NAMED) {
+    if (parameter.isNamed) {
       //
       // If we're looking for a named parameter, only a named parameter with
       // the same name will be matched.
       //
       return methodParameters.lastWhere(
           (ParameterElement methodParameter) =>
-              methodParameter.parameterKind == ParameterKind.NAMED &&
-              methodParameter.name == parameter.name,
+              methodParameter.isNamed && methodParameter.name == parameter.name,
           orElse: () => null);
     }
     //
@@ -243,7 +241,7 @@
     //
     if (index < methodParameters.length) {
       var matchingParameter = methodParameters[index];
-      if (matchingParameter.parameterKind != ParameterKind.NAMED) {
+      if (!matchingParameter.isNamed) {
         return matchingParameter;
       }
     }
diff --git a/pkg/analyzer/test/dart/element/builder_test.dart b/pkg/analyzer/test/dart/element/builder_test.dart
index 5e4eb01..224a4ea 100644
--- a/pkg/analyzer/test/dart/element/builder_test.dart
+++ b/pkg/analyzer/test/dart/element/builder_test.dart
@@ -20,7 +20,6 @@
 import 'package:analyzer/src/generated/testing/element_search.dart';
 import 'package:analyzer/src/generated/testing/node_search.dart';
 import 'package:analyzer/src/generated/testing/token_factory.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -292,9 +291,9 @@
     expect(variable, isNotNull);
     expect(variable.hasImplicitType, isTrue);
     expect(variable.isConst, isFalse);
-    expect(variable.isDeprecated, isFalse);
+    expect(variable.hasDeprecated, isFalse);
     expect(variable.isFinal, isFalse);
-    expect(variable.isOverride, isFalse);
+    expect(variable.hasAlwaysThrows, isFalse);
     expect(variable.isPrivate, isFalse);
     expect(variable.isPublic, isTrue);
     expect(variable.isSynthetic, isFalse);
@@ -308,9 +307,9 @@
     assertHasCodeRange(variable, 11, 5);
     expect(variable.hasImplicitType, isFalse);
     expect(variable.isConst, isFalse);
-    expect(variable.isDeprecated, isFalse);
+    expect(variable.hasDeprecated, isFalse);
     expect(variable.isFinal, isFalse);
-    expect(variable.isOverride, isFalse);
+    expect(variable.hasOverride, isFalse);
     expect(variable.isPrivate, isFalse);
     expect(variable.isPublic, isTrue);
     expect(variable.isSynthetic, isFalse);
@@ -337,10 +336,10 @@
     expect(parameter.initializer.type, isNotNull);
     expect(parameter.initializer.hasImplicitReturnType, isTrue);
     expect(parameter.isConst, isFalse);
-    expect(parameter.isDeprecated, isFalse);
+    expect(parameter.hasDeprecated, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isInitializingFormal, isFalse);
-    expect(parameter.isOverride, isFalse);
+    expect(parameter.hasOverride, isFalse);
     expect(parameter.isPrivate, isFalse);
     expect(parameter.isPublic, isTrue);
     expect(parameter.isSynthetic, isFalse);
@@ -365,10 +364,10 @@
     expect(parameter.initializer.type, isNotNull);
     expect(parameter.initializer.hasImplicitReturnType, isTrue);
     expect(parameter.isConst, isFalse);
-    expect(parameter.isDeprecated, isFalse);
+    expect(parameter.hasDeprecated, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isInitializingFormal, isFalse);
-    expect(parameter.isOverride, isFalse);
+    expect(parameter.hasOverride, isFalse);
     expect(parameter.isPrivate, isFalse);
     expect(parameter.isPublic, isTrue);
     expect(parameter.isSynthetic, isFalse);
@@ -461,7 +460,7 @@
     expect(parameter.isConst, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -485,7 +484,7 @@
     expect(parameter.isExplicitlyCovariant, isTrue);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -509,7 +508,7 @@
     expect(parameter.isConst, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     expect(typeElement.typeParameters, hasLength(1));
     _assertVisibleRange(parameter, 100, 110);
   }
@@ -575,7 +574,7 @@
     expect(parameter.isConst, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.NAMED);
+    expect(parameter.isNamed, isTrue);
     _assertVisibleRange(parameter, 100, 110);
     expect(parameter.defaultValueCode, "42");
     FunctionElement initializer = parameter.initializer;
@@ -608,7 +607,7 @@
     expect(parameter.isExplicitlyCovariant, isTrue);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.NAMED);
+    expect(parameter.isNamed, isTrue);
     _assertVisibleRange(parameter, 100, 110);
     expect(parameter.defaultValueCode, "42");
     FunctionElement initializer = parameter.initializer;
@@ -636,7 +635,7 @@
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
     expect(parameter.name, parameterName);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -662,7 +661,7 @@
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
     expect(parameter.name, parameterName);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -685,7 +684,7 @@
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
     expect(parameter.name, parameterName);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -711,7 +710,7 @@
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
     expect(parameter.name, parameterName);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     _assertVisibleRange(parameter, 100, 110);
   }
 
@@ -1840,7 +1839,7 @@
     expect(parameter.isConst, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     expect(parameter.parameters, hasLength(0));
   }
 
@@ -1864,7 +1863,7 @@
     expect(parameter.isConst, isFalse);
     expect(parameter.isFinal, isFalse);
     expect(parameter.isSynthetic, isFalse);
-    expect(parameter.parameterKind, ParameterKind.REQUIRED);
+    expect(parameter.isNotOptional, isTrue);
     expect(typeElement.parameters, hasLength(1));
   }
 
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
index 4e73768..117ae28 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
@@ -18,6 +18,18 @@
   bool get enableNewAnalysisDriver => true;
 
   @override // Passes with driver
+  test_mixinInference_doNotIgnorePreviousExplicitMixins() =>
+      super.test_mixinInference_doNotIgnorePreviousExplicitMixins();
+
+  @override // Passes with driver
+  test_mixinInference_matchingClass() =>
+      super.test_mixinInference_matchingClass();
+
+  @override // Passes with driver
+  test_mixinInference_matchingClass_inPreviousMixin() =>
+      super.test_mixinInference_matchingClass_inPreviousMixin();
+
+  @override // Passes with driver
   test_mixinInference_recursiveSubtypeCheck() =>
       super.test_mixinInference_recursiveSubtypeCheck();
 }
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 00619ba..740f671 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
@@ -131,6 +131,21 @@
 
   @override
   @failingTest
+  test_conflictingGenericInterfaces_hierarchyLoop() =>
+      super.test_conflictingGenericInterfaces_hierarchyLoop();
+
+  @override
+  @failingTest
+  test_conflictingGenericInterfaces_simple() =>
+      super.test_conflictingGenericInterfaces_simple();
+
+  @override
+  @failingTest
+  test_conflictingGenericInterfaces_viaMixin() =>
+      super.test_conflictingGenericInterfaces_viaMixin();
+
+  @override
+  @failingTest
   test_conflictingGetterAndMethod_field_method() async {
     // Expected 1 errors of type CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD, found 0
     await super.test_conflictingGetterAndMethod_field_method();
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 184d0e3..d69b4f2 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -102,6 +102,21 @@
   AnalysisOptions get defaultAnalysisOptions =>
       new AnalysisOptionsImpl()..strongMode = true;
 
+  disabled_test_conflictingGenericInterfaces_hierarchyLoop_infinite() async {
+    // There is an interface conflict here due to a loop in the class
+    // hierarchy leading to an infinite set of implemented types; this loop
+    // shouldn't cause non-termination.
+
+    // TODO(paulberry): this test is currently disabled due to non-termination
+    // bugs elsewhere in the analyzer.
+    Source source = addSource('''
+class A<T> implements B<List<T>> {}
+class B<T> implements A<List<T>> {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
+  }
+
   test_accessPrivateEnumField() async {
     Source source = addSource(r'''
 enum E { ONE }
@@ -699,6 +714,54 @@
     verify([source]);
   }
 
+  test_conflictingGenericInterfaces_hierarchyLoop() async {
+    // There is no interface conflict here, but there is a loop in the class
+    // hierarchy leading to a finite set of implemented types; this loop
+    // shouldn't cause non-termination.
+    Source source = addSource('''
+class A<T> implements B<T> {}
+class B<T> implements A<T> {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [
+      CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+      CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+    ]);
+  }
+
+  test_conflictingGenericInterfaces_noConflict() async {
+    Source source = addSource('''
+class I<T> {}
+class A implements I<int> {}
+class B implements I<int> {}
+class C extends A implements B {}
+    ''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_conflictingGenericInterfaces_simple() async {
+    Source source = addSource('''
+class I<T> {}
+class A implements I<int> {}
+class B implements I<String> {}
+class C extends A implements B {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
+  }
+
+  test_conflictingGenericInterfaces_viaMixin() async {
+    Source source = addSource('''
+class I<T> {}
+class A implements I<int> {}
+class B implements I<String> {}
+class C extends A with B {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
+  }
+
   test_conflictingGetterAndMethod_field_method() async {
     Source source = addSource(r'''
 class A {
@@ -3966,8 +4029,27 @@
 class C extends A<Map<int, String>> with M {}
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION]);
+    assertErrors(source, [
+      CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
+      CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES
+    ]);
+  }
+
+  @failingTest // Does not work with old task model
+  test_mixinInference_doNotIgnorePreviousExplicitMixins() async {
+    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+    options.enableSuperMixins = true;
+    options.strongMode = true;
+    resetWith(options: options);
+    Source source = addSource('''
+class A extends Object with B<String>, C {}
+class B<T> {}
+class C<T> extends B<T> {}
+''');
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    var mixins = analysisResult.unit.element.getType('A').mixins;
+    expect(mixins[1].toString(), 'C<String>');
   }
 
   test_mixinInference_impossibleSubstitution() async {
@@ -3981,10 +4063,13 @@
 class C extends A<List<int>> with M {}
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION]);
+    assertErrors(source, [
+      CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
+      CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES
+    ]);
   }
 
+  @failingTest // Does not work with old task model
   test_mixinInference_matchingClass() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4000,6 +4085,7 @@
     assertNoErrors(source);
   }
 
+  @failingTest // Does not work with old task model
   test_mixinInference_matchingClass_inPreviousMixin() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4044,8 +4130,10 @@
 class C extends Object with M implements A<B> {}
 ''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
+    assertErrors(source, [
+      CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS,
+      CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES
+    ]);
   }
 
   test_mixinInference_noMatchingClass_namedMixinApplication() async {
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 29f7980..14a43d8 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -314,6 +314,30 @@
     verify([source]);
   }
 
+  test_argumentTypeNotAssignable_optionalNew() async {
+    resetWith(
+        options: new AnalysisOptionsImpl()
+          ..previewDart2 = true
+          ..strongMode = true);
+    Source source = addSource(r'''
+class Widget { }
+
+class MaterialPageRoute {
+  final Widget Function() builder;
+  const MaterialPageRoute({this.builder});
+}
+
+void main() {
+  print(MaterialPageRoute(
+      builder: () { return Widget(); }
+  ));
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_argumentTypeNotAssignable_typedef_local() async {
     Source source = addSource(r'''
 typedef A(int p1, String p2);
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 5dd1085..349d2ad 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -522,8 +522,8 @@
   }
 
   @override
-  void beginVariablesDeclaration(Token token) {
-    super.beginVariablesDeclaration(token);
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {
+    super.beginVariablesDeclaration(token, varFinalOrConst);
     begin('VariablesDeclaration');
   }
 
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 5fe1d70..99ef619 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -99,11 +99,8 @@
 class ComplexParserTest_Fasta extends FastaParserTestCase
     with ComplexParserTestMixin {
   @override
-  @failingTest
   void test_assignableExpression_arguments_normal_chain_typeArgumentComments() {
-    // Fasta does not support the generic comment syntax.
-    super
-        .test_assignableExpression_arguments_normal_chain_typeArgumentComments();
+    // Ignored: Fasta does not support the generic comment syntax.
   }
 }
 
@@ -115,68 +112,6 @@
     with ErrorParserTestMixin {
   @override
   @failingTest
-  void test_duplicateLabelInSwitchStatement() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, found 0
-    super.test_duplicateLabelInSwitchStatement();
-  }
-
-  @override
-  @failingTest
-  void test_expectedClassMember_inClass_afterType() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: an object with length of <1>
-    //   Actual: <Instance of 'Stack'>
-    //   Which: has length of <2>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 2870:7                       ParserProxy._run
-    //   test/generated/parser_fasta_test.dart 2750:18                      ParserProxy.parseClassMember
-    super.test_expectedClassMember_inClass_afterType();
-  }
-
-  @override
-  @failingTest
-  void test_expectedClassMember_inClass_beforeType() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: an object with length of <1>
-    //   Actual: <Instance of 'Stack'>
-    //   Which: has length of <2>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 2870:7                       ParserProxy._run
-    //   test/generated/parser_fasta_test.dart 2750:18                      ParserProxy.parseClassMember
-    super.test_expectedClassMember_inClass_beforeType();
-  }
-
-  @override
-  @failingTest
-  void test_expectedExecutable_inClass_afterVoid() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: an object with length of <1>
-    //   Actual: <Instance of 'Stack'>
-    //   Which: has length of <2>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 2870:7                       ParserProxy._run
-    //   test/generated/parser_fasta_test.dart 2750:18                      ParserProxy.parseClassMember
-    super.test_expectedExecutable_inClass_afterVoid();
-  }
-
-  @override
-  @failingTest
-  void test_expectedExecutable_topLevel_beforeType() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: true
-    //   Actual: <false>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 2852:5                       ParserProxy.parseTopLevelDeclaration
-    super.test_expectedExecutable_topLevel_beforeType();
-  }
-
-  @override
-  @failingTest
   void test_expectedInterpolationIdentifier() {
     // TODO(brianwilkerson) Does not recover.
     //   RangeError: Value not in range: -1
@@ -240,15 +175,6 @@
 
   @override
   @failingTest
-  void test_expectedToken_parseStatement_afterVoid() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.EXPECTED_TOKEN, found 0;
-    // 1 errors of type ParserErrorCode.MISSING_IDENTIFIER, found 0
-    super.test_expectedToken_parseStatement_afterVoid();
-  }
-
-  @override
-  @failingTest
   void test_expectedToken_whileMissingInDoStatement() {
     // TODO(brianwilkerson) Does not recover.
     //   NoSuchMethodError: Class 'SimpleToken' has no instance getter 'endGroup'.
@@ -290,23 +216,6 @@
 
   @override
   @failingTest
-  void test_factoryWithInitializers() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/problems.dart 29:25                    internalProblem
-    //   package:front_end/src/fasta/problems.dart 41:10                    unhandled
-    //   package:analyzer/src/fasta/ast_builder.dart 1506:7                 AstBuilder.endFactoryMethod
-    //   test/generated/parser_fasta_listener.dart 731:14                   ForwardingTestListener.endFactoryMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2465:14             Parser.parseFactoryMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2240:15             Parser.parseMember
-    //   test/generated/parser_fasta_test.dart 3051:39                      ParserProxy._run
-    super.test_factoryWithInitializers();
-  }
-
-  @override
-  @failingTest
   void test_getterInFunction_block_noReturnType() {
     // TODO(brianwilkerson) Does not recover.
     //   type 'ExpressionStatementImpl' is not a subtype of type 'FunctionDeclarationStatement' of 'statement' where
@@ -358,30 +267,6 @@
 
   @override
   @failingTest
-  void test_illegalAssignmentToNonAssignable_superAssigned() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: true
-    //   Actual: <false>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 3157:5                       ParserProxy._run
-    super.test_illegalAssignmentToNonAssignable_superAssigned();
-  }
-
-  @override
-  @failingTest
-  void test_illegalAssignmentToNonAssignable_superAssigned_failing() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected: true
-    //   Actual: <false>
-    //
-    //   package:test                                                       expect
-    //   test/generated/parser_fasta_test.dart 3157:5                       ParserProxy._run
-    super.test_illegalAssignmentToNonAssignable_superAssigned_failing();
-  }
-
-  @override
-  @failingTest
   void test_invalidCodePoint() {
     // TODO(brianwilkerson) Does not recover.
     //   Internal problem: Compiler cannot run without a compiler context.
@@ -808,14 +693,6 @@
 
   @override
   @failingTest
-  void test_missingAssignableSelector_superPrimaryExpression() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, found 0
-    super.test_missingAssignableSelector_superPrimaryExpression();
-  }
-
-  @override
-  @failingTest
   void test_missingAssignableSelector_superPropertyAccessAssigned() {
     // TODO(brianwilkerson) Does not recover.
     //   Expected: true
@@ -922,14 +799,6 @@
 
   @override
   @failingTest
-  void test_missingStatement_afterVoid() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.MISSING_STATEMENT, found 0
-    super.test_missingStatement_afterVoid();
-  }
-
-  @override
-  @failingTest
   void test_missingVariableInForEach() {
     // TODO(brianwilkerson) Does not recover.
     //   type 'BinaryExpressionImpl' is not a subtype of type 'VariableDeclarationStatement' in type cast where
@@ -1467,8 +1336,10 @@
 
   @override
   Expression parseExpression(String source,
-      {List<ErrorCode> codes, List<ExpectedError> errors}) {
-    createParser(source);
+      {List<ErrorCode> codes,
+      List<ExpectedError> errors,
+      int expectedEndOffset}) {
+    createParser(source, expectedEndOffset: expectedEndOffset);
     Expression result = _parserProxy.parseExpression2();
     assertErrors(codes: codes, errors: errors);
     return result;
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 92e1c59..bbf84c6 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -159,7 +159,9 @@
   BinaryExpression parseEqualityExpression(String code);
 
   Expression parseExpression(String source,
-      {List<ErrorCode> codes, List<ExpectedError> errors});
+      {List<ErrorCode> codes,
+      List<ExpectedError> errors,
+      int expectedEndOffset});
 
   List<Expression> parseExpressionList(String code);
 
@@ -2584,23 +2586,6 @@
     listener.assertErrors([expectedError(ParserErrorCode.CONST_METHOD, 0, 5)]);
   }
 
-  void test_constructorWithReturnType() {
-    createParser('C C() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, 0, 1)]);
-  }
-
-  void test_constructorWithReturnType_var() {
-    createParser('var C() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(usingFastaParser
-        ? [expectedError(ParserErrorCode.VAR_RETURN_TYPE, 0, 3)]
-        : [expectedError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, 0, 3)]);
-  }
-
   void test_constructorPartial() {
     createParser('class C { C< }');
     parser.parseCompilationUnit2();
@@ -2619,6 +2604,23 @@
           ]);
   }
 
+  void test_constructorWithReturnType() {
+    createParser('C C() {}');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors(
+        [expectedError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, 0, 1)]);
+  }
+
+  void test_constructorWithReturnType_var() {
+    createParser('var C() {}');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.VAR_RETURN_TYPE, 0, 3)]
+        : [expectedError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, 0, 3)]);
+  }
+
   void test_constTypedef() {
     parseCompilationUnit("const typedef F();",
         errors: [expectedError(ParserErrorCode.CONST_TYPEDEF, 0, 5)]);
@@ -2942,19 +2944,41 @@
   }
 
   void test_expectedClassMember_inClass_afterType() {
-    createParser('heart 2 heart');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 0, 5)]);
+    parseCompilationUnit('class C{ heart 2 heart }',
+        errors: usingFastaParser
+            ? [
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 9, 5),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 15, 1),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 17, 5),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 23, 1)
+              ]
+            : [
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 15, 1),
+                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 23, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 23, 1)
+              ]);
   }
 
   void test_expectedClassMember_inClass_beforeType() {
-    createParser('4 score');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 0, 1)]);
+    parseCompilationUnit('class C { 4 score }',
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 10, 1),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 12, 5),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 1)
+              ]
+            : [
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 10, 1),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 10, 1),
+                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 18, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 1)
+              ]);
   }
 
   void test_expectedExecutable_afterAnnotation_atEOF() {
@@ -2965,11 +2989,21 @@
   }
 
   void test_expectedExecutable_inClass_afterVoid() {
-    createParser('void 2 void');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1)]);
+    parseCompilationUnit('class C { void 2 void }',
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 15, 1),
+                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 22, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 22, 1)
+              ]
+            : [
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 15, 1),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 15, 1),
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 22, 1),
+              ]);
   }
 
   void test_expectedExecutable_topLevel_afterType() {
@@ -3013,11 +3047,19 @@
   }
 
   void test_expectedExecutable_topLevel_beforeType() {
-    createParser('4 score');
-    CompilationUnitMember member = parseFullCompilationUnitMember();
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1)]);
+    parseCompilationUnit('4 score',
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 2, 5),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 0),
+              ]
+            : [
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 0, 1),
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 2, 5),
+              ]);
   }
 
   void test_expectedExecutable_topLevel_eof() {
@@ -3087,11 +3129,16 @@
   }
 
   void test_expectedToken_parseStatement_afterVoid() {
-    parseStatement("void}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
-      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1)
-    ]);
+    parseStatement("void}", expectedEndOffset: 4);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.MISSING_STATEMENT, 0, 4),
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1)
+          ]
+        : [
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
+            expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1)
+          ]);
   }
 
   void test_expectedToken_semicolonMissingAfterExport() {
@@ -3160,6 +3207,7 @@
 
   void test_expectedTypeName_as_void() {
     parseExpression("x as void)",
+        expectedEndOffset: 9,
         errors: [expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 5, 4)]);
   }
 
@@ -3170,6 +3218,7 @@
 
   void test_expectedTypeName_is_void() {
     parseExpression("x is void)",
+        expectedEndOffset: 9,
         errors: [expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 4, 4)]);
   }
 
@@ -3435,11 +3484,12 @@
   }
 
   void test_factoryWithInitializers() {
-    createParser('factory C() : x = 3 {}');
+    createParser('factory C() : x = 3 {}', expectedEndOffset: 12);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.FACTORY_WITH_INITIALIZERS, 12, 1)]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 12, 1)]
+        : [expectedError(ParserErrorCode.FACTORY_WITH_INITIALIZERS, 12, 1)]);
   }
 
   void test_factoryWithoutBody() {
@@ -3692,27 +3742,19 @@
   }
 
   void test_illegalAssignmentToNonAssignable_superAssigned() {
-    // TODO(brianwilkerson) When the test
-    // test_illegalAssignmentToNonAssignable_superAssigned_failing starts to pass,
-    // remove this test (there should only be one error generated, but we're
-    // keeping this test until that time so that we can catch other forms of
-    // regressions).
-    parseExpression("super = x;", codes: [
-      ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
-      ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
-    ]);
-  }
-
-  @failingTest
-  void test_illegalAssignmentToNonAssignable_superAssigned_failing() {
     // TODO(brianwilkerson) When this test starts to pass, remove the test
     // test_illegalAssignmentToNonAssignable_superAssigned.
-    parseExpression("super = x;",
-//        codes: [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE],
-        errors: [
-          expectedError(
-              ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 6, 1)
-        ]);
+    parseStatement("super = x;");
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(
+                ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 0, 5)
+          ]
+        : [
+            expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 6, 1),
+            expectedError(
+                ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 6, 1)
+          ]);
   }
 
   void test_implementsBeforeExtends() {
@@ -4163,10 +4205,13 @@
   }
 
   void test_missingAssignableSelector_superPrimaryExpression() {
-    Expression expression = parseExpression('super', errors: [
-      expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 5, 0)
+    CompilationUnit unit = parseCompilationUnit('main() {super;}', errors: [
+      expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 8, 5)
     ]);
-    expectNotNullIfNoErrors(expression);
+    FunctionDeclaration declaration = unit.declarations.first;
+    BlockFunctionBody blockBody = declaration.functionExpression.body;
+    ExpressionStatement statement = (blockBody).block.statements.first;
+    Expression expression = (statement).expression;
     expect(expression, new isInstanceOf<SuperExpression>());
     SuperExpression superExpression = expression;
     expect(superExpression.superKeyword, isNotNull);
@@ -4534,6 +4579,7 @@
     listener.assertErrors(usingFastaParser
         ? [
             expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 2),
+            expectedError(ParserErrorCode.MISSING_STATEMENT, 0, 2),
             expectedError(ParserErrorCode.EXPECTED_TOKEN, 2, 0)
           ]
         : [expectedError(ParserErrorCode.MISSING_STATEMENT, 2, 0)]);
@@ -4542,7 +4588,7 @@
   void test_missingStatement_afterVoid() {
     parseStatement("void;");
     listener
-        .assertErrors([expectedError(ParserErrorCode.MISSING_STATEMENT, 4, 1)]);
+        .assertErrors([expectedError(ParserErrorCode.MISSING_STATEMENT, 0, 4)]);
   }
 
   void test_missingTerminatorForParameterGroup_named() {
@@ -4693,8 +4739,8 @@
     expectNotNullIfNoErrors(list);
     listener.assertErrors(
         [expectedError(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, 6, 1)]);
-    expect(list.parameters[0].kind, ParameterKind.REQUIRED);
-    expect(list.parameters[1].kind, ParameterKind.NAMED);
+    expect(list.parameters[0].isRequired, isTrue);
+    expect(list.parameters[1].isNamed, isTrue);
   }
 
   void test_nonConstructorFactory_field() {
@@ -4832,9 +4878,12 @@
             expectedError(
                 ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, 4, 1)
           ]);
-    expect(list.parameters[0].kind, ParameterKind.REQUIRED);
-    expect(list.parameters[1].kind,
-        usingFastaParser ? ParameterKind.NAMED : ParameterKind.POSITIONAL);
+    expect(list.parameters[0].isRequired, isTrue);
+    if (usingFastaParser) {
+      expect(list.parameters[1].isNamed, isTrue);
+    } else {
+      expect(list.parameters[1].isOptionalPositional, isTrue);
+    }
   }
 
   void test_redirectingConstructorWithBody_named() {
@@ -8263,10 +8312,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_covariant_final_normal() {
@@ -8280,7 +8329,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_covariant_final_positional() {
@@ -8297,10 +8346,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_covariant_final_type_named() {
@@ -8317,10 +8366,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_covariant_final_type_normal() {
@@ -8335,7 +8384,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_covariant_final_type_positional() {
@@ -8352,10 +8401,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_covariant_type_function() {
@@ -8370,7 +8419,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_covariant_type_named() {
@@ -8387,10 +8436,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_covariant_type_normal() {
@@ -8405,7 +8454,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_covariant_type_positional() {
@@ -8422,10 +8471,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_covariant_var_named() {
@@ -8442,10 +8491,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_covariant_var_normal() {
@@ -8459,7 +8508,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_covariant_var_positional() {
@@ -8476,10 +8525,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_final_named() {
@@ -8495,10 +8544,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_final_normal() {
@@ -8512,7 +8561,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_final_positional() {
@@ -8528,10 +8577,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_final_type_named() {
@@ -8547,10 +8596,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_final_type_normal() {
@@ -8564,7 +8613,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_final_type_positional() {
@@ -8580,10 +8629,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_type_function() {
@@ -8598,7 +8647,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_type_named() {
@@ -8614,10 +8663,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_type_named_noDefault() {
@@ -8633,10 +8682,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNull);
     expect(defaultParameter.defaultValue, isNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_type_normal() {
@@ -8650,7 +8699,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_type_positional() {
@@ -8666,10 +8715,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_type_positional_noDefault() {
@@ -8685,10 +8734,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNull);
     expect(defaultParameter.defaultValue, isNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameter_var_named() {
@@ -8704,10 +8753,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseFormalParameter_var_normal() {
@@ -8721,7 +8770,7 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isRequired, isTrue);
   }
 
   void test_parseFormalParameter_var_positional() {
@@ -8737,10 +8786,10 @@
     expect(simpleParameter.identifier, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.kind, kind);
+    expect(simpleParameter.isOptionalPositional, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isOptionalPositional, isTrue);
   }
 
   void test_parseFormalParameterList_empty() {
@@ -9121,10 +9170,10 @@
     expect(functionParameter.identifier, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
-    expect(functionParameter.kind, kind);
+    expect(functionParameter.isNamed, isTrue);
     expect(defaultParameter.separator, isNotNull);
     expect(defaultParameter.defaultValue, isNotNull);
-    expect(defaultParameter.kind, kind);
+    expect(defaultParameter.isNamed, isTrue);
   }
 
   void test_parseNormalFormalParameter_function_noType() {
@@ -9669,8 +9718,10 @@
    * matches the list. Otherwise, assert that there are no errors.
    */
   Expression parseExpression(String source,
-      {List<ErrorCode> codes, List<ExpectedError> errors}) {
-    createParser(source);
+      {List<ErrorCode> codes,
+      List<ExpectedError> errors,
+      int expectedEndOffset}) {
+    createParser(source, expectedEndOffset: expectedEndOffset);
     Expression expression = parser.parseExpression2();
     expectNotNullIfNoErrors(expression);
     if (codes != null) {
@@ -11477,9 +11528,9 @@
     MethodDeclaration method = classA.members[0];
     NodeList<FormalParameter> parameters = method.parameters.parameters;
     expect(parameters, hasLength(3));
-    expect(parameters[0].kind, ParameterKind.NAMED);
-    expect(parameters[1].kind, ParameterKind.NAMED);
-    expect(parameters[2].kind, ParameterKind.REQUIRED);
+    expect(parameters[0].isNamed, isTrue);
+    expect(parameters[1].isNamed, isTrue);
+    expect(parameters[2].isRequired, isTrue);
   }
 
   void test_nonStringLiteralUri_import() {
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index 6842666..a324452 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -1627,6 +1627,7 @@
     for (FormalParameter parameter in parameters.parameters) {
       ParameterElementImpl element =
           new ParameterElementImpl.forNode(parameter.identifier);
+      // ignore: deprecated_member_use
       element.parameterKind = parameter.kind;
       element.type = _typeProvider.dynamicType;
       parameter.identifier.staticElement = element;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 3af39cd..d258087 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -5704,6 +5704,7 @@
     expect(type, isNotNull);
     expect(element.name, name);
     expect(element.nameOffset, offset);
+    // ignore: deprecated_member_use
     expect(element.parameterKind, kind);
     expect(element.type, type);
   }
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
index bf5cf49..723f7e9 100644
--- a/pkg/analyzer/test/src/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -462,18 +462,60 @@
     testUnit = await resolveSource2('/test.dart', source);
   }
 
-  void test_isConst_implicit_notInContext_nonConstConstructor() async {
+  void test_isConst_notInContext_constructor_const_generic_named() async {
     enablePreviewDart2();
     await resolve('''
-f() => <Object>[C()];
-class C {
-  C();
+f() => <Object>[C<int>.n()];
+class C<E> {
+  const C.n();
 }
 ''');
-    assertInContext("C()", false);
+    assertInContext("C<int>.n", true);
   }
 
-  void test_isConst_implicit_notInContext_nonConstParam_implicitNew() async {
+  void
+      test_isConst_notInContext_constructor_const_generic_named_prefixed() async {
+    enablePreviewDart2();
+    addNamedSource('/c.dart', '''
+class C<E> {
+  const C.n();
+}
+''');
+    await resolve('''
+import 'c.dart' as p;
+f() => <Object>[p.C<int>.n()];
+''');
+    assertInContext("C<int>", true);
+  }
+
+  void test_isConst_notInContext_constructor_const_generic_unnamed() async {
+    enablePreviewDart2();
+    await resolve('''
+f() => <Object>[C<int>()];
+class C<E> {
+  const C();
+}
+''');
+    assertInContext("C<int>", true);
+  }
+
+  void
+      test_isConst_notInContext_constructor_const_generic_unnamed_prefixed() async {
+    enablePreviewDart2();
+    addNamedSource('/c.dart', '''
+class C<E> {
+  const C();
+}
+''');
+    await resolve('''
+import 'c.dart' as p;
+f() => <Object>[p.C<int>()];
+''');
+    assertInContext("C<int>", true);
+  }
+
+  void
+      test_isConst_notInContext_constructor_const_nonConstParam_constructor() async {
     enablePreviewDart2();
     await resolve('''
 f() {
@@ -491,7 +533,8 @@
     assertInContext("B())", false);
   }
 
-  void test_isConst_implicit_notInContext_nonConstParam_int() async {
+  void
+      test_isConst_notInContext_constructor_const_nonConstParam_variable() async {
     enablePreviewDart2();
     await resolve('''
 f(int i) => <Object>[C(i)];
@@ -503,7 +546,33 @@
     assertInContext("C(i)", false);
   }
 
-  void test_isConst_notExplicit_notInContext() async {
+  void test_isConst_notInContext_constructor_const_nonGeneric_named() async {
+    enablePreviewDart2();
+    await resolve('''
+f() => <Object>[C.n()];
+class C<E> {
+  const C.n();
+}
+''');
+    assertInContext("C.n()", true);
+  }
+
+  void
+      test_isConst_notInContext_constructor_const_nonGeneric_named_prefixed() async {
+    enablePreviewDart2();
+    addNamedSource('/c.dart', '''
+class C {
+  const C.n();
+}
+''');
+    await resolve('''
+import 'c.dart' as p;
+f() => <Object>[p.C.n()];
+''');
+    assertInContext("C.n()", true);
+  }
+
+  void test_isConst_notInContext_constructor_const_nonGeneric_unnamed() async {
     enablePreviewDart2();
     await resolve('''
 f() => <Object>[C()];
@@ -513,6 +582,32 @@
 ''');
     assertInContext("C()", true);
   }
+
+  void
+      test_isConst_notInContext_constructor_const_nonGeneric_unnamed_prefixed() async {
+    enablePreviewDart2();
+    addNamedSource('/c.dart', '''
+class C {
+  const C();
+}
+''');
+    await resolve('''
+import 'c.dart' as p;
+f() => <Object>[p.C()];
+''');
+    assertInContext("C()", true);
+  }
+
+  void test_isConst_notInContext_constructor_nonConst() async {
+    enablePreviewDart2();
+    await resolve('''
+f() => <Object>[C()];
+class C {
+  C();
+}
+''');
+    assertInContext("C()", false);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 9d385d5..3100d6f 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -64,7 +64,7 @@
     // A
     {
       ClassElement elementA = unitElement.getType("A");
-      expect(elementA.isDeprecated, isFalse);
+      expect(elementA.hasDeprecated, isFalse);
       expect(elementA.isEnum, isFalse);
       ClassDeclaration nodeA = elementA.computeNode();
       expect(nodeA, isNotNull);
@@ -74,7 +74,7 @@
     // B
     {
       ClassElement elementB = unitElement.getType("B");
-      expect(elementB.isDeprecated, isTrue);
+      expect(elementB.hasDeprecated, isTrue);
       expect(elementB.isEnum, isFalse);
       ClassDeclaration nodeB = elementB.computeNode();
       expect(nodeB, isNotNull);
@@ -84,7 +84,7 @@
     // C
     {
       ClassElement elementC = unitElement.getEnum("C");
-      expect(elementC.isDeprecated, isFalse);
+      expect(elementC.hasDeprecated, isFalse);
       expect(elementC.isEnum, isTrue);
       EnumDeclaration nodeC = elementC.computeNode();
       expect(nodeC, isNotNull);
@@ -94,7 +94,7 @@
     // D
     {
       ClassElement elementD = unitElement.getEnum("D");
-      expect(elementD.isDeprecated, isTrue);
+      expect(elementD.hasDeprecated, isTrue);
       expect(elementD.isEnum, isTrue);
       EnumDeclaration nodeC = elementD.computeNode();
       expect(nodeC, isNotNull);
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 903fd18..e60f932 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:test/test.dart';
 
@@ -619,21 +618,20 @@
     String defaultValueSeparator;
     Expression defaultValue;
     String closeString;
-    ParameterKind kind = e.parameterKind;
-    if (kind == ParameterKind.REQUIRED) {
+    if (e.isNotOptional) {
       closeString = '';
-    } else if (kind == ParameterKind.POSITIONAL) {
+    } else if (e.isOptionalPositional) {
       buffer.write('[');
       defaultValueSeparator = ' = ';
       defaultValue = (e as ConstVariableElement).constantInitializer;
       closeString = ']';
-    } else if (kind == ParameterKind.NAMED) {
+    } else if (e.isNamed) {
       buffer.write('{');
       defaultValueSeparator = ': ';
       defaultValue = (e as ConstVariableElement).constantInitializer;
       closeString = '}';
     } else {
-      fail('Unknown parameter kind: $kind');
+      fail('Unknown parameter kind');
     }
 
     // Kernel desugars omitted default parameter values to 'null'.
diff --git a/pkg/analyzer/test/src/summary/linker_test.dart b/pkg/analyzer/test/src/summary/linker_test.dart
index f01caa2..6d5ba24 100644
--- a/pkg/analyzer/test/src/summary/linker_test.dart
+++ b/pkg/analyzer/test/src/summary/linker_test.dart
@@ -276,6 +276,30 @@
     expect(bundle.unlinkedUnits[0].references[typeRef.reference].name, 'int');
   }
 
+  void test_genericTypeAlias_fromBundle() {
+    var bundle = createPackageBundle('''
+typedef F<S> = S Function(num);
+''', path: '/a.dart');
+    addBundle('/a.ds', bundle);
+
+    createLinker('''
+import 'a.dart';
+class A {
+  F<int> f;
+}
+class B implements A {
+  F<int> f;
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+
+    ClassElementForLink_Class B = library.getContainedName('B');
+    expect(B.fields, hasLength(1));
+    FieldElementForLink f = B.fields[0];
+    expect(f.type.toString(), '(num) → int');
+  }
+
   void test_getContainedName_nonStaticField() {
     createLinker('class C { var f; }');
     LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 84a0684..f47ce77 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -965,6 +965,7 @@
     compareVariableElements(resynthesized, original, desc);
     compareParameterElementLists(
         resynthesized.parameters, original.parameters, desc);
+    // ignore: deprecated_member_use
     expect(resynthesized.parameterKind, original.parameterKind, reason: desc);
     expect(resynthesized.isInitializingFormal, original.isInitializingFormal,
         reason: desc);
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index ec7c82a..869f387 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -2807,10 +2807,12 @@
 }
 
 abstract class D extends Object with M<num> {}
-class E extends D with M<int> {
+/*error:CONFLICTING_GENERIC_INTERFACES*/
+/*error:CONFLICTING_GENERIC_INTERFACES*/class E extends D with M<int> {
   /*error:INVALID_METHOD_OVERRIDE*/int x;
 }
-class F extends D with M<int> {
+/*error:CONFLICTING_GENERIC_INTERFACES*/
+/*error:CONFLICTING_GENERIC_INTERFACES*/class F extends D with M<int> {
   num x;
 }
     ''');
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index b4a13f5..fc289ee 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -24,9 +24,11 @@
 import 'package:analyzer/src/summary/summarize_ast.dart';
 import 'package:analyzer/src/summary/summarize_elements.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
+import 'package:analyzer_cli/src/context_cache.dart';
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/error_formatter.dart';
 import 'package:analyzer_cli/src/error_severity.dart';
+import 'package:analyzer_cli/src/has_context_mixin.dart';
 import 'package:analyzer_cli/src/options.dart';
 import 'package:bazel_worker/bazel_worker.dart';
 import 'package:collection/collection.dart';
@@ -70,8 +72,12 @@
     var packageBundleProvider =
         new WorkerPackageBundleProvider(packageBundleCache, inputs);
     var buildMode = new BuildMode(
-        resourceProvider, options, new AnalysisStats(),
-        logger: logger, packageBundleProvider: packageBundleProvider);
+        resourceProvider,
+        options,
+        new AnalysisStats(),
+        new ContextCache(resourceProvider, options, Driver.verbosePrint),
+        logger: logger,
+        packageBundleProvider: packageBundleProvider);
     await buildMode.analyze();
     AnalysisEngine.instance.clearCaches();
   }
@@ -149,13 +155,15 @@
 /**
  * Analyzer used when the "--build-mode" option is supplied.
  */
-class BuildMode {
+class BuildMode extends Object with HasContextMixin {
   final ResourceProvider resourceProvider;
   final CommandLineOptions options;
   final AnalysisStats stats;
   final PerformanceLog logger;
   final PackageBundleProvider packageBundleProvider;
 
+  final ContextCache contextCache;
+
   SummaryDataStore summaryDataStore;
   AnalysisOptions analysisOptions;
   Map<Uri, File> uriToFileMap;
@@ -168,7 +176,7 @@
   final Set<Source> processedSources = new Set<Source>();
   final Map<String, UnlinkedUnit> uriToUnit = <String, UnlinkedUnit>{};
 
-  BuildMode(this.resourceProvider, this.options, this.stats,
+  BuildMode(this.resourceProvider, this.options, this.stats, this.contextCache,
       {PerformanceLog logger, PackageBundleProvider packageBundleProvider})
       : logger = logger ?? new PerformanceLog(null),
         packageBundleProvider = packageBundleProvider ??
@@ -376,8 +384,7 @@
             resourceProvider.getFolder(options.dartSdkPath),
             options.strongMode);
         dartSdk.analysisOptions =
-            Driver.createAnalysisOptionsForCommandLineOptions(
-                resourceProvider, options, rootPath);
+            createAnalysisOptionsForCommandLineOptions(options, rootPath);
         dartSdk.useSummary = !options.buildSummaryOnly;
         sdk = dartSdk;
         sdkBundle = dartSdk.getSummarySdkBundle(options.strongMode);
@@ -393,8 +400,8 @@
       new ExplicitSourceResolver(uriToFileMap)
     ]);
 
-    analysisOptions = Driver.createAnalysisOptionsForCommandLineOptions(
-        resourceProvider, options, rootPath);
+    analysisOptions =
+        createAnalysisOptionsForCommandLineOptions(options, rootPath);
 
     AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger);
     analysisDriver = new AnalysisDriver(
diff --git a/pkg/analyzer_cli/lib/src/context_cache.dart b/pkg/analyzer_cli/lib/src/context_cache.dart
new file mode 100644
index 0000000..578293c
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/context_cache.dart
@@ -0,0 +1,121 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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/file_system/file_system.dart';
+import 'package:analyzer/src/context/builder.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer_cli/src/options.dart';
+import 'package:path/path.dart' as path;
+
+/// Cache of [AnalysisOptionsImpl] objects that correspond to directories
+/// with analyzed files, used to reduce searching for `analysis_options.yaml`
+/// files.
+class ContextCache {
+  final ResourceProvider resourceProvider;
+  final CommandLineOptions clOptions;
+  final void Function(String) verbosePrint;
+
+  /// A mapping from normalized paths (currently, directories) to cache entries
+  /// which include builder, analysis_options paths, and [AnalysisOptionImpl]s.
+  Map<String, ContextCacheEntry> _byDirectory = {};
+
+  ContextCache(this.resourceProvider, this.clOptions, this.verbosePrint);
+
+  /// Look up info about a context from the cache. You can pass in any [path],
+  /// and it will try to provide an existing [ContextCacheEntry] that is
+  /// suitable for that [path] if one exists.
+  ContextCacheEntry forSource(String path) {
+    path = _normalizeSourcePath(path);
+    return _byDirectory.putIfAbsent(path, () {
+      final builder = new ContextBuilder(resourceProvider, null, null,
+          options: clOptions.contextBuilderOptions);
+      return new ContextCacheEntry(builder, path, clOptions, verbosePrint);
+    });
+  }
+
+  /// Cheaply normalize source paths so we can increase cache performance.
+  /// Getting the location of an analysis_options.yaml file for a given source
+  /// can be expensive, so we want to reduce extra lookups where possible. We
+  /// know that two files in the same directory share an analysis options file,
+  /// so that's the normalization we perform currently. However, this could be
+  /// any form of performance-increasing cache key normalization.
+  String _normalizeSourcePath(String sourcePath) {
+    if (!resourceProvider.pathContext.isAbsolute(sourcePath)) {
+      // TODO(mfairhurst) Use resourceProvider.pathContext.absolute(). For the
+      // moment, we get an issues where pathContext.current is `.`, which causes
+      // pathContext.absolute() to produce `./foo` instead of `/absolute/foo`.
+      sourcePath = path.absolute(sourcePath);
+    }
+
+    sourcePath = resourceProvider.pathContext.normalize(sourcePath);
+
+    // Prepare the directory which is, or contains, the context root.
+    if (resourceProvider.getFolder(sourcePath).exists) {
+      return sourcePath;
+    }
+
+    return resourceProvider.pathContext.dirname(sourcePath);
+  }
+}
+
+/// Each entry of the [ContextCache] caches three things: the [ContextBuilder],
+/// the analysis_options.yaml path of the context, and the [AnalysisOptionsImpl]
+/// of the context.
+class ContextCacheEntry {
+  final CommandLineOptions clOptions;
+  final ContextBuilder builder;
+  final String requestedSourceDirectory;
+  final void Function(String) verbosePrint;
+
+  AnalysisOptionsImpl _analysisOptions;
+  String _analysisRoot;
+
+  ContextCacheEntry(this.builder, this.requestedSourceDirectory, this.clOptions,
+      this.verbosePrint);
+
+  /// Get the fully parsed [AnalysisOptionsImpl] for this entry.
+  AnalysisOptionsImpl get analysisOptions =>
+      _analysisOptions ??= _getAnalysisOptions();
+
+  /// Find the root path from which excludes should be considered due to where
+  /// the analysis_options.yaml was defined.
+  String get analysisRoot => _analysisRoot ??= _getAnalysisRoot();
+
+  /// The actual calculation to get the [AnalysisOptionsImpl], with no caching.
+  /// This should not be used except behind the getter which caches this result
+  /// automatically.
+  AnalysisOptions _getAnalysisOptions() {
+    AnalysisOptionsImpl contextOptions = builder.getAnalysisOptions(
+        requestedSourceDirectory,
+        verbosePrint: clOptions.verbose ? verbosePrint : null);
+
+    contextOptions.trackCacheDependencies = false;
+    contextOptions.disableCacheFlushing = clOptions.disableCacheFlushing;
+    contextOptions.hint = !clOptions.disableHints;
+    contextOptions.generateImplicitErrors = clOptions.showPackageWarnings;
+    contextOptions.generateSdkErrors = clOptions.showSdkWarnings;
+    contextOptions.previewDart2 = clOptions.previewDart2;
+    if (clOptions.useCFE) {
+      contextOptions.useFastaParser = true;
+    }
+
+    return contextOptions;
+  }
+
+  /// The actual calculation to get the analysis root, with no caching. This
+  /// should not be used except behind the getter which caches this result
+  /// automatically.
+  String _getAnalysisRoot() {
+    // The analysis yaml defines the root, if it exists.
+    var analysisOptionsPath = builder
+        .getOptionsFile(requestedSourceDirectory, forceSearch: true)
+        ?.path;
+
+    if (analysisOptionsPath == null) {
+      return requestedSourceDirectory;
+    }
+
+    return path.dirname(analysisOptionsPath);
+  }
+}
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index ef33b5b..59ad0f0 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/plugin/resolver_provider.dart';
 import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/source/path_filter.dart';
 import 'package:analyzer/source/pub_package_map_provider.dart';
 import 'package:analyzer/source/sdk_ext.dart';
 import 'package:analyzer/src/context/builder.dart';
@@ -36,8 +37,10 @@
 import 'package:analyzer_cli/src/analyzer_impl.dart';
 import 'package:analyzer_cli/src/batch_mode.dart';
 import 'package:analyzer_cli/src/build_mode.dart';
+import 'package:analyzer_cli/src/context_cache.dart';
 import 'package:analyzer_cli/src/error_formatter.dart';
 import 'package:analyzer_cli/src/error_severity.dart';
+import 'package:analyzer_cli/src/has_context_mixin.dart';
 import 'package:analyzer_cli/src/options.dart';
 import 'package:analyzer_cli/src/perf_report.dart';
 import 'package:analyzer_cli/starter.dart' show CommandLineStarter;
@@ -90,17 +93,14 @@
   _analytics = replacementAnalytics;
 }
 
-class Driver implements CommandLineStarter {
+class Driver extends Object with HasContextMixin implements CommandLineStarter {
   static final PerformanceTag _analyzeAllTag =
       new PerformanceTag("Driver._analyzeAll");
 
-  /// Cache of [AnalysisOptionsImpl] objects that correspond to directories
-  /// with analyzed files, used to reduce searching for `analysis_options.yaml`
-  /// files.
-  static Map<String, AnalysisOptionsImpl> _directoryToAnalysisOptions = {};
-
   static ByteStore analysisDriverMemoryByteStore = new MemoryByteStore();
 
+  ContextCache contextCache;
+
   /// The plugins that are defined outside the `analyzer_cli` package.
   List<Plugin> _userDefinedPlugins = <Plugin>[];
 
@@ -134,6 +134,9 @@
 
   CrashReportSender _crashReportSender;
 
+  /// The [PathFilter] for excluded files with wildcards, etc.
+  PathFilter pathFilter;
+
   /// Create a new Driver instance.
   ///
   /// [isTesting] is true if we're running in a test environment.
@@ -442,7 +445,9 @@
             .run();
         return ErrorSeverity.NONE;
       } else {
-        return await new BuildMode(resourceProvider, options, stats).analyze();
+        return await new BuildMode(resourceProvider, options, stats,
+                new ContextCache(resourceProvider, options, verbosePrint))
+            .analyze();
       }
     } finally {
       previous.makeCurrent();
@@ -580,23 +585,9 @@
   /// Collect all analyzable files at [filePath], recursively if it's a
   /// directory, ignoring links.
   Iterable<io.File> _collectFiles(String filePath, AnalysisOptions options) {
-    List<String> excludedPaths = options.excludePatterns;
-
-    /**
-     * Returns `true` if the given [path] is excluded by [excludedPaths].
-     */
-    bool _isExcluded(String path) {
-      return excludedPaths.any((excludedPath) {
-        if (resourceProvider.absolutePathContext.isWithin(excludedPath, path)) {
-          return true;
-        }
-        return path == excludedPath;
-      });
-    }
-
     List<io.File> files = <io.File>[];
     io.File file = new io.File(filePath);
-    if (file.existsSync() && !_isExcluded(filePath)) {
+    if (file.existsSync() && !pathFilter.ignored(filePath)) {
       files.add(file);
     } else {
       io.Directory directory = new io.Directory(filePath);
@@ -605,7 +596,7 @@
             in directory.listSync(recursive: true, followLinks: false)) {
           String relative = path.relative(entry.path, from: directory.path);
           if (AnalysisEngine.isDartFileName(entry.path) &&
-              !_isExcluded(relative) &&
+              !pathFilter.ignored(entry.path) &&
               !_isInHiddenDir(relative)) {
             files.add(entry);
           }
@@ -639,17 +630,20 @@
     // If not the same command-line options, clear cached information.
     if (!_equalCommandLineOptions(_previousOptions, options)) {
       _previousOptions = options;
-      _directoryToAnalysisOptions.clear();
+      contextCache = new ContextCache(resourceProvider, options, verbosePrint);
       _context = null;
       analysisDriver = null;
     }
 
     AnalysisOptionsImpl analysisOptions =
-        createAnalysisOptionsForCommandLineOptions(
-            resourceProvider, options, source);
+        createAnalysisOptionsForCommandLineOptions(options, source);
     analysisOptions.analyzeFunctionBodiesPredicate =
         _chooseDietParsingPolicy(options);
 
+    // Store the [PathFilter] for this context to properly exclude files
+    pathFilter = new PathFilter(getContextInfo(options, source).analysisRoot,
+        analysisOptions.excludePatterns);
+
     // If we have the analysis driver, and the new analysis options are the
     // same, we can reuse this analysis driver.
     if (_context != null &&
@@ -891,68 +885,6 @@
     }
   }
 
-  static AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
-      ResourceProvider resourceProvider,
-      CommandLineOptions options,
-      String source) {
-    if (options.analysisOptionsFile != null) {
-      file_system.File file =
-          resourceProvider.getFile(options.analysisOptionsFile);
-      if (!file.exists) {
-        printAndFail('Options file not found: ${options.analysisOptionsFile}',
-            exitCode: ErrorSeverity.ERROR.ordinal);
-      }
-    }
-
-    String contextRoot;
-    if (options.sourceFiles.isEmpty) {
-      contextRoot = path.current;
-    } else {
-      if (path.isAbsolute(source)) {
-        contextRoot = source;
-      } else {
-        contextRoot = path.absolute(source);
-      }
-    }
-
-    void verbosePrint(String text) {
-      outSink.writeln(text);
-    }
-
-    // Prepare the directory which is, or contains, the context root.
-    String contextRootDirectory;
-    if (resourceProvider.getFolder(contextRoot).exists) {
-      contextRootDirectory = contextRoot;
-    } else {
-      contextRootDirectory = resourceProvider.pathContext.dirname(contextRoot);
-    }
-
-    // Check if there is the options object for the content directory.
-    AnalysisOptionsImpl contextOptions =
-        _directoryToAnalysisOptions[contextRootDirectory];
-    if (contextOptions != null) {
-      return contextOptions;
-    }
-
-    contextOptions = new ContextBuilder(resourceProvider, null, null,
-            options: options.contextBuilderOptions)
-        .getAnalysisOptions(contextRoot,
-            verbosePrint: options.verbose ? verbosePrint : null);
-
-    contextOptions.trackCacheDependencies = false;
-    contextOptions.disableCacheFlushing = options.disableCacheFlushing;
-    contextOptions.hint = !options.disableHints;
-    contextOptions.generateImplicitErrors = options.showPackageWarnings;
-    contextOptions.generateSdkErrors = options.showSdkWarnings;
-    contextOptions.previewDart2 = options.previewDart2;
-    if (options.useCFE) {
-      contextOptions.useFastaParser = true;
-    }
-
-    _directoryToAnalysisOptions[contextRootDirectory] = contextOptions;
-    return contextOptions;
-  }
-
   /// Copy variables defined in the [options] into [declaredVariables].
   static void declareVariables(
       DeclaredVariables declaredVariables, CommandLineOptions options) {
@@ -964,6 +896,10 @@
     }
   }
 
+  static void verbosePrint(String text) {
+    outSink.writeln(text);
+  }
+
   /// Return whether the [newOptions] are equal to the [previous].
   static bool _equalCommandLineOptions(
       CommandLineOptions previous, CommandLineOptions newOptions) {
diff --git a/pkg/analyzer_cli/lib/src/has_context_mixin.dart b/pkg/analyzer_cli/lib/src/has_context_mixin.dart
new file mode 100644
index 0000000..8b51af6
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/has_context_mixin.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/file_system.dart' as file_system;
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer_cli/src/context_cache.dart';
+import 'package:analyzer_cli/src/options.dart';
+
+abstract class HasContextMixin {
+  ContextCache get contextCache;
+  ResourceProvider get resourceProvider;
+
+  /// Based on the command line options, performantly get cached analysis
+  /// options for the context.
+  AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
+      CommandLineOptions options, String source) {
+    if (options.analysisOptionsFile != null) {
+      file_system.File file =
+          resourceProvider.getFile(options.analysisOptionsFile);
+      if (!file.exists) {
+        printAndFail('Options file not found: ${options.analysisOptionsFile}',
+            exitCode: ErrorSeverity.ERROR.ordinal);
+      }
+    }
+
+    return getContextInfo(options, source).analysisOptions;
+  }
+
+  /// Based on the [CommandLineOptions], and a specific [Source] within those
+  /// options if any are specified, performantly get cached info about the
+  /// context.
+  ContextCacheEntry getContextInfo(CommandLineOptions options, String source) {
+    if (options.sourceFiles.isEmpty) {
+      return contextCache.forSource(resourceProvider.pathContext.current);
+    }
+
+    return contextCache.forSource(source);
+  }
+}
diff --git a/pkg/analyzer_cli/test/data/exclude_test_project/analysis_options.yaml b/pkg/analyzer_cli/test/data/exclude_test_project/analysis_options.yaml
new file mode 100644
index 0000000..31cb33b
--- /dev/null
+++ b/pkg/analyzer_cli/test/data/exclude_test_project/analysis_options.yaml
@@ -0,0 +1,3 @@
+analyzer:
+  exclude:
+    - lib/excluded_**.dart
diff --git a/pkg/analyzer_cli/test/data/exclude_test_project/lib/excluded_error.dart b/pkg/analyzer_cli/test/data/exclude_test_project/lib/excluded_error.dart
new file mode 100644
index 0000000..f580fe2
--- /dev/null
+++ b/pkg/analyzer_cli/test/data/exclude_test_project/lib/excluded_error.dart
@@ -0,0 +1 @@
+ExcludedUndefinedClass x = null;
diff --git a/pkg/analyzer_cli/test/data/exclude_test_project/lib/not_excluded_error.dart b/pkg/analyzer_cli/test/data/exclude_test_project/lib/not_excluded_error.dart
new file mode 100644
index 0000000..661c648
--- /dev/null
+++ b/pkg/analyzer_cli/test/data/exclude_test_project/lib/not_excluded_error.dart
@@ -0,0 +1 @@
+IncludedUndefinedClass f = null;
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index f31943d..2650724 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -74,7 +74,7 @@
     return driveMany([source], options: options, args: args);
   }
 
-  /// An ability to use [drive] with many sources instead of one.
+  /// Like [drive], but takes an array of sources.
   Future<Null> driveMany(
     List<String> sources, {
     String options: emptyOptionsFile,
@@ -82,15 +82,13 @@
   }) async {
     driver = new Driver(isTesting: true);
     var cmd = <String>[];
-
-    if (options != null)
-      cmd.addAll([
+    if (options != null) {
+      cmd = <String>[
         '--options',
         path.join(testDirectory, options),
-      ]);
-
+      ];
+    }
     cmd..addAll(sources.map(_adjustFileSpec))..addAll(args);
-
     if (usePreviewDart2) {
       cmd.insert(0, '--preview-dart-2');
     }
@@ -631,8 +629,7 @@
   }
 
   test_partFile() async {
-    Driver driver = new Driver(isTesting: true);
-    await driver.start([
+    await driveMany([
       path.join(testDirectory, 'data/library_and_parts/lib.dart'),
       path.join(testDirectory, 'data/library_and_parts/part1.dart')
     ]);
@@ -654,8 +651,7 @@
   }
 
   test_partFile_extra() async {
-    Driver driver = new Driver(isTesting: true);
-    await driver.start([
+    await driveMany([
       path.join(testDirectory, 'data/library_and_parts/lib.dart'),
       path.join(testDirectory, 'data/library_and_parts/part1.dart'),
       path.join(testDirectory, 'data/library_and_parts/part2.dart')
@@ -920,7 +916,6 @@
     await drive(path.join(testDir, 'main.dart'), args: ['--strong']);
     expect(driver.context.analysisOptions.strongMode, isTrue);
     expect(outSink.toString(), contains('No issues found'));
-    expect(exitCode, 0);
   }
 
   test_todo() async {
@@ -967,6 +962,36 @@
     expect(outSink.toString(), contains('1 lint found.'));
   }
 
+  test_analysisOptions_excludes() async {
+    await drive('data/exclude_test_project',
+        options: 'data/exclude_test_project/$optionsFileName');
+    _expectUndefinedClassErrorsWithoutExclusions();
+  }
+
+  test_analysisOptions_excludesRelativeToAnalysisOptions_inferred() async {
+    // By passing no options, and the path `lib`, it should discover the
+    // analysis_options above lib. The exclude is relative to the project, not
+    // the analyzed path, and it has to then understand that.
+    await drive('data/exclude_test_project/lib', options: null);
+    _expectUndefinedClassErrorsWithoutExclusions();
+  }
+
+  test_analysisOptions_excludesRelativeToAnalysisOptions_explicit() async {
+    // The exclude is relative to the project, not/ the analyzed path, and it
+    // has to then understand that.
+    await drive('data/exclude_test_project',
+        options: 'data/exclude_test_project/$optionsFileName');
+    _expectUndefinedClassErrorsWithoutExclusions();
+  }
+
+  void _expectUndefinedClassErrorsWithoutExclusions() {
+    expect(bulletToDash(outSink),
+        contains("warning - Undefined class 'IncludedUndefinedClass'"));
+    expect(bulletToDash(outSink),
+        isNot(contains("warning - Undefined class 'ExcludedUndefinedClass'")));
+    expect(outSink.toString(), contains("1 warning found."));
+  }
+
   Future<Null> _driveBasic() async {
     await drive('data/options_tests_project/test_file.dart',
         options: 'data/options_tests_project/$optionsFileName');
@@ -1008,6 +1033,20 @@
   @failingTest
   test_withFlags_overrideFatalWarning() =>
       super.test_withFlags_overrideFatalWarning();
+
+  @override
+  @failingTest
+  test_analysisOptions_excludes() => super.test_analysisOptions_excludes();
+
+  @override
+  @failingTest
+  test_analysisOptions_excludesRelativeToAnalysisOptions_inferred() =>
+      super.test_analysisOptions_excludesRelativeToAnalysisOptions_inferred();
+
+  @override
+  @failingTest
+  test_analysisOptions_excludesRelativeToAnalysisOptions_explicit() =>
+      super.test_analysisOptions_excludesRelativeToAnalysisOptions_explicit();
 }
 
 class TestSource implements Source {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index bd58ad2..015d4e3 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -15,7 +15,6 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide Element, ElementKind;
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
@@ -482,15 +481,13 @@
       if (i > 0) {
         write(', ', displayTextBuffer: displayTextBuffer);
       }
-      // may be optional
-      ParameterKind parameterKind = parameter.parameterKind;
-      if (parameterKind == ParameterKind.NAMED) {
+      // Might be optional
+      if (parameter.isNamed) {
         if (!sawNamed) {
           write('{', displayTextBuffer: displayTextBuffer);
           sawNamed = true;
         }
-      }
-      if (parameterKind == ParameterKind.POSITIONAL) {
+      } else if (parameter.isOptionalPositional) {
         if (!sawPositional) {
           write('[', displayTextBuffer: displayTextBuffer);
           sawPositional = true;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
index 1ec6942..93f221e 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /**
  * A CompletionTarget represents an edge in the parse tree which connects an
@@ -560,13 +559,11 @@
     DartType paramType;
     if (paramIndex < parameters.length) {
       ParameterElement param = parameters[paramIndex];
-      if (param.parameterKind == ParameterKind.NAMED) {
+      if (param.isNamed) {
         if (containingNode is NamedExpression) {
           String name = containingNode.name?.label?.name;
           param = parameters.firstWhere(
-              (ParameterElement param) =>
-                  param.parameterKind == ParameterKind.NAMED &&
-                  param.name == name,
+              (ParameterElement param) => param.isNamed && param.name == name,
               orElse: () => null);
           paramType = param?.type;
         }
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index a0b7e60..8dc738c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:analyzer_plugin/utilities/completion/relevance.dart';
@@ -346,7 +345,7 @@
       }
       if (0 <= index && index < parameters.length) {
         ParameterElement param = parameters[index];
-        if (param?.parameterKind == ParameterKind.NAMED) {
+        if (param?.isNamed == true) {
           optype.includeNamedArgumentSuggestions = true;
           return;
         }
@@ -799,8 +798,7 @@
             if (e is DefaultFieldFormalParameterElementImpl) {
               return e.field?.name == node.name.label.name;
             }
-            return e.parameterKind == ParameterKind.NAMED &&
-                e.name == node.name.label.name;
+            return e.isNamed && e.name == node.name.label.name;
           }, orElse: () => null);
           // Suggest tear-offs.
           if (parameterElement?.type is FunctionType) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
index 2afc039..f0fe61c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
@@ -5,14 +5,13 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/generated/source.dart' show Source, UriKind;
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide Element, ElementKind;
 import 'package:analyzer_plugin/src/utilities/documentation.dart';
 import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:analyzer_plugin/utilities/completion/relevance.dart';
 import 'package:analyzer_plugin/utilities/completion/suggestion_builder.dart';
-import 'package:analyzer/src/generated/source.dart' show Source, UriKind;
 
 /**
  * An object used to build code completion suggestions for Dart code.
@@ -59,7 +58,7 @@
     }
 
     for (ParameterElement param in namedParams) {
-      if (param.isRequired) {
+      if (param.hasRequired) {
         if (buffer.isNotEmpty) {
           buffer.write(', ');
         }
@@ -95,7 +94,7 @@
     if (completion == null) {
       completion = element.displayName;
     }
-    bool isDeprecated = element.isDeprecated;
+    bool isDeprecated = element.hasDeprecated;
     CompletionSuggestion suggestion = new CompletionSuggestion(
         kind,
         isDeprecated ? DART_RELEVANCE_LOW : relevance,
@@ -127,14 +126,12 @@
         return paramType != null ? paramType.displayName : 'var';
       }).toList();
 
-      Iterable<ParameterElement> requiredParameters = element.parameters.where(
-          (ParameterElement param) =>
-              param.parameterKind == ParameterKind.REQUIRED);
+      Iterable<ParameterElement> requiredParameters = element.parameters
+          .where((ParameterElement param) => param.isNotOptional);
       suggestion.requiredParameterCount = requiredParameters.length;
 
-      Iterable<ParameterElement> namedParameters = element.parameters.where(
-          (ParameterElement param) =>
-              param.parameterKind == ParameterKind.NAMED);
+      Iterable<ParameterElement> namedParameters =
+          element.parameters.where((ParameterElement param) => param.isNamed);
       suggestion.hasNamedParameters = namedParameters.isNotEmpty;
 
       addDefaultArgDetails(
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 1695a53..e562071 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -93,7 +93,7 @@
         element.displayName,
         plugin.Element.makeFlags(
             isPrivate: element.isPrivate,
-            isDeprecated: element.isDeprecated,
+            isDeprecated: element.hasDeprecated,
             isAbstract: _isAbstract(element),
             isConst: _isConst(element),
             isFinal: _isFinal(element),
@@ -216,12 +216,10 @@
         buffer.write(', ');
       }
       if (closeOptionalString.isEmpty) {
-        analyzer.ParameterKind kind = parameter.parameterKind;
-        if (kind == analyzer.ParameterKind.NAMED) {
+        if (parameter.isNamed) {
           buffer.write('{');
           closeOptionalString = '}';
-        }
-        if (kind == analyzer.ParameterKind.POSITIONAL) {
+        } else if (parameter.isOptionalPositional) {
           buffer.write('[');
           closeOptionalString = ']';
         }
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 38a4f9c..df0e08f 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -265,7 +265,7 @@
     analyzer.CompilationUnit unit = await resolveLibraryUnit(source);
     {
       analyzer.ClassElement engineElement = findElementInUnit(unit, '_E1');
-      expect(engineElement.isDeprecated, isTrue);
+      expect(engineElement.hasDeprecated, isTrue);
       // create notification Element
       plugin.Element element = converter.convertElement(engineElement);
       expect(element.kind, plugin.ElementKind.ENUM);
@@ -282,7 +282,7 @@
       expect(element.parameters, isNull);
       expect(
           element.flags,
-          (engineElement.isDeprecated ? plugin.Element.FLAG_DEPRECATED : 0) |
+          (engineElement.hasDeprecated ? plugin.Element.FLAG_DEPRECATED : 0) |
               plugin.Element.FLAG_PRIVATE);
     }
     {
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 67f6910..e1f2ad8 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -1068,6 +1068,13 @@
   FunctionEntity get hashCodeForNativeObject =>
       _findHelperFunction('hashCodeForNativeObject');
 
+  ClassEntity get instantiation1Class => _findHelperClass('Instantiation1');
+  ClassEntity get instantiation2Class => _findHelperClass('Instantiation2');
+  ClassEntity get instantiation3Class => _findHelperClass('Instantiation3');
+  FunctionEntity get instantiate1 => _findHelperFunction('instantiate1');
+  FunctionEntity get instantiate2 => _findHelperFunction('instantiate2');
+  FunctionEntity get instantiate3 => _findHelperFunction('instantiate3');
+
   // From dart:_internal
 
   ClassEntity _symbolImplementationClass;
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 3d0fd4f..e712bee 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -786,4 +786,17 @@
       _commonElements.typeVariableClass
     ]);
   }
+
+  BackendImpact _genericInstantiation;
+
+  BackendImpact get genericInstantiation =>
+      _genericInstantiation ??= new BackendImpact(staticUses: [
+        _commonElements.instantiate1,
+        _commonElements.instantiate2,
+        _commonElements.instantiate3,
+      ], instantiatedClasses: [
+        _commonElements.instantiation1Class,
+        _commonElements.instantiation2Class,
+        _commonElements.instantiation3Class,
+      ]);
 }
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index c69f15e..3416641 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -108,6 +108,9 @@
               new TypeUse.instantiation(_commonElements.nullType));
           registerImpact(_impacts.nullLiteral);
           break;
+        case Feature.GENERIC_INSTANTIATION:
+          registerImpact(_impacts.genericInstantiation);
+          break;
         case Feature.LAZY_FIELD:
           registerImpact(_impacts.lazyField);
           break;
diff --git a/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
new file mode 100644
index 0000000..08725fca
--- /dev/null
+++ b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
@@ -0,0 +1,140 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 dart2js.js_emitter.instantiation_stub_generator;
+
+import '../elements/entities.dart';
+import '../io/source_information.dart';
+import '../js/js.dart' as jsAst;
+import '../js/js.dart' show js;
+import '../js_backend/namer.dart' show Namer;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/world_builder.dart'
+    show CodegenWorldBuilder, SelectorConstraints;
+import '../world.dart' show ClosedWorld;
+
+import 'model.dart';
+
+import 'code_emitter_task.dart' show CodeEmitterTask;
+
+// Generator of stubs required for Instantiation classes.
+class InstantiationStubGenerator {
+  // ignore: UNUSED_FIELD
+  final CodeEmitterTask _emitterTask;
+  final Namer _namer;
+  final CodegenWorldBuilder _codegenWorldBuilder;
+  final ClosedWorld _closedWorld;
+  // ignore: UNUSED_FIELD
+  final SourceInformationStrategy _sourceInformationStrategy;
+
+  InstantiationStubGenerator(
+      this._emitterTask,
+      this._namer,
+      this._codegenWorldBuilder,
+      this._closedWorld,
+      this._sourceInformationStrategy);
+
+  /// Generates a stub to forward a call selector with no type arguments to a
+  /// call selector with stored types.
+  ///
+  /// [instantiationClass] is the class containing the captured type arguments.
+  /// [callSelector] is the selector with no type arguments. [targetSelector] is
+  /// the selector accepting the type arguments.
+  ParameterStubMethod _generateStub(
+      ClassEntity instantiationClass,
+      FieldEntity functionField,
+      Selector callSelector,
+      Selector targetSelector) {
+    // TODO(sra): Generate source information for stub that has no member.
+    //
+    //SourceInformationBuilder sourceInformationBuilder =
+    //    _sourceInformationStrategy.createBuilderForContext(member);
+    //SourceInformation sourceInformation =
+    //    sourceInformationBuilder.buildStub(member, callStructure);
+
+    assert(callSelector.typeArgumentCount == 0);
+    int typeArgumentCount = targetSelector.typeArgumentCount;
+    assert(typeArgumentCount > 0);
+
+    // The forwarding stub for three arguments of an instantiation with two type
+    // arguments looks like this:
+    //
+    // ```
+    // call$3: function(a0, a1, a2) {
+    //   return this._f.call$2$3(a0, a1, a2, this.$ti[0], this.$ti[1]);
+    // }
+    // ```
+
+    List<jsAst.Parameter> parameters = <jsAst.Parameter>[];
+    List<jsAst.Expression> arguments = <jsAst.Expression>[];
+
+    for (int i = 0; i < callSelector.argumentCount; i++) {
+      String jsName = 'a$i';
+      arguments.add(js('#', jsName));
+      parameters.add(new jsAst.Parameter(jsName));
+    }
+
+    for (int i = 0; i < targetSelector.typeArgumentCount; i++) {
+      arguments.add(js('this.#[#]', [_namer.rtiFieldJsName, js.number(i)]));
+    }
+
+    jsAst.Fun function = js('function(#) { return this.#.#(#); }', [
+      parameters,
+      _namer.fieldPropertyName(functionField),
+      _namer.invocationName(targetSelector),
+      arguments,
+    ]);
+    // TODO(sra): .withSourceInformation(sourceInformation);
+
+    jsAst.Name name = _namer.invocationName(callSelector);
+    return new ParameterStubMethod(name, null, function);
+  }
+
+  // Returns all stubs for an instantiation class.
+  //
+  List<StubMethod> generateStubs(
+      ClassEntity instantiationClass, FunctionEntity member) {
+    // 1. Find the number of type parameters in [instantiationClass].
+    int typeArgumentCount = _closedWorld.dartTypes
+        .getThisType(instantiationClass)
+        .typeArguments
+        .length;
+    assert(typeArgumentCount > 0);
+
+    // 2. Find the function field access path.
+    FieldEntity functionField;
+    _codegenWorldBuilder.forEachInstanceField(instantiationClass,
+        (ClassEntity enclosing, FieldEntity field) {
+      if (field.name == '_genericClosure') functionField = field;
+    });
+    assert(functionField != null,
+        "Can't find Closure field of $instantiationClass");
+
+    String call = _namer.closureInvocationSelectorName;
+    Map<Selector, SelectorConstraints> callSelectors =
+        _codegenWorldBuilder.invocationsByName(call);
+
+    List<StubMethod> stubs = <StubMethod>[];
+
+    // For every call-selector generate a stub to the corresponding selector
+    // with filled-in type arguments.
+
+    for (Selector selector in callSelectors.keys) {
+      CallStructure callStructure = selector.callStructure;
+      if (callStructure.typeArgumentCount != 0) continue;
+      CallStructure genericCallStructrure =
+          callStructure.withTypeArgumentCount(typeArgumentCount);
+      Selector genericSelector =
+          new Selector.call(selector.memberName, genericCallStructrure);
+      stubs.add(_generateStub(
+          instantiationClass, functionField, selector, genericSelector));
+    }
+
+    // TODO(sra): Generate $signature() stub that forwards to
+    // $instantiatedSignature() method of _f.
+
+    return stubs;
+  }
+}
diff --git a/pkg/compiler/lib/src/js_emitter/js_emitter.dart b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
index 25467b1..7ad49b8 100644
--- a/pkg/compiler/lib/src/js_emitter/js_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
@@ -6,6 +6,7 @@
 
 export 'class_stub_generator.dart';
 export 'code_emitter_task.dart';
+export 'instantiation_stub_generator.dart';
 export 'interceptor_stub_generator.dart';
 export 'main_call_stub_generator.dart';
 export 'metadata_collector.dart';
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 831ff2c..db83938 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
@@ -45,6 +45,7 @@
         ClassStubGenerator,
         CodeEmitterTask,
         Emitter,
+        InstantiationStubGenerator,
         InterceptorStubGenerator,
         MainCallStubGenerator,
         ParameterStubGenerator,
@@ -733,6 +734,12 @@
       callStubs.add(_buildStubMethod(name, function));
     }
 
+    if (cls == _commonElements.instantiation1Class ||
+        cls == _commonElements.instantiation2Class ||
+        cls == _commonElements.instantiation3Class) {
+      callStubs.addAll(_generateInstantiationStubs(cls));
+    }
+
     // MixinApplications run through the members of their mixin. Here, we are
     // only interested in direct members.
     if (!onlyForRti && !_elementEnvironment.isMixinApplication(cls)) {
@@ -979,6 +986,12 @@
     return generator.generateParameterStubs(element, canTearOff: canTearOff);
   }
 
+  List<StubMethod> _generateInstantiationStubs(ClassEntity instantiationClass) {
+    InstantiationStubGenerator generator = new InstantiationStubGenerator(
+        _task, _namer, _worldBuilder, _closedWorld, _sourceInformationStrategy);
+    return generator.generateStubs(instantiationClass, null);
+  }
+
   /// Builds a stub method.
   ///
   /// Stub methods may have an element that can be used for code-size
diff --git a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
index a740fb0..b69beb8 100644
--- a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
@@ -71,15 +71,6 @@
     //     argument checks.
     addClassesWithSuperclasses(rtiChecks.requiredClasses);
 
-    // 2.  Add classes that contain checked generic function types. These are
-    //     needed to store the signature encoding.
-    for (FunctionType type in rtiChecks.checkedFunctionTypes) {
-      ClassEntity contextClass = DartTypes.getClassContext(type);
-      if (contextClass != null) {
-        _rtiNeededClasses.add(contextClass);
-      }
-    }
-
     bool canTearOff(MemberEntity function) {
       if (!function.isFunction ||
           function.isConstructor ||
@@ -103,7 +94,7 @@
           mirrorsData.isMemberAccessibleByReflection(element));
     }
 
-    // Find all types referenced from the types of elements that can be
+    // 2. Find all types referenced from the types of elements that can be
     // reflected on 'as functions'.
     liveMembers.where((MemberEntity element) {
       return canBeReflectedAsFunction(element) && canBeReified(element);
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index ddb3abb..b54f422 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -485,6 +485,11 @@
   void _ensureCallType(IndexedClass cls, ClassData data) {
     if (!data.isCallTypeComputed) {
       data.isCallTypeComputed = true;
+      if (options.strongMode && !cls.isClosure) {
+        // In Dart 2, a regular class with a 'call' method is no longer a
+        // subtype of its function type.
+        return;
+      }
       MemberEntity callMethod = lookupClassMember(cls, Identifiers.call);
       if (callMethod != null) {
         if (callMethod.isFunction) {
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index 24b957d..a2d7c31 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -862,11 +862,14 @@
         program = new ir.Program();
         new BinaryBuilder(input.data).readProgram(program);
       } else {
+        bool strongMode = _elementMap.options.strongMode;
+        String platform = strongMode
+            ? 'dart2js_platform_strong.dill'
+            : 'dart2js_platform.dill';
         initializedCompilerState = fe.initializeCompiler(
             initializedCompilerState,
-            new Dart2jsTarget(
-                new TargetFlags(strongMode: _elementMap.options.strongMode)),
-            platformBinaries.resolve("dart2js_platform.dill"),
+            new Dart2jsTarget(new TargetFlags(strongMode: strongMode)),
+            platformBinaries.resolve(platform),
             _packageConfig);
         program = await fe.compile(
             initializedCompilerState,
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index 342c4cd..940a35b 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -572,12 +572,23 @@
   }
 
   @override
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {
+    if (varFinalOrConst == null) {
+      pushNode(Modifiers.EMPTY);
+    } else {
+      Link<Node> nodes =
+          const Link<Node>().prepend(new Identifier(varFinalOrConst));
+      pushNode(new Modifiers(new NodeList(null, nodes, null, ' ')));
+    }
+  }
+
+  @override
   void endVariablesDeclaration(int count, Token endToken) {
     // TODO(ahe): Pick one name for this concept, either
     // VariablesDeclaration or VariableDefinitions.
     NodeList variables = makeNodeList(count, null, endToken, ",");
-    TypeAnnotation type = popNode();
     Modifiers modifiers = popNode();
+    TypeAnnotation type = popNode();
     popNode();
     pushNode(new VariableDefinitions(type, modifiers, variables));
   }
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 101c9e4..ba6cb77 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3990,10 +3990,33 @@
           _elementMap.getDartType(type), sourceElement);
       arguments.add(instruction);
     }
-    Selector selector =
-        new Selector.genericInstantiation(node.typeArguments.length);
-    _pushDynamicInvocation(node, commonMasks.functionType, selector, arguments,
-        const <DartType>[], null /*_sourceInformationBuilder.?*/);
+    int typeArgumentCount = node.typeArguments.length;
+    bool targetCanThrow = false; // TODO(sra): Is this true?
+    FunctionEntity target = _instantiator(typeArgumentCount);
+    if (target == null) {
+      reporter.internalError(
+          _elementMap.getSpannable(targetElement, node),
+          'Generic function instantiation not implemented for '
+          '${typeArgumentCount} type arguments');
+      stack.add(graph.addConstantNull(closedWorld));
+      return;
+    }
+    HInstruction instruction = new HInvokeStatic(
+        target, arguments, commonMasks.functionType, <DartType>[],
+        targetCanThrow: targetCanThrow);
+    // TODO(sra): ..sourceInformation = sourceInformation
+    instruction.sideEffects
+      ..clearAllDependencies()
+      ..clearAllSideEffects();
+
+    push(instruction);
+  }
+
+  FunctionEntity _instantiator(int count) {
+    if (count == 1) return _commonElements.instantiate1;
+    if (count == 2) return _commonElements.instantiate2;
+    if (count == 3) return _commonElements.instantiate3;
+    return null;
   }
 
   @override
@@ -5108,7 +5131,8 @@
   static String cannotBeInlinedReason(KernelToElementMapForBuilding elementMap,
       FunctionEntity function, int maxInliningNodes,
       {bool allowLoops: false, bool enableUserAssertions: null}) {
-    InlineWeeder visitor = new InlineWeeder(maxInliningNodes, allowLoops);
+    InlineWeeder visitor =
+        new InlineWeeder(maxInliningNodes, allowLoops, enableUserAssertions);
     ir.FunctionNode node = getFunctionNode(elementMap, function);
     node.accept(visitor);
     if (function.isConstructor) {
@@ -5123,13 +5147,15 @@
 
   final int maxInliningNodes; // `null` for unbounded.
   final bool allowLoops;
+  final bool enableUserAssertions;
 
   bool seenReturn = false;
   int nodeCount = 0;
   String tooDifficultReason;
   bool get tooDifficult => tooDifficultReason != null;
 
-  InlineWeeder(this.maxInliningNodes, this.allowLoops);
+  InlineWeeder(
+      this.maxInliningNodes, this.allowLoops, this.enableUserAssertions);
 
   bool registerNode() {
     if (maxInliningNodes == null) return true;
@@ -5263,6 +5289,18 @@
     // This is last so that [tooDifficult] is always updated.
     if (!registerNode()) return;
   }
+
+  @override
+  visitAssertInitializer(ir.AssertInitializer node) {
+    if (!enableUserAssertions) return;
+    node.visitChildren(this);
+  }
+
+  @override
+  visitAssertStatement(ir.AssertStatement node) {
+    if (!enableUserAssertions) return;
+    defaultNode(node);
+  }
 }
 
 /// Class in charge of building try, catch and/or finally blocks. This handles
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 8f78dd0..3498027 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -539,6 +539,12 @@
   }
 
   @override
+  void visitInstantiation(ir.Instantiation node) {
+    impactBuilder.registerFeature(Feature.GENERIC_INSTANTIATION);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitStringConcatenation(ir.StringConcatenation node) {
     impactBuilder.registerFeature(Feature.STRING_INTERPOLATION);
     impactBuilder.registerFeature(Feature.STRING_JUXTAPOSITION);
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index f20d529..1953d7b 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -42,6 +42,9 @@
         argumentCount, namedArguments, typeArgumentCount);
   }
 
+  CallStructure withTypeArgumentCount(int typeArgumentCount) =>
+      new CallStructure(argumentCount, namedArguments, typeArgumentCount);
+
   /// `true` if this call has named arguments.
   bool get isNamed => false;
 
diff --git a/pkg/compiler/lib/src/universe/feature.dart b/pkg/compiler/lib/src/universe/feature.dart
index d9799bc..611f6a8 100644
--- a/pkg/compiler/lib/src/universe/feature.dart
+++ b/pkg/compiler/lib/src/universe/feature.dart
@@ -43,6 +43,9 @@
   /// A field without an initializer.
   FIELD_WITHOUT_INITIALIZER,
 
+  /// A generic instantiation (application of type parameters).
+  GENERIC_INSTANTIATION,
+
   /// A local variable without an initializer.
   LOCAL_WITHOUT_INITIALIZER,
 
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index e03e640..5e1d07d 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -185,6 +185,7 @@
   factory Selector.callDefaultConstructor() => new Selector(
       SelectorKind.CALL, const PublicName(''), CallStructure.NO_ARGS);
 
+  // TODO(31953): Remove this if we can implement via static calls.
   factory Selector.genericInstantiation(int typeArguments) => new Selector(
       SelectorKind.SPECIAL,
       Names.genericInstantiation,
diff --git a/pkg/compiler/tool/status_files/update_from_log.dart b/pkg/compiler/tool/status_files/update_from_log.dart
index 3a525cf..8f816d5 100644
--- a/pkg/compiler/tool/status_files/update_from_log.dart
+++ b/pkg/compiler/tool/status_files/update_from_log.dart
@@ -3,25 +3,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Script that updates dart2js status lines automatically for tests under the
-/// '$dart2js_with_kernel' configuration.
+/// '$fasta' configuration.
 ///
 /// This script is hardcoded to only support this configuration and relies on
 /// a convention for how the status files are structured, In particular,
 /// every status file for dart2js should have 3 sections:
 ///
-///     [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+///     [ $compiler == dart2js && $fasta && $host_checked ]
 ///
 /// and:
 ///
-///     [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+///     [ $compiler == dart2js && $fasta && $minified ]
 ///
 /// and:
 ///
-///     [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
+///     [ $compiler == dart2js && $fasta && $fast_startup ]
 ///
 /// and:
 ///
-///     [ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+///     [ $compiler == dart2js && $checked && $fasta ]
 library compiler.status_files.update_from_log;
 
 import 'dart:io';
@@ -30,21 +30,18 @@
 import 'log_parser.dart';
 
 final dart2jsConfigurations = {
-  'host-checked':
-      r'[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]',
-  'minified': r'[ $compiler == dart2js && $dart2js_with_kernel && $minified ]',
+  'host-checked': r'[ $compiler == dart2js && $fasta && $host_checked ]',
+  'minified': r'[ $compiler == dart2js && $fasta && $minified ]',
   'host-checked-strong':
-      r'[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]',
+      r'[ $compiler == dart2js && $fasta && $host_checked && $strong ]',
   'minified-strong':
-      r'[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]',
-  'fast-startup':
-      r'[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]',
+      r'[ $compiler == dart2js && $fasta && $minified && $strong ]',
+  'fast-startup': r'[ $compiler == dart2js && $fast_startup && $fasta ]',
   'fast-startup-strong':
-      r'[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]',
-  'checked-mode':
-      r'[ $compiler == dart2js && $checked && $dart2js_with_kernel ]',
+      r'[ $compiler == dart2js && $fast_startup && $fasta && $strong ]',
+  'checked-mode': r'[ $compiler == dart2js && $checked && $fasta ]',
   'checked-mode-strong':
-      r'[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]',
+      r'[ $compiler == dart2js && $checked && $fasta && $strong ]',
 };
 
 final dart2jsStatusFiles = {
diff --git a/pkg/dart_internal/README.md b/pkg/dart_internal/README.md
index 3ce15a1..bde3777 100644
--- a/pkg/dart_internal/README.md
+++ b/pkg/dart_internal/README.md
@@ -1,5 +1,5 @@
-**Scary warning: This package is experimental and may deprecated in a future
-version of Dart.**
+☠☠ **Warning: This package is experimental and may be removed in a future
+version of Dart.** ☠☠
 
 This package is not intended for wide use. It provides a temporary API to
 solve the problem: "Given an object some generic type A, how do I construct an
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index 8cdb4f1..2b3a45c 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -62,7 +62,7 @@
       // This compresses the long dart_sdk URLs if SDK source maps are missing.
       // It's no longer linkable, but neither are the properly mapped ones
       // above.
-      sourceUrl = 'dart_sdk.js';
+      sourceUrl = 'dart:sdk_internal';
     }
 
     return new Frame(Uri.parse(sourceUrl), span.start.line + 1,
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 18161b7..21f523f 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -1120,6 +1120,35 @@
     tip: r"""Try removing all but one 'deferred' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateDuplicateLabelInSwitchStatement = const Template<
+        Message Function(String string)>(
+    messageTemplate:
+        r"""The label '#string' was already used in this switch statement.""",
+    tipTemplate: r"""Try choosing a different name for this label.""",
+    withArguments: _withArgumentsDuplicateLabelInSwitchStatement);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)>
+    codeDuplicateLabelInSwitchStatement =
+    const Code<Message Function(String string)>(
+        "DuplicateLabelInSwitchStatement",
+        templateDuplicateLabelInSwitchStatement,
+        analyzerCode: "DUPLICATE_LABEL_IN_SWITCH_STATEMENT",
+        dart2jsCode: "*fatal*");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicateLabelInSwitchStatement(String string) {
+  return new Message(codeDuplicateLabelInSwitchStatement,
+      message:
+          """The label '$string' was already used in this switch statement.""",
+      tip: """Try choosing a different name for this label.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDuplicatePrefix = messageDuplicatePrefix;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1619,6 +1648,16 @@
     message: r"""Expected '('.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExpectedStatement = messageExpectedStatement;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExpectedStatement = const MessageCode(
+    "ExpectedStatement",
+    analyzerCode: "MISSING_STATEMENT",
+    dart2jsCode: "*fatal*",
+    message: r"""Expected a statement.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedString =
     const Template<Message Function(Token token)>(
         messageTemplate: r"""Expected a String, but got '#lexeme'.""",
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 6886d9b..c530048 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -43,12 +43,12 @@
   DillTarget dillLoadedData;
   List<LibraryBuilder> platformBuilders;
   Map<Uri, LibraryBuilder> userBuilders;
-  final Uri bootstrapDill;
-  bool bootstrapSuccess = false;
+  final Uri initializeFromDillUri;
+  bool initializedFromDill = false;
 
   KernelTarget userCode;
 
-  IncrementalCompiler(this.context, [this.bootstrapDill])
+  IncrementalCompiler(this.context, [this.initializeFromDillUri])
       : ticker = context.options.ticker;
 
   @override
@@ -56,71 +56,37 @@
     ticker.reset();
     entryPoint ??= context.options.inputs.single;
     return context.runInContext<Future<Program>>((CompilerContext c) async {
-      bool includeUserLoadedLibraries = false;
-      Map<Uri, Source> uriToSource = {};
-      Map<Uri, int> importUriToOrder = {};
-      Procedure userLoadedUriMain;
-      bootstrapSuccess = false;
+      IncrementalCompilerData data = new IncrementalCompilerData();
       if (dillLoadedData == null) {
         UriTranslator uriTranslator = await c.options.getUriTranslator();
         ticker.logMs("Read packages file");
 
-        dillLoadedData =
-            new DillTarget(ticker, uriTranslator, c.options.target);
         List<int> summaryBytes = await c.options.loadSdkSummaryBytes();
-        int bytesLength = 0;
-        Program program;
-        if (summaryBytes != null) {
-          ticker.logMs("Read ${c.options.sdkSummary}");
-          program = new Program();
-          new BinaryBuilder(summaryBytes, disableLazyReading: false)
-              .readProgram(program);
-          ticker.logMs("Deserialized ${c.options.sdkSummary}");
-          bytesLength += summaryBytes.length;
-        }
-
-        if (bootstrapDill != null) {
-          FileSystemEntity entity =
-              c.options.fileSystem.entityForUri(bootstrapDill);
-          if (await entity.exists()) {
-            List<int> bootstrapBytes = await entity.readAsBytes();
-            if (bootstrapBytes != null) {
-              Set<Uri> prevLibraryUris = new Set<Uri>.from(
-                  program.libraries.map((Library lib) => lib.importUri));
-              ticker.logMs("Read $bootstrapDill");
-              bool bootstrapFailed = false;
-              try {
-                // We're going to output all we read here so lazy loading it
-                // doesn't make sense.
-                new BinaryBuilder(bootstrapBytes, disableLazyReading: true)
-                    .readProgram(program);
-              } catch (e) {
-                bootstrapFailed = true;
-                program = new Program();
-                new BinaryBuilder(summaryBytes, disableLazyReading: false)
-                    .readProgram(program);
-              }
-              if (!bootstrapFailed) {
-                bootstrapSuccess = true;
-                bytesLength += bootstrapBytes.length;
-                for (Library lib in program.libraries) {
-                  if (prevLibraryUris.contains(lib.importUri)) continue;
-                  importUriToOrder[lib.importUri] = importUriToOrder.length;
-                }
-                userLoadedUriMain = program.mainMethod;
-                includeUserLoadedLibraries = true;
-                uriToSource.addAll(program.uriToSource);
-              }
-            }
+        int bytesLength = prepareSummary(summaryBytes, uriTranslator, c, data);
+        if (initializeFromDillUri != null) {
+          try {
+            bytesLength += await initializeFromDill(summaryBytes, c, data);
+          } catch (e) {
+            // We might have loaded x out of y libraries into the program.
+            // To avoid any unforeseen problems start over.
+            bytesLength = prepareSummary(summaryBytes, uriTranslator, c, data);
           }
         }
-        summaryBytes = null;
-        if (program != null) {
-          dillLoadedData.loader
-              .appendLibraries(program, byteCount: bytesLength);
+        appendLibraries(data, bytesLength);
+
+        try {
+          await dillLoadedData.buildOutlines();
+        } catch (e) {
+          if (!initializedFromDill) rethrow;
+
+          // Retry without initializing from dill.
+          initializedFromDill = false;
+          data.reset();
+          bytesLength = prepareSummary(summaryBytes, uriTranslator, c, data);
+          appendLibraries(data, bytesLength);
+          await dillLoadedData.buildOutlines();
         }
-        ticker.logMs("Appended libraries");
-        await dillLoadedData.buildOutlines();
+        summaryBytes = null;
         userBuilders = <Uri, LibraryBuilder>{};
         platformBuilders = <LibraryBuilder>[];
         dillLoadedData.loader.builders.forEach((uri, builder) {
@@ -172,8 +138,8 @@
 
       List<Library> libraries =
           new List<Library>.from(userCode.loader.libraries);
-      uriToSource.addAll(userCode.uriToSource);
-      if (includeUserLoadedLibraries) {
+      data.uriToSource.addAll(userCode.uriToSource);
+      if (data.includeUserLoadedLibraries) {
         for (LibraryBuilder library in reusedLibraries) {
           if (library.fileUri.scheme == "dart") continue;
           assert(library is DillLibraryBuilder);
@@ -183,8 +149,8 @@
         // For now ensure original order of libraries to produce bit-perfect
         // output.
         libraries.sort((a, b) {
-          int aOrder = importUriToOrder[a.importUri];
-          int bOrder = importUriToOrder[b.importUri];
+          int aOrder = data.importUriToOrder[a.importUri];
+          int bOrder = data.importUriToOrder[b.importUri];
           if (aOrder != null && bOrder != null) return aOrder - bOrder;
           if (aOrder != null) return -1;
           if (bOrder != null) return 1;
@@ -194,13 +160,70 @@
 
       // This is the incremental program.
       Procedure mainMethod = programWithDill == null
-          ? userLoadedUriMain
+          ? data.userLoadedUriMain
           : programWithDill.mainMethod;
-      return new Program(libraries: libraries, uriToSource: uriToSource)
+      return new Program(libraries: libraries, uriToSource: data.uriToSource)
         ..mainMethod = mainMethod;
     });
   }
 
+  int prepareSummary(List<int> summaryBytes, UriTranslator uriTranslator,
+      CompilerContext c, IncrementalCompilerData data) {
+    dillLoadedData = new DillTarget(ticker, uriTranslator, c.options.target);
+    int bytesLength = 0;
+
+    if (summaryBytes != null) {
+      ticker.logMs("Read ${c.options.sdkSummary}");
+      data.program = new Program();
+      new BinaryBuilder(summaryBytes, disableLazyReading: false)
+          .readProgram(data.program);
+      ticker.logMs("Deserialized ${c.options.sdkSummary}");
+      bytesLength += summaryBytes.length;
+    }
+
+    return bytesLength;
+  }
+
+  // This procedure will try to load the dill file and will crash if it cannot.
+  Future<int> initializeFromDill(List<int> summaryBytes, CompilerContext c,
+      IncrementalCompilerData data) async {
+    int bytesLength = 0;
+    FileSystemEntity entity =
+        c.options.fileSystem.entityForUri(initializeFromDillUri);
+    if (await entity.exists()) {
+      List<int> initializationBytes = await entity.readAsBytes();
+      if (initializationBytes != null) {
+        Set<Uri> prevLibraryUris = new Set<Uri>.from(
+            data.program.libraries.map((Library lib) => lib.importUri));
+        ticker.logMs("Read $initializeFromDillUri");
+
+        // We're going to output all we read here so lazy loading it
+        // doesn't make sense.
+        new BinaryBuilder(initializationBytes, disableLazyReading: true)
+            .readProgram(data.program);
+
+        initializedFromDill = true;
+        bytesLength += initializationBytes.length;
+        for (Library lib in data.program.libraries) {
+          if (prevLibraryUris.contains(lib.importUri)) continue;
+          data.importUriToOrder[lib.importUri] = data.importUriToOrder.length;
+        }
+        data.userLoadedUriMain = data.program.mainMethod;
+        data.includeUserLoadedLibraries = true;
+        data.uriToSource.addAll(data.program.uriToSource);
+      }
+    }
+    return bytesLength;
+  }
+
+  void appendLibraries(IncrementalCompilerData data, int bytesLength) {
+    if (data.program != null) {
+      dillLoadedData.loader
+          .appendLibraries(data.program, byteCount: bytesLength);
+    }
+    ticker.logMs("Appended libraries");
+  }
+
   List<LibraryBuilder> computeReusedLibraries(Iterable<Uri> invalidatedUris) {
     if (userCode == null && userBuilders == null) {
       return <LibraryBuilder>[];
@@ -217,7 +240,8 @@
     List<Uri> invalidatedImportUris = <Uri>[];
 
     // Compute [builders] and [invalidatedImportUris].
-    addBuilderAndInvalidateUris(Uri uri, LibraryBuilder library) {
+    addBuilderAndInvalidateUris(Uri uri, LibraryBuilder library,
+        [bool recursive = true]) {
       builders[uri] = library;
       if (invalidatedFileUris.contains(uri) ||
           (uri != library.fileUri &&
@@ -227,9 +251,14 @@
               invalidatedFileUris.contains(library.library.fileUri))) {
         invalidatedImportUris.add(uri);
       }
+      if (!recursive) return;
       if (library is SourceLibraryBuilder) {
         for (var part in library.parts) {
-          addBuilderAndInvalidateUris(part.uri, part);
+          addBuilderAndInvalidateUris(part.uri, part, false);
+        }
+      } else if (library is DillLibraryBuilder) {
+        for (var part in library.library.parts) {
+          addBuilderAndInvalidateUris(part.fileUri, library, false);
         }
       }
     }
@@ -253,11 +282,19 @@
     // Remove all dependencies of [invalidatedImportUris] from builders.
     List<Uri> workList = invalidatedImportUris;
     while (workList.isNotEmpty) {
-      LibraryBuilder current = builders.remove(workList.removeLast());
+      Uri removed = workList.removeLast();
+      LibraryBuilder current = builders.remove(removed);
       // [current] is null if the corresponding key (URI) has already been
       // removed.
       if (current != null) {
         Set<Uri> s = directDependencies[current.uri];
+        if (current.uri != removed) {
+          if (s == null) {
+            s = directDependencies[removed];
+          } else {
+            s.addAll(directDependencies[removed]);
+          }
+        }
         if (s != null) {
           // [s] is null for leaves.
           for (Uri dependency in s) {
@@ -267,7 +304,16 @@
       }
     }
 
-    return builders.values.where((builder) => !builder.isPart).toList();
+    // Builders contain mappings from part uri to builder, meaning the same
+    // builder can exist multiple times in the values list.
+    Set<Uri> seenUris = new Set<Uri>();
+    List<LibraryBuilder> result = <LibraryBuilder>[];
+    for (var builder in builders.values) {
+      if (builder.isPart) continue;
+      if (!seenUris.add(builder.fileUri)) continue;
+      result.add(builder);
+    }
+    return result;
   }
 
   @override
@@ -275,3 +321,23 @@
     invalidatedUris.add(uri);
   }
 }
+
+class IncrementalCompilerData {
+  bool includeUserLoadedLibraries;
+  Map<Uri, Source> uriToSource;
+  Map<Uri, int> importUriToOrder;
+  Procedure userLoadedUriMain;
+  Program program;
+
+  IncrementalCompilerData() {
+    reset();
+  }
+
+  reset() {
+    includeUserLoadedLibraries = false;
+    uriToSource = <Uri, Source>{};
+    importUriToOrder = <Uri, int>{};
+    userLoadedUriMain = null;
+    program = null;
+  }
+}
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 60992ba..8389e2d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4,7 +4,6 @@
 
 library fasta.body_builder;
 
-// ignore: UNDEFINED_HIDDEN_NAME
 import 'dart:core' hide MapEntry;
 
 import '../fasta_codes.dart' as fasta;
@@ -1613,10 +1612,10 @@
   }
 
   @override
-  void beginVariablesDeclaration(Token token) {
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {
     debugEvent("beginVariablesDeclaration");
     DartType type = pop();
-    int modifiers = Modifier.validate(pop());
+    int modifiers = Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
     super.push(currentLocalVariableModifiers);
     super.push(currentLocalVariableType ?? NullValue.Type);
     currentLocalVariableType = type;
@@ -1649,6 +1648,8 @@
   }
 
   void handleInvalidTopLevelBlock(Token token) {
+    // TODO(danrubel): Consider improved recovery by adding this block
+    // as part of a synthetic top level function.
     pop(); // block
   }
 
@@ -3016,7 +3017,7 @@
   void handleLabel(Token token) {
     debugEvent("Label");
     Identifier identifier = pop();
-    push(new Label(identifier.name));
+    push(new Label(identifier.name, identifier.token.charOffset));
   }
 
   @override
@@ -3201,8 +3202,14 @@
     assert(scope == switchScope);
     for (Label label in labels) {
       if (scope.hasLocalLabel(label.name)) {
-        // TODO(ahe): Should validate this is a goto target and not duplicated.
-        scope.claimLabel(label.name);
+        // TODO(ahe): Should validate this is a goto target.
+        if (!scope.claimLabel(label.name)) {
+          addCompileTimeError(
+              fasta.templateDuplicateLabelInSwitchStatement
+                  .withArguments(label.name),
+              label.charOffset,
+              label.name.length);
+        }
       } else {
         scope.declareLabel(label.name, createGotoTarget(firstToken.charOffset));
       }
@@ -3895,8 +3902,9 @@
 
 class Label {
   String name;
+  int charOffset;
 
-  Label(this.name);
+  Label(this.name, this.charOffset);
 
   String toString() => "label($name)";
 }
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 db948bc..9f9701d 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
@@ -34,6 +34,7 @@
         StringLiteral,
         SuperInitializer,
         TypeParameter,
+        TypeParameterType,
         VariableDeclaration,
         VariableGet,
         VoidType,
@@ -129,7 +130,7 @@
     if (actualBody != null) {
       unexpected("null", "${actualBody.runtimeType}", charOffset, fileUri);
     }
-    actualBody = new RedirectingFactoryBody(target);
+    actualBody = new RedirectingFactoryBody(target, typeArguments);
     function.body = actualBody;
     actualBody?.parent = function;
     if (isPatch) {
@@ -608,6 +609,19 @@
     function.body = actualBody;
     actualBody?.parent = function;
     if (isPatch) {
+      if (function.typeParameters != null) {
+        Map<TypeParameter, DartType> substitution = <TypeParameter, DartType>{};
+        for (int i = 0; i < function.typeParameters.length; i++) {
+          substitution[function.typeParameters[i]] =
+              new TypeParameterType(actualOrigin.function.typeParameters[i]);
+        }
+        List<DartType> newTypeArguments =
+            new List<DartType>(typeArguments.length);
+        for (int i = 0; i < newTypeArguments.length; i++) {
+          newTypeArguments[i] = substitute(typeArguments[i], substitution);
+        }
+        typeArguments = newTypeArguments;
+      }
       actualOrigin.setRedirectingFactoryBody(target, typeArguments);
     }
   }
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 0f9acb9..a7447ef 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
@@ -18,7 +18,6 @@
 /// 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';
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 af03b4f..282980e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -28,6 +28,7 @@
         Name,
         NamedExpression,
         NullLiteral,
+        Procedure,
         ProcedureKind,
         Program,
         Source,
@@ -51,6 +52,8 @@
 
 import '../dill/dill_target.dart' show DillTarget;
 
+import '../dill/dill_member_builder.dart' show DillMemberBuilder;
+
 import '../messages.dart'
     show
         LocatedMessage,
@@ -372,6 +375,10 @@
       Builder builder = loader.first.exportScope.lookup("main", -1, null);
       if (builder is KernelProcedureBuilder) {
         program.mainMethod = builder.procedure;
+      } else if (builder is DillMemberBuilder) {
+        if (builder.member is Procedure) {
+          program.mainMethod = builder.member;
+        }
       }
     }
 
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 15ff705..4c4cb84 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -82,4 +82,12 @@
     }
     return result;
   }
+
+  static int validateVarFinalOrConst(String lexeme) {
+    if (lexeme == null) return 0;
+    if (identical('const', lexeme)) return Const.mask;
+    if (identical('final', lexeme)) return Final.mask;
+    if (identical('var', lexeme)) return Var.mask;
+    return unhandled(lexeme, "Modifier.validateVarFinalOrConst", -1, null);
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index d60e675..2ff44b0 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -403,8 +403,8 @@
   }
 
   @override
-  void beginVariablesDeclaration(Token token) {
-    listener?.beginVariablesDeclaration(token);
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {
+    listener?.beginVariablesDeclaration(token, varFinalOrConst);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index 358f63b..b7d921e 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -62,6 +62,9 @@
     logEvent("Block");
   }
 
+  /// Called to handle a block that has been parsed but is not associated
+  /// with any top level function declaration. Substructures:
+  /// - block
   void handleInvalidTopLevelBlock(Token token) {}
 
   void beginCascade(Token token) {}
@@ -912,7 +915,7 @@
     logEvent("FunctionExpression");
   }
 
-  void beginVariablesDeclaration(Token token) {}
+  void beginVariablesDeclaration(Token token, Token varFinalOrConst) {}
 
   void endVariablesDeclaration(int count, Token endToken) {
     logEvent("VariablesDeclaration");
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 8433560..fd95bba 100644
--- a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
@@ -212,7 +212,6 @@
 class ModifierRecoveryContext2 {
   final Parser parser;
   TypeContinuation typeContinuation;
-  int modifierCount = 0;
   Token abstractToken;
   Token constToken;
   Token covariantToken;
@@ -272,22 +271,23 @@
     token = parseModifiers(token, typeContinuation,
         externalToken: externalToken, varFinalOrConst: varFinalOrConst);
 
-    if (abstractToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          abstractToken, fasta.templateExtraneousModifier);
-    }
-    if (staticToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          staticToken, fasta.templateExtraneousModifier);
-      staticToken = null;
-      --modifierCount;
-    }
-    if (covariantToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          covariantToken, fasta.templateExtraneousModifier);
-      covariantToken = null;
-      --modifierCount;
-    }
+    reportExtraneousModifier(abstractToken);
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(staticToken);
+    return token;
+  }
+
+  /// Parse modifiers for variable declarations.
+  Token parseVariableDeclarationModifiers(
+      Token token, TypeContinuation typeContinuation,
+      {Token varFinalOrConst}) {
+    token = parseModifiers(token, typeContinuation,
+        varFinalOrConst: varFinalOrConst);
+
+    reportExtraneousModifier(abstractToken);
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(externalToken);
+    reportExtraneousModifier(staticToken);
     return token;
   }
 
@@ -311,29 +311,23 @@
     this.typeContinuation = typeContinuation;
     if (externalToken != null) {
       this.externalToken = externalToken;
-      ++modifierCount;
     }
     if (staticOrCovariant != null) {
       if (optional('static', staticOrCovariant)) {
         this.staticToken = staticOrCovariant;
-        ++modifierCount;
       } else if (optional('covariant', staticOrCovariant)) {
         this.covariantToken = staticOrCovariant;
-        ++modifierCount;
       } else {
         throw "Internal error: "
             "Unexpected staticOrCovariant '$staticOrCovariant'.";
       }
     } else if (staticToken != null) {
       this.staticToken = staticToken;
-      ++modifierCount;
     } else if (covariantToken != null) {
       this.covariantToken = covariantToken;
-      ++modifierCount;
     }
     if (varFinalOrConst != null) {
       this.varFinalOrConst = varFinalOrConst;
-      ++modifierCount;
       if (optional('var', varFinalOrConst)) {
         varToken = varFinalOrConst;
       } else if (optional('final', varFinalOrConst)) {
@@ -385,7 +379,6 @@
     assert(optional('abstract', next));
     if (abstractToken == null) {
       abstractToken = next;
-      ++modifierCount;
       return next;
     }
 
@@ -401,7 +394,6 @@
     if (varFinalOrConst == null && covariantToken == null) {
       typeContinuation ??= TypeContinuation.Optional;
       varFinalOrConst = constToken = next;
-      ++modifierCount;
 
       if (afterFactory) {
         parser.reportRecoverableError(next, fasta.messageConstAfterFactory);
@@ -433,7 +425,6 @@
         staticToken == null &&
         !afterFactory) {
       covariantToken = next;
-      ++modifierCount;
 
       if (varToken != null) {
         parser.reportRecoverableError(next, fasta.messageCovariantAfterVar);
@@ -448,8 +439,7 @@
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateDuplicatedModifier);
     } else if (afterFactory) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateExtraneousModifier);
+      reportExtraneousModifier(next);
     } else if (constToken != null) {
       parser.reportRecoverableError(next, fasta.messageConstAndCovariant);
     } else if (staticToken != null) {
@@ -465,7 +455,6 @@
     assert(optional('external', next));
     if (externalToken == null) {
       externalToken = next;
-      ++modifierCount;
 
       if (afterFactory) {
         parser.reportRecoverableError(next, fasta.messageExternalAfterFactory);
@@ -489,7 +478,6 @@
     if (varFinalOrConst == null && !afterFactory) {
       typeContinuation ??= TypeContinuation.Optional;
       varFinalOrConst = finalToken = next;
-      ++modifierCount;
       return next;
     }
 
@@ -498,8 +486,7 @@
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateDuplicatedModifier);
     } else if (afterFactory) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateExtraneousModifier);
+      reportExtraneousModifier(next);
     } else if (constToken != null) {
       parser.reportRecoverableError(next, fasta.messageConstAndFinal);
     } else if (varToken != null) {
@@ -515,7 +502,6 @@
     assert(optional('static', next));
     if (covariantToken == null && staticToken == null && !afterFactory) {
       staticToken = next;
-      ++modifierCount;
 
       if (constToken != null) {
         parser.reportRecoverableError(next, fasta.messageStaticAfterConst);
@@ -534,8 +520,7 @@
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateDuplicatedModifier);
     } else if (afterFactory) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateExtraneousModifier);
+      reportExtraneousModifier(next);
     } else {
       throw 'Internal Error: Unhandled recovery: $next';
     }
@@ -548,7 +533,6 @@
     if (varFinalOrConst == null && !afterFactory) {
       typeContinuation = typeContinuationAfterVar(typeContinuation);
       varFinalOrConst = varToken = next;
-      ++modifierCount;
       return next;
     }
 
@@ -557,8 +541,7 @@
       parser.reportRecoverableErrorWithToken(
           next, fasta.templateDuplicatedModifier);
     } else if (afterFactory) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateExtraneousModifier);
+      reportExtraneousModifier(next);
     } else if (constToken != null) {
       parser.reportRecoverableError(next, fasta.messageConstAndVar);
     } else if (finalToken != null) {
@@ -568,6 +551,13 @@
     }
     return next;
   }
+
+  void reportExtraneousModifier(Token token) {
+    if (token != null) {
+      parser.reportRecoverableErrorWithToken(
+          token, fasta.templateExtraneousModifier);
+    }
+  }
 }
 
 class ModifierRecoveryContext extends ModifierContext {
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index dc3c99e..5a847d1 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -5530,62 +5530,47 @@
     return parseVariablesDeclarationMaybeSemicolon(token, true);
   }
 
-  Token parseVariablesDeclarationRest(Token token) {
-    return parseVariablesDeclarationMaybeSemicolonRest(token, true);
-  }
-
-  Token parseVariablesDeclarationNoSemicolonRest(Token token) {
-    // Only called when parsing a for loop, so this is for parsing locals.
-    return parseVariablesDeclarationMaybeSemicolonRest(token, false);
-  }
-
   Token parseVariablesDeclarationMaybeSemicolon(
       Token token, bool endWithSemicolon) {
     Token next = token.next;
 
-    MemberKind memberKind = MemberKind.Local;
     TypeContinuation typeContinuation;
     Token varFinalOrConst;
     if (isModifier(next)) {
       if (optional('var', next)) {
         typeContinuation = TypeContinuation.OptionalAfterVar;
-        varFinalOrConst = token = parseModifier(token);
+        varFinalOrConst = token = token.next;
         next = token.next;
       } else if (optional('final', next) || optional('const', next)) {
         typeContinuation = TypeContinuation.Optional;
-        varFinalOrConst = token = parseModifier(token);
+        varFinalOrConst = token = token.next;
         next = token.next;
       }
 
       if (isModifier(next)) {
         // Recovery
-        ModifierRecoveryContext modifierContext = new ModifierRecoveryContext(
-            this, memberKind, null, true, typeContinuation);
-        token = modifierContext.parseRecovery(token,
+        ModifierRecoveryContext2 modifierContext =
+            new ModifierRecoveryContext2(this);
+        token = modifierContext.parseVariableDeclarationModifiers(
+            token, typeContinuation,
             varFinalOrConst: varFinalOrConst);
 
         varFinalOrConst = modifierContext.varFinalOrConst;
-        listener.handleModifiers(modifierContext.modifierCount);
-
-        memberKind = modifierContext.memberKind;
         typeContinuation = modifierContext.typeContinuation;
         modifierContext = null;
-      } else {
-        listener.handleModifiers(1);
       }
-    } else {
-      listener.handleModifiers(0);
     }
 
-    token = parseType(
-        token, typeContinuation ?? TypeContinuation.Required, null, memberKind);
-    return parseVariablesDeclarationMaybeSemicolonRest(token, endWithSemicolon);
+    token = parseType(token, typeContinuation ?? TypeContinuation.Required,
+        null, MemberKind.Local);
+    return parseVariablesDeclarationMaybeSemicolonRest(
+        token, varFinalOrConst, endWithSemicolon);
   }
 
   Token parseVariablesDeclarationMaybeSemicolonRest(
-      Token token, bool endWithSemicolon) {
+      Token token, Token varFinalOrConst, bool endWithSemicolon) {
     int count = 1;
-    listener.beginVariablesDeclaration(token.next);
+    listener.beginVariablesDeclaration(token.next, varFinalOrConst);
     token = parseOptionallyInitializedIdentifier(token);
     while (optional(',', token.next)) {
       token = parseOptionallyInitializedIdentifier(token.next);
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index 33e5379..be0d0d0 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -182,12 +182,13 @@
     forwardDeclaredLabels[name] = target;
   }
 
-  void claimLabel(String name) {
-    if (forwardDeclaredLabels == null) return;
-    forwardDeclaredLabels.remove(name);
+  bool claimLabel(String name) {
+    if (forwardDeclaredLabels == null ||
+        forwardDeclaredLabels.remove(name) == null) return false;
     if (forwardDeclaredLabels.length == 0) {
       forwardDeclaredLabels = null;
     }
+    return true;
   }
 
   Map<String, Builder> get unclaimedForwardDeclarations {
diff --git a/pkg/front_end/lib/src/fasta/severity.dart b/pkg/front_end/lib/src/fasta/severity.dart
index 02da071..fb1fb5a 100644
--- a/pkg/front_end/lib/src/fasta/severity.dart
+++ b/pkg/front_end/lib/src/fasta/severity.dart
@@ -12,3 +12,21 @@
   nit,
   warning,
 }
+
+const Map<String, String> severityEnumNames = const <String, String>{
+  'CONTEXT': 'context',
+  'ERROR': 'error',
+  'ERROR_LEGACY_WARNING': 'errorLegacyWarning',
+  'INTERNAL_PROBLEM': 'internalProblem',
+  'NIT': 'nit',
+  'WARNING': 'warning',
+};
+
+const Map<String, Severity> severityEnumValues = const <String, Severity>{
+  'CONTEXT': Severity.context,
+  'ERROR': Severity.error,
+  'ERROR_LEGACY_WARNING': Severity.errorLegacyWarning,
+  'INTERNAL_PROBLEM': Severity.internalProblem,
+  'NIT': Severity.nit,
+  'WARNING': Severity.warning,
+};
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index b03c6fa..d4216e5 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -1,12 +1,10 @@
 # Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
-
-# Please don't add more failures to this status file of the "analyzerCode" or
-# "example" varity.
-
 AbstractClassInstantiation/analyzerCode: Fail
 AbstractClassInstantiation/example: Fail
+AbstractClassMember/script5: Fail
+AbstractClassMember/script6: Fail
 AbstractNotSync/analyzerCode: Fail
 AbstractNotSync/example: Fail
 AbstractRedirectedClassInstantiation/analyzerCode: Fail
@@ -24,12 +22,9 @@
 AwaitAsIdentifier/example: Fail
 AwaitNotAsync/analyzerCode: Fail
 AwaitNotAsync/example: Fail
+BreakOutsideOfLoop/script1: Fail
 BuiltInIdentifierAsType/example: Fail
 BuiltInIdentifierInDeclaration/example: Fail
-CandidateFound/analyzerCode: Fail
-CandidateFound/example: Fail
-CandidateFoundIsDefaultConstructor/analyzerCode: Fail
-CandidateFoundIsDefaultConstructor/example: Fail
 CannotReadPackagesFile/analyzerCode: Fail
 CannotReadPackagesFile/example: Fail
 CannotReadSdkSpecification/analyzerCode: Fail
@@ -61,19 +56,27 @@
 ConflictsWithSetterWarning/example: Fail
 ConflictsWithTypeVariable/analyzerCode: Fail
 ConflictsWithTypeVariable/example: Fail
-ConflictsWithTypeVariableCause/analyzerCode: Fail
-ConflictsWithTypeVariableCause/example: Fail
+ConstAfterFactory/script1: Fail
+ConstAndCovariant/script2: Fail
+ConstAndFinal/script1: Fail
+ConstAndVar/script1: Fail
 ConstConstructorNonFinalField/analyzerCode: Fail
 ConstConstructorNonFinalField/example: Fail
-ConstConstructorNonFinalFieldCause/analyzerCode: Fail
-ConstConstructorNonFinalFieldCause/example: Fail
 ConstFieldWithoutInitializer/example: Fail
 ConstructorHasNoSuchNamedParameter/analyzerCode: Fail
 ConstructorHasNoSuchNamedParameter/example: Fail
 ConstructorNotFound/analyzerCode: Fail
 ConstructorNotFound/example: Fail
+ContinueOutsideOfLoop/script1: Fail
+ContinueWithoutLabelInCase/script1: Fail
 CouldNotParseUri/analyzerCode: Fail
 CouldNotParseUri/example: Fail
+CovariantAfterFinal/script1: Fail
+CovariantAfterVar/script1: Fail
+CovariantAndStatic/script1: Fail
+CovariantAndStatic/script2: Fail
+CovariantMember/script1: Fail
+CovariantMember/script2: Fail
 CyclicClassHierarchy/analyzerCode: Fail
 CyclicClassHierarchy/example: Fail
 CyclicTypedef/analyzerCode: Fail
@@ -81,11 +84,11 @@
 DeferredAfterPrefix/example: Fail
 DeferredPrefixDuplicated/analyzerCode: Fail
 DeferredPrefixDuplicated/example: Fail
-DeferredPrefixDuplicatedCause/analyzerCode: Fail
-DeferredPrefixDuplicatedCause/example: Fail
 DeferredTypeAnnotation/example: Fail
 DillOutlineSummary/analyzerCode: Fail
 DillOutlineSummary/example: Fail
+DirectiveAfterDeclaration/script1: Fail
+DirectiveAfterDeclaration/script2: Fail
 DuplicateDeferred/example: Fail
 DuplicatePrefix/example: Fail
 DuplicatedDefinition/analyzerCode: Fail
@@ -97,26 +100,34 @@
 DuplicatedImport/example: Fail
 DuplicatedImportInType/analyzerCode: Fail
 DuplicatedImportInType/example: Fail
+DuplicatedModifier/script1: Fail
 DuplicatedName/analyzerCode: Fail
 DuplicatedName/example: Fail
 DuplicatedParameterName/analyzerCode: Fail
 DuplicatedParameterName/example: Fail
-DuplicatedParameterNameCause/analyzerCode: Fail
-DuplicatedParameterNameCause/example: Fail
 Encoding/analyzerCode: Fail
 EnumConstantSameNameAsEnclosing/analyzerCode: Fail
 EnumConstantSameNameAsEnclosing/example: Fail
+EqualityCannotBeEqualityOperand/script1: Fail
+EqualityCannotBeEqualityOperand/script2: Fail
+ExpectedAnInitializer/script1: Fail
+ExpectedBlock/script: Fail
+ExpectedBlockToSkip/script: Fail
+ExpectedButGot/script1: Fail
+ExpectedButGot/script2: Fail
 ExpectedClassBody/example: Fail
 ExpectedClassMember/example: Fail
 ExpectedDeclaration/example: Fail
 ExpectedFunctionBody/example: Fail
 ExpectedOpenParens/analyzerCode: Fail
 ExpectedOpenParens/example: Fail
+ExpectedStatement/statement: Fail
 ExpectedString/example: Fail
 ExpectedToken/example: Fail
 ExpectedType/example: Fail
 ExpectedUri/analyzerCode: Fail
 ExpectedUri/example: Fail
+ExportAfterPart/script1: Fail
 ExportHidesExport/analyzerCode: Fail
 ExportHidesExport/example: Fail
 ExpressionNotMetadata/analyzerCode: Fail
@@ -124,7 +135,26 @@
 ExtendingEnum/analyzerCode: Fail
 ExtendingEnum/example: Fail
 ExtendingRestricted/example: Fail
+ExternalConstructorWithBody/script1: Fail
 ExternalFactoryRedirection/example: Fail
+ExternalFactoryWithBody/script1: Fail
+ExtraneousModifier/script1: Fail
+ExtraneousModifier/script10: Fail
+ExtraneousModifier/script11: Fail
+ExtraneousModifier/script12: Fail
+ExtraneousModifier/script13: Fail
+ExtraneousModifier/script16: Fail
+ExtraneousModifier/script17: Fail
+ExtraneousModifier/script18: Fail
+ExtraneousModifier/script19: Fail
+ExtraneousModifier/script2: Fail
+ExtraneousModifier/script20: Fail
+ExtraneousModifier/script3: Fail
+ExtraneousModifier/script4: Fail
+ExtraneousModifier/script5: Fail
+ExtraneousModifier/script7: Fail
+ExtraneousModifier/script8: Fail
+ExtraneousModifier/script9: Fail
 FactoryNotSync/analyzerCode: Fail
 FactoryNotSync/example: Fail
 FastaCLIArgumentRequired/analyzerCode: Fail
@@ -133,69 +163,36 @@
 FastaUsageLong/example: Fail
 FastaUsageShort/analyzerCode: Fail
 FastaUsageShort/example: Fail
+FieldInitializerOutsideConstructor/script1: Fail
+FinalAndCovariant/script2: Fail
 FinalFieldWithoutInitializer/example: Fail
 FinalInstanceVariableAlreadyInitialized/analyzerCode: Fail
 FinalInstanceVariableAlreadyInitialized/example: Fail
-FinalInstanceVariableAlreadyInitializedCause/analyzerCode: Fail
-FinalInstanceVariableAlreadyInitializedCause/example: Fail
 FunctionHasNoSuchNamedParameter/analyzerCode: Fail
 FunctionHasNoSuchNamedParameter/example: Fail
 FunctionTypeDefaultValue/example: Fail
+FunctionTypedParameterVar/script1: Fail
 GeneratorReturnsValue/example: Fail
 GetterNotFound/analyzerCode: Fail
 GetterNotFound/example: Fail
 GetterWithFormals/example: Fail
+IllegalAssignmentToNonAssignable/script1: Fail
 IllegalMethodName/analyzerCode: Fail
 IllegalMethodName/example: Fail
 IllegalMixin/analyzerCode: Fail
 IllegalMixin/example: Fail
 IllegalMixinDueToConstructors/analyzerCode: Fail
 IllegalMixinDueToConstructors/example: Fail
-IllegalMixinDueToConstructorsCause/analyzerCode: Fail
-IllegalMixinDueToConstructorsCause/example: Fail
+ImplementsBeforeExtends/script: Fail
+ImplementsBeforeWith/script: Fail
 ImplicitCallOfNonMethod/analyzerCode: Fail
 ImplicitCallOfNonMethod/example: Fail
+ImportAfterPart/script1: Fail
 ImportHidesImport/analyzerCode: Fail
 ImportHidesImport/example: Fail
 InputFileNotFound/analyzerCode: Fail
 InputFileNotFound/example: Fail
 IntegerLiteralIsOutOfRange/example: Fail
-InternalProblemAlreadyInitialized/analyzerCode: Fail
-InternalProblemAlreadyInitialized/example: Fail
-InternalProblemBodyOnAbstractMethod/analyzerCode: Fail
-InternalProblemBodyOnAbstractMethod/example: Fail
-InternalProblemConstructorNotFound/analyzerCode: Fail
-InternalProblemConstructorNotFound/example: Fail
-InternalProblemExtendingUnmodifiableScope/analyzerCode: Fail
-InternalProblemExtendingUnmodifiableScope/example: Fail
-InternalProblemMissingContext/analyzerCode: Fail
-InternalProblemMissingContext/example: Fail
-InternalProblemMissingSeverity/analyzerCode: Fail
-InternalProblemMissingSeverity/example: Fail
-InternalProblemNotFound/analyzerCode: Fail
-InternalProblemNotFound/example: Fail
-InternalProblemNotFoundIn/analyzerCode: Fail
-InternalProblemNotFoundIn/example: Fail
-InternalProblemPreviousTokenNotFound/analyzerCode: Fail
-InternalProblemPreviousTokenNotFound/example: Fail
-InternalProblemPrivateConstructorAccess/analyzerCode: Fail
-InternalProblemPrivateConstructorAccess/example: Fail
-InternalProblemProvidedBothCompileSdkAndSdkSummary/analyzerCode: Fail
-InternalProblemProvidedBothCompileSdkAndSdkSummary/example: Fail
-InternalProblemStackNotEmpty/analyzerCode: Fail
-InternalProblemStackNotEmpty/example: Fail
-InternalProblemSuperclassNotFound/analyzerCode: Fail
-InternalProblemSuperclassNotFound/example: Fail
-InternalProblemUnexpected/analyzerCode: Fail
-InternalProblemUnexpected/example: Fail
-InternalProblemUnhandled/analyzerCode: Fail
-InternalProblemUnhandled/example: Fail
-InternalProblemUnimplemented/analyzerCode: Fail
-InternalProblemUnimplemented/example: Fail
-InternalProblemUnsupported/analyzerCode: Fail
-InternalProblemUnsupported/example: Fail
-InternalProblemUriMissingScheme/analyzerCode: Fail
-InternalProblemUriMissingScheme/example: Fail
 InternalVerificationError/analyzerCode: Fail
 InternalVerificationError/example: Fail
 InterpolationInUri/example: Fail
@@ -209,9 +206,14 @@
 InvalidInitializer/analyzerCode: Fail
 InvalidInitializer/example: Fail
 InvalidInlineFunctionType/analyzerCode: Fail
+InvalidInlineFunctionType/declaration: Fail
 InvalidPackageUri/analyzerCode: Fail
 InvalidPackageUri/example: Fail
 InvalidVoid/analyzerCode: Fail
+InvalidVoid/script1: Fail
+InvalidVoid/script2: Fail
+LibraryDirectiveNotFirst/script2: Fail
+LibraryDirectiveNotFirst/script3: Fail
 ListLiteralTooManyTypeArguments/analyzerCode: Fail
 ListLiteralTooManyTypeArguments/example: Fail
 ListLiteralTypeArgumentMismatch/analyzerCode: Fail
@@ -232,6 +234,8 @@
 MethodHasNoSuchNamedParameter/example: Fail
 MethodNotFound/analyzerCode: Fail
 MethodNotFound/example: Fail
+MissingAssignableSelector/script1: Fail
+MissingAssignmentInInitializer/script1: Fail
 MissingInput/analyzerCode: Fail
 MissingInput/example: Fail
 MissingMain/analyzerCode: Fail
@@ -241,14 +245,19 @@
 MissingPrefixInDeferredImport/example: Fail
 MixinInferenceNoMatchingClass/analyzerCode: Fail
 MixinInferenceNoMatchingClass/example: Fail
+MultipleExtends/script: Fail
+MultipleImplements/script: Fail
 MultipleLibraryDirectives/example: Fail
+MultipleWith/script: Fail
 NamedFunctionExpression/example: Fail
 NativeClauseShouldBeAnnotation/example: Fail
 NoFormals/example: Fail
 NoUnnamedConstructorInObject/analyzerCode: Fail
 NoUnnamedConstructorInObject/example: Fail
+NonAsciiIdentifier/expression: Fail
 NonInstanceTypeVariableUse/analyzerCode: Fail
 NonInstanceTypeVariableUse/example: Fail
+NonPartOfDirectiveInPart/script1: Fail
 NotAPrefixInTypeAnnotation/example: Fail
 NotAType/example: Fail
 NotAnLvalue/analyzerCode: Fail
@@ -263,8 +272,6 @@
 OperatorParameterMismatch2/example: Fail
 OperatorWithOptionalFormals/analyzerCode: Fail
 OperatorWithOptionalFormals/example: Fail
-OverriddenMethodCause/analyzerCode: Fail
-OverriddenMethodCause/example: Fail
 OverrideFewerNamedArguments/analyzerCode: Fail
 OverrideFewerNamedArguments/example: Fail
 OverrideFewerPositionalArguments/analyzerCode: Fail
@@ -289,14 +296,10 @@
 PartOfUseUri/example: Fail
 PartTwice/analyzerCode: Fail
 PartTwice/example: Fail
-PatchClassOrigin/analyzerCode: Fail
-PatchClassOrigin/example: Fail
 PatchClassTypeVariablesMismatch/analyzerCode: Fail
 PatchClassTypeVariablesMismatch/example: Fail
 PatchDeclarationMismatch/analyzerCode: Fail
 PatchDeclarationMismatch/example: Fail
-PatchDeclarationOrigin/analyzerCode: Fail
-PatchDeclarationOrigin/example: Fail
 PatchInjectionFailed/analyzerCode: Fail
 PatchInjectionFailed/example: Fail
 PatchNonExternal/analyzerCode: Fail
@@ -309,6 +312,8 @@
 PreviousUseOfName/example: Fail
 PrivateNamedParameter/analyzerCode: Fail
 PrivateNamedParameter/example: Fail
+RedirectingConstructorWithBody/script1: Fail
+RedirectionInNonFactory/script1: Fail
 RedirectionTargetNotFound/analyzerCode: Fail
 RedirectionTargetNotFound/example: Fail
 ReturnTypeFunctionExpression/analyzerCode: Fail
@@ -329,6 +334,7 @@
 SourceOutlineSummary/example: Fail
 StackOverflow/analyzerCode: Fail
 StackOverflow/example: Fail
+StaticAfterConst/script1: Fail
 SuperAsExpression/analyzerCode: Fail
 SuperAsExpression/example: Fail
 SuperAsIdentifier/analyzerCode: Fail
@@ -366,15 +372,17 @@
 TooManyArgumentsToFunction/example: Fail
 TooManyArgumentsToMethod/analyzerCode: Fail
 TooManyArgumentsToMethod/example: Fail
+TopLevelOperator/script1: Fail
+TopLevelOperator/script2: Fail
+TopLevelOperator/script3: Fail
 TypeAfterVar/example: Fail
 TypeArgumentMismatch/analyzerCode: Fail
 TypeArgumentMismatch/example: Fail
+TypeArgumentsOnTypeVariable/script1: Fail
 TypeNotFound/analyzerCode: Fail
 TypeNotFound/example: Fail
 TypeVariableDuplicatedName/analyzerCode: Fail
 TypeVariableDuplicatedName/example: Fail
-TypeVariableDuplicatedNameCause/analyzerCode: Fail
-TypeVariableDuplicatedNameCause/example: Fail
 TypeVariableInStaticContext/analyzerCode: Fail
 TypeVariableInStaticContext/example: Fail
 TypeVariableSameNameAsEnclosing/analyzerCode: Fail
@@ -382,11 +390,26 @@
 TypedefNotFunction/analyzerCode: Fail
 TypedefNotFunction/example: Fail
 UnexpectedDollarInString/analyzerCode: Fail
+UnexpectedDollarInString/script1: Fail
+UnexpectedDollarInString/script2: Fail
+UnexpectedDollarInString/script3: Fail
+UnexpectedDollarInString/script4: Fail
+UnexpectedToken/script1: Fail
 UnmatchedToken/analyzerCode: Fail
+UnmatchedToken/script1: Fail
+UnmatchedToken/script3: Fail
 UnresolvedPrefixInTypeAnnotation/example: Fail
 Unspecified/analyzerCode: Fail
 Unspecified/example: Fail
+UnsupportedPrefixPlus/script: Fail
+UnterminatedString/script2: Fail
+UnterminatedString/script4: Fail
+UnterminatedString/script5: Fail
+UnterminatedString/script6: Fail
+UnterminatedString/script7: Fail
+UnterminatedString/script8: Fail
 UnterminatedToken/analyzerCode: Fail
 UnterminatedToken/example: Fail
 YieldAsIdentifier/example: Fail
 YieldNotGenerator/example: Fail
+
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index edbcd7b..403ba23 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -137,6 +137,12 @@
   dart2jsCode: BODY_EXPECTED
   script: "main();"
 
+ExpectedStatement:
+  template: "Expected a statement."
+  analyzerCode: MISSING_STATEMENT
+  dart2jsCode: "*fatal*"
+  statement: "void;"
+
 ExpectedButGot:
   template: "Expected '#string' before this."
   # Consider the second example below: the parser expects a ')' before 'y', but
@@ -615,6 +621,14 @@
   script:
     - "main() { switch (x) {case 1: continue;} }"
 
+DuplicateLabelInSwitchStatement:
+  template: "The label '#string' was already used in this switch statement."
+  tip: "Try choosing a different name for this label."
+  analyzerCode: DUPLICATE_LABEL_IN_SWITCH_STATEMENT
+  dart2jsCode: "*fatal*"
+  statement:
+    - "switch (0) {l1: case 0: break; l1: case 1: break;}"
+
 InitializedVariableInForEach:
   template: "The loop variable in a for-each loop can't be initialized."
   tip: "Try removing the initializer, or using a different kind of loop."
diff --git a/pkg/front_end/test/fasta/messages_test.dart b/pkg/front_end/test/fasta/messages_test.dart
index 9e46ca3..e254b8d 100644
--- a/pkg/front_end/test/fasta/messages_test.dart
+++ b/pkg/front_end/test/fasta/messages_test.dart
@@ -13,7 +13,30 @@
 import "package:testing/testing.dart"
     show Chain, ChainContext, Result, Step, TestDescription, runMe;
 
-import "package:yaml/yaml.dart" show loadYaml;
+import "package:yaml/yaml.dart" show YamlList, YamlMap, YamlNode, loadYamlNode;
+
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show ProblemHandler;
+
+import 'package:front_end/src/api_prototype/memory_file_system.dart'
+    show MemoryFileSystem, MemoryFileSystemEntity;
+
+import 'package:front_end/src/fasta/fasta_codes.dart' show LocatedMessage;
+
+import 'package:front_end/src/fasta/severity.dart'
+    show Severity, severityEnumValues;
+
+import 'package:front_end/src/testing/hybrid_file_system.dart'
+    show HybridFileSystem;
+
+import "../../tool/_fasta/entry_points.dart" show BatchCompiler;
+
+ProblemHandler problemHandler(List<List> problems) {
+  return (LocatedMessage problem, Severity severity, String formatted, int line,
+      int column) {
+    problems.add([problem, severity, formatted, line, column]);
+  };
+}
 
 class MessageTestDescription extends TestDescription {
   @override
@@ -24,7 +47,7 @@
 
   final String name;
 
-  final Map data;
+  final YamlMap data;
 
   final Example example;
 
@@ -40,30 +63,54 @@
     const Compile(),
   ];
 
+  final MemoryFileSystem fileSystem;
+
+  final BatchCompiler compiler;
+
+  final List<List> problems;
+
+  MessageTestSuite()
+      : this.internal(new MemoryFileSystem(Uri.parse("org-dartlang-fasta:///")),
+            <List>[]);
+
+  MessageTestSuite.internal(this.fileSystem, this.problems)
+      : compiler = new BatchCompiler.forTesting(
+            new HybridFileSystem(fileSystem), problemHandler(problems));
+
   /// Convert all the examples found in `messages.yaml` to a test
-  /// description. In addition, for each problem found, create a test
-  /// description that has a problem. This problem will then be reported as a
+  /// description. In addition, create a test description for each kind of
+  /// problem that a message can have. This problem will then be reported as a
   /// failure by the [Validate] step that can be suppressed via the status
   /// file.
   Stream<MessageTestDescription> list(Chain suite) async* {
     Uri uri = suite.uri.resolve("messages.yaml");
     File file = new File.fromUri(uri);
-    Map yaml = loadYaml(await file.readAsString());
-    for (String name in yaml.keys) {
-      var data = yaml[name];
-      if (data is String) continue;
+    YamlMap messages = loadYamlNode(await file.readAsString(), sourceUrl: uri);
+    for (String name in messages.keys) {
+      YamlNode messageNode = messages.nodes[name];
+      var message = messageNode.value;
+      if (message is String) continue;
 
       List<String> unknownKeys = <String>[];
       List<Example> examples = <Example>[];
       String analyzerCode;
       String dart2jsCode;
+      Severity severity;
+      YamlNode badSeverity;
 
-      for (String key in data.keys) {
-        var value = data[key];
+      for (String key in message.keys) {
+        YamlNode node = message.nodes[key];
+        var value = node.value;
         switch (key) {
           case "template":
           case "tip":
+            break;
+
           case "severity":
+            severity = severityEnumValues[value];
+            if (severity == null) {
+              badSeverity = node;
+            }
             break;
 
           case "analyzerCode":
@@ -75,60 +122,61 @@
             break;
 
           case "bytes":
-            if (value.first is List) {
-              for (List bytes in value) {
+            YamlList list = node;
+            if (list.first is List) {
+              for (YamlList bytes in list.nodes) {
                 int i = 0;
                 examples.add(new BytesExample("bytes${++i}", name, bytes));
               }
             } else {
-              examples.add(new BytesExample("bytes", name, value));
+              examples.add(new BytesExample("bytes", name, list));
             }
             break;
 
           case "declaration":
-            if (value is List) {
+            if (node is YamlList) {
               int i = 0;
-              for (String declaration in value) {
+              for (YamlNode declaration in node.nodes) {
                 examples.add(new DeclarationExample(
                     "declaration${++i}", name, declaration));
               }
             } else {
-              examples.add(new DeclarationExample("declaration", name, value));
+              examples.add(new DeclarationExample("declaration", name, node));
             }
             break;
 
           case "expression":
-            if (value is List) {
+            if (node is YamlList) {
               int i = 0;
-              for (String expression in value) {
+              for (YamlNode expression in node.nodes) {
                 examples.add(new ExpressionExample(
                     "expression${++i}", name, expression));
               }
             } else {
-              examples.add(new ExpressionExample("expression", name, value));
+              examples.add(new ExpressionExample("expression", name, node));
             }
             break;
 
           case "script":
-            if (value is List) {
+            if (node is YamlList) {
               int i = 0;
-              for (String script in value) {
+              for (YamlNode script in node.nodes) {
                 examples.add(new ScriptExample("script${++i}", name, script));
               }
             } else {
-              examples.add(new ScriptExample("script", name, value));
+              examples.add(new ScriptExample("script", name, node));
             }
             break;
 
           case "statement":
-            if (value is List) {
+            if (node is YamlList) {
               int i = 0;
-              for (String statement in value) {
+              for (YamlNode statement in node.nodes) {
                 examples.add(
                     new StatementExample("statement${++i}", name, statement));
               }
             } else {
-              examples.add(new StatementExample("statement", name, value));
+              examples.add(new StatementExample("statement", name, node));
             }
             break;
 
@@ -138,47 +186,107 @@
       }
 
       MessageTestDescription createDescription(
-          String subName, Example example, String problem) {
+          String subName, Example example, String problem,
+          {location}) {
         String shortName = "$name/$subName";
         if (problem != null) {
-          String base = "${Uri.base}";
-          String filename = "$uri";
-          if (filename.startsWith(base)) {
-            filename = filename.substring(base.length);
-          }
-          var location = data.span.start;
+          String filename = relativize(uri);
+          location ??= message.span.start;
           int line = location.line;
           int column = location.column;
           problem = "$filename:$line:$column: error:\n$problem";
         }
         return new MessageTestDescription(uri.resolve("#$shortName"), shortName,
-            name, data, example, problem);
+            name, messageNode, example, problem);
       }
 
       for (Example example in examples) {
         yield createDescription(example.name, example, null);
       }
 
-      if (unknownKeys.isNotEmpty) {
-        yield createDescription(
-            "knownKeys", null, "Unknown keys: ${unknownKeys.join(' ')}");
-      }
+      yield createDescription(
+          "knownKeys",
+          null,
+          unknownKeys.isNotEmpty
+              ? "Unknown keys: ${unknownKeys.join(' ')}."
+              : null);
 
-      if (examples.isEmpty) {
-        yield createDescription("example", null, "No example for $name");
-      }
+      yield createDescription(
+          "severity",
+          null,
+          badSeverity != null
+              ? "Unknown severity: '${badSeverity.value}'."
+              : null,
+          location: badSeverity?.span?.start);
 
-      if (analyzerCode == null) {
-        yield createDescription(
-            "analyzerCode", null, "No analyzer code for $name");
-      } else {
-        if (dart2jsCode == null) {
-          yield createDescription(
-              "dart2jsCode", null, "No dart2js code for $name");
-        }
-      }
+      bool exampleAndAnalyzerCodeRequired = (severity != Severity.context &&
+          severity != Severity.internalProblem);
+
+      yield createDescription(
+          "example",
+          null,
+          exampleAndAnalyzerCodeRequired && examples.isEmpty
+              ? "No example for $name, please add at least one example."
+              : null);
+
+      yield createDescription(
+          "analyzerCode",
+          null,
+          exampleAndAnalyzerCodeRequired && analyzerCode == null
+              ? "No analyzer code for $name."
+                  "\nTry running"
+                  " <BUILDDIR>/dart-sdk/bin/dartanalyzer --format=machine"
+                  " on an example to find the code."
+                  " The code is printed just before the file name."
+              : null);
+
+      yield createDescription(
+          "dart2jsCode",
+          null,
+          exampleAndAnalyzerCodeRequired &&
+                  analyzerCode != null &&
+                  dart2jsCode == null
+              ? "No dart2js code for $name."
+                  " Try using *ignored* or *fatal*"
+              : null);
     }
   }
+
+  Uri addSource(String name, List<int> bytes) {
+    Uri uri = fileSystem.currentDirectory.resolve(name);
+    MemoryFileSystemEntity entity = fileSystem.entityForUri(uri);
+    entity.writeAsBytesSync(bytes);
+    return uri;
+  }
+
+  List<List> takeProblems() {
+    List<List> result = problems.toList();
+    problems.clear();
+    return result;
+  }
+
+  String formatProblems(String message, Example example, List<List> problems) {
+    var span = example.node.span;
+    StringBuffer buffer = new StringBuffer();
+    buffer
+      ..write(relativize(span.sourceUrl))
+      ..write(":")
+      ..write(span.start.line)
+      ..write(":")
+      ..write(span.start.column)
+      ..write(": error: ")
+      ..write(message);
+    buffer.write("\n${span.text}");
+    for (List problem in problems) {
+      LocatedMessage messsage = problem[0];
+      String formatted = problem[2];
+      buffer.write("\nCode: ${messsage.code.name}");
+      buffer.write("\n  > ");
+      buffer.write(formatted.replaceAll("\n", "\n  > "));
+    }
+
+    return "$buffer";
+  }
 }
 
 abstract class Example {
@@ -188,23 +296,32 @@
 
   Example(this.name, this.expectedCode);
 
+  YamlNode get node;
+
   Uint8List get bytes;
 }
 
 class BytesExample extends Example {
   @override
+  final YamlList node;
+
+  @override
   final Uint8List bytes;
 
-  BytesExample(String name, String code, List bytes)
-      : bytes = new Uint8List.fromList(bytes),
+  BytesExample(String name, String code, this.node)
+      : bytes = new Uint8List.fromList(node.value),
         super(name, code);
 }
 
 class DeclarationExample extends Example {
+  @override
+  final YamlNode node;
+
   final String declaration;
 
-  DeclarationExample(String name, String code, this.declaration)
-      : super(name, code);
+  DeclarationExample(String name, String code, this.node)
+      : declaration = node.value,
+        super(name, code);
 
   @override
   Uint8List get bytes {
@@ -218,10 +335,14 @@
 }
 
 class StatementExample extends Example {
+  @override
+  final YamlNode node;
+
   final String statement;
 
-  StatementExample(String name, String code, this.statement)
-      : super(name, code);
+  StatementExample(String name, String code, this.node)
+      : statement = node.value,
+        super(name, code);
 
   @override
   Uint8List get bytes {
@@ -234,10 +355,14 @@
 }
 
 class ExpressionExample extends Example {
+  @override
+  final YamlNode node;
+
   final String expression;
 
-  ExpressionExample(String name, String code, this.expression)
-      : super(name, code);
+  ExpressionExample(String name, String code, this.node)
+      : expression = node.value,
+        super(name, code);
 
   @override
   Uint8List get bytes {
@@ -250,9 +375,14 @@
 }
 
 class ScriptExample extends Example {
+  @override
+  final YamlNode node;
+
   final String script;
 
-  ScriptExample(String name, String code, this.script) : super(name, code);
+  ScriptExample(String name, String code, this.node)
+      : script = node.value,
+        super(name, code);
 
   @override
   Uint8List get bytes {
@@ -281,13 +411,45 @@
   String get name => "compile";
 
   Future<Result<Null>> run(Example example, MessageTestSuite suite) async {
-    // TODO(ahe): This is where I should actually compile the example and
-    // verify that only one message is reported, and it is the expected
-    // message.
-    if (example is! BytesExample) {
-      print(utf8.decode(example.bytes));
+    if (example == null) return pass(null);
+    String name = "${example.expectedCode}/${example.name}";
+    Uri uri = suite.addSource("${name}.dart", example.bytes);
+    print("Compiling $uri");
+    List<List> problems;
+    try {
+      await suite.compiler.batchCompile(<String>["--strong", "$uri"]);
+    } finally {
+      problems = suite.takeProblems();
     }
-    return pass(null);
+    List<List> unexpectedProblems = <List>[];
+    for (List problem in problems) {
+      LocatedMessage message = problem[0];
+      if (message.code.name != example.expectedCode) {
+        unexpectedProblems.add(problem);
+      }
+    }
+    if (unexpectedProblems.isEmpty) {
+      switch (problems.length) {
+        case 0:
+          return fail(
+              null,
+              suite.formatProblems("No problem reported in ${example.name}:",
+                  example, problems));
+        case 1:
+          return pass(null);
+        default:
+          return fail(
+              null,
+              suite.formatProblems(
+                  "Problem reported multiple times in ${example.name}:",
+                  example,
+                  problems));
+      }
+    }
+    return fail(
+        null,
+        suite.formatProblems("Too many problems reported in ${example.name}:",
+            example, problems));
   }
 }
 
@@ -296,5 +458,15 @@
   return new MessageTestSuite();
 }
 
+String relativize(Uri uri) {
+  String base = "${Uri.base}";
+  String filename = "$uri";
+  if (filename.startsWith(base)) {
+    return filename.substring(base.length);
+  } else {
+    return filename;
+  }
+}
+
 main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, "../../testing.json");
diff --git a/pkg/front_end/test/incremental_load_from_dill_test.dart b/pkg/front_end/test/incremental_load_from_dill_test.dart
index 5236bed..686cda7 100644
--- a/pkg/front_end/test/incremental_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_test.dart
@@ -18,6 +18,12 @@
     show writeProgramToFile, serializeProgram;
 import "package:front_end/src/api_prototype/memory_file_system.dart"
     show MemoryFileSystem;
+import 'package:kernel/kernel.dart'
+    show Class, EmptyStatement, Library, Procedure, Program;
+
+import 'package:front_end/src/fasta/fasta_codes.dart' show LocatedMessage;
+
+import 'package:front_end/src/fasta/severity.dart' show Severity;
 
 Directory outDir;
 
@@ -26,6 +32,12 @@
   await runPassingTest(testDisappearingLibrary);
   await runPassingTest(testDeferredLibrary);
   await runPassingTest(testStrongModeMixins);
+  await runFailingTest(
+      testStrongModeMixins2,
+      "testStrongModeMixins2_a.dart: Error: "
+      "The parameter 'value' of the method 'A::child' has type");
+  await runPassingTest(testInvalidateExportOfMain);
+  await runPassingTest(testInvalidatePart);
 }
 
 void runFailingTest(dynamic test, String expectContains) async {
@@ -52,6 +64,132 @@
   }
 }
 
+/// Invalidate a part file.
+void testInvalidatePart() async {
+  final Uri a = outDir.uri.resolve("testInvalidatePart_a.dart");
+  final Uri b = outDir.uri.resolve("testInvalidatePart_b.dart");
+  final Uri c = outDir.uri.resolve("testInvalidatePart_c.dart");
+  final Uri d = outDir.uri.resolve("testInvalidatePart_d.dart");
+
+  Uri output = outDir.uri.resolve("testInvalidatePart_full.dill");
+  Uri bootstrappedOutput =
+      outDir.uri.resolve("testInvalidatePart_full_from_bootstrap.dill");
+
+  new File.fromUri(a).writeAsStringSync("""
+    library a;
+    import 'testInvalidatePart_c.dart';
+    part 'testInvalidatePart_b.dart';
+    """);
+  new File.fromUri(b).writeAsStringSync("""
+    part of a;
+    b() { print("b"); }
+    """);
+  new File.fromUri(c).writeAsStringSync("""
+    library c;
+    part 'testInvalidatePart_d.dart';
+    """);
+  new File.fromUri(d).writeAsStringSync("""
+    part of c;
+    d() { print("d"); }
+    """);
+
+  Stopwatch stopwatch = new Stopwatch()..start();
+  await normalCompile(a, output, options: getOptions(true));
+  print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
+
+  stopwatch.reset();
+  bool bootstrapResult = await bootstrapCompile(
+      a, bootstrappedOutput, output, [b],
+      performSizeTests: true, options: getOptions(true));
+  print("Bootstrapped compile(s) from ${output.pathSegments.last} "
+      "took ${stopwatch.elapsedMilliseconds} ms");
+  Expect.isTrue(bootstrapResult);
+
+  // Compare the two files.
+  List<int> normalDillData = new File.fromUri(output).readAsBytesSync();
+  List<int> bootstrappedDillData =
+      new File.fromUri(bootstrappedOutput).readAsBytesSync();
+  checkBootstrappedIsEqual(normalDillData, bootstrappedDillData);
+}
+
+/// Invalidate the entrypoint which just exports another file (which has main).
+void testInvalidateExportOfMain() async {
+  final Uri a = outDir.uri.resolve("testInvalidateExportOfMain_a.dart");
+  final Uri b = outDir.uri.resolve("testInvalidateExportOfMain_b.dart");
+
+  Uri output = outDir.uri.resolve("testInvalidateExportOfMain_full.dill");
+  Uri bootstrappedOutput =
+      outDir.uri.resolve("testInvalidateExportOfMain_full_from_bootstrap.dill");
+
+  new File.fromUri(a).writeAsStringSync("""
+    export 'testInvalidateExportOfMain_b.dart';
+    """);
+  new File.fromUri(b).writeAsStringSync("""
+    main() { print("hello"); }
+    """);
+
+  Stopwatch stopwatch = new Stopwatch()..start();
+  await normalCompile(a, output, options: getOptions(true));
+  print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
+
+  stopwatch.reset();
+  bool bootstrapResult = await bootstrapCompile(
+      a, bootstrappedOutput, output, [a],
+      performSizeTests: true, options: getOptions(true));
+  print("Bootstrapped compile(s) from ${output.pathSegments.last} "
+      "took ${stopwatch.elapsedMilliseconds} ms");
+  Expect.isTrue(bootstrapResult);
+
+  // Compare the two files.
+  List<int> normalDillData = new File.fromUri(output).readAsBytesSync();
+  List<int> bootstrappedDillData =
+      new File.fromUri(bootstrappedOutput).readAsBytesSync();
+  checkBootstrappedIsEqual(normalDillData, bootstrappedDillData);
+}
+
+/// Compile in strong mode. Use mixins.
+void testStrongModeMixins2() async {
+  final Uri a = outDir.uri.resolve("testStrongModeMixins2_a.dart");
+  final Uri b = outDir.uri.resolve("testStrongModeMixins2_b.dart");
+
+  Uri output = outDir.uri.resolve("testStrongModeMixins2_full.dill");
+  Uri bootstrappedOutput =
+      outDir.uri.resolve("testStrongModeMixins2_full_from_bootstrap.dill");
+
+  new File.fromUri(a).writeAsStringSync("""
+    import 'testStrongModeMixins2_b.dart';
+    class A extends Object with B<C>, D<Object> {}
+    """);
+  new File.fromUri(b).writeAsStringSync("""
+    abstract class B<ChildType extends Object> extends Object {
+      ChildType get child => null;
+      set child(ChildType value) {}
+    }
+
+    class C extends Object {}
+
+    abstract class D<T extends Object> extends Object with B<T> {}
+    """);
+
+  Stopwatch stopwatch = new Stopwatch()..start();
+  await normalCompile(a, output, options: getOptions(true));
+  print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
+
+  stopwatch.reset();
+  bool bootstrapResult = await bootstrapCompile(
+      a, bootstrappedOutput, output, [a],
+      performSizeTests: true, options: getOptions(true));
+  print("Bootstrapped compile(s) from ${output.pathSegments.last} "
+      "took ${stopwatch.elapsedMilliseconds} ms");
+  Expect.isTrue(bootstrapResult);
+
+  // Compare the two files.
+  List<int> normalDillData = new File.fromUri(output).readAsBytesSync();
+  List<int> bootstrappedDillData =
+      new File.fromUri(bootstrappedOutput).readAsBytesSync();
+  checkBootstrappedIsEqual(normalDillData, bootstrappedDillData);
+}
+
 /// Compile in strong mode. Invalidate a file so type inferrer starts
 /// on something compiled from source and (potentially) goes into
 /// something loaded from dill.
@@ -73,13 +211,13 @@
     """);
 
   Stopwatch stopwatch = new Stopwatch()..start();
-  await normalCompile(a, output, options: getOptions()..strongMode = true);
+  await normalCompile(a, output, options: getOptions(true));
   print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
 
   stopwatch.reset();
   bool bootstrapResult = await bootstrapCompile(
       a, bootstrappedOutput, output, [a],
-      performSizeTests: false, options: getOptions()..strongMode = true);
+      performSizeTests: true, options: getOptions(true));
   print("Bootstrapped compile(s) from ${output.pathSegments.last} "
       "took ${stopwatch.elapsedMilliseconds} ms");
   Expect.isTrue(bootstrapResult);
@@ -221,7 +359,7 @@
       }
       """);
 
-    CompilerOptions options = getOptions();
+    CompilerOptions options = getOptions(false);
     options.fileSystem = fs;
     options.sdkRoot = null;
     options.sdkSummary = sdkSummary;
@@ -229,6 +367,7 @@
         new IncrementalKernelGenerator(options, main);
     Stopwatch stopwatch = new Stopwatch()..start();
     var program = await compiler.computeDelta();
+    throwOnEmptyMixinBodies(program);
     print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
     libCount2 = serializeProgram(program);
     if (program.libraries.length != 2) {
@@ -251,7 +390,7 @@
         print("hello from b!");
       }
       """);
-    CompilerOptions options = getOptions();
+    CompilerOptions options = getOptions(false);
     options.fileSystem = fs;
     options.sdkRoot = null;
     options.sdkSummary = sdkSummary;
@@ -261,6 +400,7 @@
     compiler.invalidate(b);
     Stopwatch stopwatch = new Stopwatch()..start();
     var program = await compiler.computeDelta();
+    throwOnEmptyMixinBodies(program);
     print("Bootstrapped compile took ${stopwatch.elapsedMilliseconds} ms");
     if (program.libraries.length != 1) {
       throw "Expected 1 library, got ${program.libraries.length}";
@@ -268,42 +408,83 @@
   }
 }
 
-CompilerOptions getOptions() {
+CompilerOptions getOptions(bool strong) {
   final Uri sdkRoot = computePlatformBinariesLocation();
   var options = new CompilerOptions()
     ..sdkRoot = sdkRoot
     ..librariesSpecificationUri = Uri.base.resolve("sdk/lib/libraries.json")
-    ..strongMode = false;
+    ..onProblem = (LocatedMessage message, Severity severity, String formatted,
+        int line, int column) {
+      if (severity == Severity.error || severity == Severity.warning) {
+        Expect.fail("Unexpected error: $formatted");
+      }
+    }
+    ..strongMode = strong;
+  if (strong) {
+    options.sdkSummary =
+        computePlatformBinariesLocation().resolve("vm_platform_strong.dill");
+  } else {
+    options.sdkSummary =
+        computePlatformBinariesLocation().resolve("vm_platform.dill");
+  }
   return options;
 }
 
 Future<bool> normalCompile(Uri input, Uri output,
     {CompilerOptions options}) async {
-  options ??= getOptions();
+  options ??= getOptions(false);
   IncrementalCompiler compiler = new IncrementalKernelGenerator(options, input);
-  var y = await compiler.computeDelta();
-  await writeProgramToFile(y, output);
-  return compiler.bootstrapSuccess;
+  var program = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(program);
+  await writeProgramToFile(program, output);
+  return compiler.initializedFromDill;
+}
+
+void throwOnEmptyMixinBodies(Program program) {
+  int empty = countEmptyMixinBodies(program);
+  if (empty != 0) {
+    throw "Expected 0 empty bodies in mixins, but found $empty";
+  }
+}
+
+int countEmptyMixinBodies(Program program) {
+  int empty = 0;
+  for (Library lib in program.libraries) {
+    for (Class c in lib.classes) {
+      if (c.isSyntheticMixinImplementation) {
+        // Assume mixin
+        for (Procedure p in c.procedures) {
+          if (p.function.body is EmptyStatement) {
+            empty++;
+          }
+        }
+      }
+    }
+  }
+  return empty;
 }
 
 Future<bool> bootstrapCompile(
     Uri input, Uri output, Uri bootstrapWith, List<Uri> invalidateUris,
     {bool performSizeTests: true, CompilerOptions options}) async {
-  options ??= getOptions();
+  options ??= getOptions(false);
   IncrementalCompiler compiler =
       new IncrementalKernelGenerator(options, input, bootstrapWith);
   for (Uri invalidateUri in invalidateUris) {
     compiler.invalidate(invalidateUri);
   }
   var bootstrappedProgram = await compiler.computeDelta();
-  bool result = compiler.bootstrapSuccess;
+  throwOnEmptyMixinBodies(bootstrappedProgram);
+  bool result = compiler.initializedFromDill;
   await writeProgramToFile(bootstrappedProgram, output);
   for (Uri invalidateUri in invalidateUris) {
     compiler.invalidate(invalidateUri);
   }
 
   var partialProgram = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(partialProgram);
   var emptyProgram = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(emptyProgram);
 
   var fullLibUris =
       bootstrappedProgram.libraries.map((lib) => lib.importUri).toList();
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index f3404a3..82caa0e 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -7,7 +7,9 @@
 import 'dart:io' show exit;
 
 import 'package:front_end/src/api_prototype/compiler_options.dart'
-    show CompilerOptions;
+    show CompilerOptions, ProblemHandler;
+
+import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
@@ -226,7 +228,9 @@
     String programName,
     ParsedArguments parsedArguments,
     bool areRestArgumentsInputs,
-    bool verbose) {
+    bool verbose,
+    FileSystem fileSystem,
+    ProblemHandler problemHandler) {
   final Map<String, dynamic> options = parsedArguments.options;
 
   final List<String> arguments = parsedArguments.arguments;
@@ -295,6 +299,8 @@
 
     return new ProcessedOptions(
         new CompilerOptions()
+          ..fileSystem = fileSystem
+          ..onProblem = problemHandler
           ..sdkSummary = options["--platform"]
           ..librariesSpecificationUri =
               Uri.base.resolveUri(new Uri.file(arguments[1]))
@@ -329,6 +335,8 @@
           computePlatformBinariesLocation().resolve("vm_platform.dill"));
 
   CompilerOptions compilerOptions = new CompilerOptions()
+    ..fileSystem = fileSystem
+    ..onProblem = problemHandler
     ..compileSdk = compileSdk
     ..sdkRoot = sdk
     ..sdkSummary = platform
@@ -356,7 +364,10 @@
     String programName,
     List<String> arguments,
     bool areRestArgumentsInputs,
-    dynamic f(CompilerContext context, List<String> restArguments)) {
+    dynamic f(CompilerContext context, List<String> restArguments),
+    {FileSystem fileSystem,
+    ProblemHandler problemHandler}) {
+  fileSystem ??= new CompilerOptions().fileSystem;
   bool verbose = false;
   for (String argument in arguments) {
     if (argument == "--") break;
@@ -370,8 +381,8 @@
   CommandLineProblem problem;
   try {
     parsedArguments = ParsedArguments.parse(arguments, optionSpecification);
-    options = analyzeCommandLine(
-        programName, parsedArguments, areRestArgumentsInputs, verbose);
+    options = analyzeCommandLine(programName, parsedArguments,
+        areRestArgumentsInputs, verbose, fileSystem, problemHandler);
   } on CommandLineProblem catch (e) {
     options = new ProcessedOptions(new CompilerOptions());
     problem = e;
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index 2555edb..a68f9fd 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -17,6 +17,11 @@
 
 import 'package:kernel/target/targets.dart' show TargetFlags, targets;
 
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show ProblemHandler;
+
+import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
+
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
 
@@ -86,16 +91,24 @@
 class BatchCompiler {
   final Stream lines;
 
+  final FileSystem fileSystem;
+
+  final ProblemHandler problemHandler;
+
   Uri platformUri;
 
   Program platformComponent;
 
-  BatchCompiler(this.lines);
+  BatchCompiler(this.lines)
+      : fileSystem = null,
+        problemHandler = null;
+
+  BatchCompiler.forTesting(this.fileSystem, this.problemHandler) : lines = null;
 
   run() async {
     await for (String line in lines) {
       try {
-        if (await batchCompile(line)) {
+        if (await batchCompile(JSON.decode(line))) {
           stdout.writeln(">>> TEST OK");
         } else {
           stdout.writeln(">>> TEST FAIL");
@@ -111,8 +124,7 @@
     }
   }
 
-  Future<bool> batchCompile(String line) async {
-    List<String> arguments = new List<String>.from(JSON.decode(line));
+  Future<bool> batchCompile(List<String> arguments) async {
     try {
       return await withGlobalOptions("compile", arguments, true,
           (CompilerContext c, _) async {
@@ -120,7 +132,7 @@
         bool verbose = options.verbose;
         Ticker ticker = new Ticker(isVerbose: verbose);
         if (verbose) {
-          print("Compiling directly to Kernel: $line");
+          print("Compiling directly to Kernel: ${arguments.join(' ')}");
         }
         if (platformComponent == null || platformUri != options.sdkSummary) {
           platformUri = options.sdkSummary;
@@ -140,7 +152,7 @@
         }
         root.unbindAll();
         return c.errors.isEmpty;
-      });
+      }, fileSystem: fileSystem, problemHandler: problemHandler);
     } on deprecated_InputError catch (e) {
       CompilerContext.runWithDefaultOptions(
           (c) => c.report(deprecated_InputError.toMessage(e), Severity.error));
@@ -234,7 +246,6 @@
 
   Future<Uri> compile({bool sansPlatform: false}) async {
     KernelTarget kernelTarget = await buildOutline();
-    if (exitCode != 0) return null;
     Uri uri = c.options.output;
     Program program = await kernelTarget.buildProgram(verify: c.options.verify);
     if (c.options.debugDump) {
@@ -253,8 +264,10 @@
       }
       program = userCode;
     }
-    await writeProgramToFile(program, uri);
-    ticker.logMs("Wrote program to ${uri.toFilePath()}");
+    if (uri.scheme == "file") {
+      await writeProgramToFile(program, uri);
+      ticker.logMs("Wrote program to ${uri.toFilePath()}");
+    }
     return uri;
   }
 }
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 83d821c..0ec9a18 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -10,14 +10,7 @@
 
 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',
-  'CONTEXT': 'context',
-};
+import "package:front_end/src/fasta/severity.dart" show severityEnumNames;
 
 main(List<String> arguments) async {
   var port = new ReceivePort();
diff --git a/pkg/js_ast/lib/src/template.dart b/pkg/js_ast/lib/src/template.dart
index e85f33a..1c09529 100644
--- a/pkg/js_ast/lib/src/template.dart
+++ b/pkg/js_ast/lib/src/template.dart
@@ -103,7 +103,8 @@
     if (arguments is List) {
       if (arguments.length != positionalArgumentCount) {
         throw 'Wrong number of template arguments, given ${arguments.length}, '
-            'expected $positionalArgumentCount';
+            'expected $positionalArgumentCount'
+            ', source: "$source"';
       }
       return instantiator(arguments);
     }
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 4782a7d..b0aa91d 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 1cb3111..fb19994 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 78a59c6..0d4982d 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/kernel/lib/target/vm.dart b/pkg/kernel/lib/target/vm.dart
index 5079c65..6090179 100644
--- a/pkg/kernel/lib/target/vm.dart
+++ b/pkg/kernel/lib/target/vm.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 4ad291a..0db4862 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index 0eb36d1..5890d5f 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -3,7 +3,6 @@
 // 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';
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 1fbd076..7c5d041 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -119,6 +119,7 @@
 front_end/test/fasta/ast_builder_test: Pass, Slow, Timeout
 front_end/test/fasta/bootstrap_test: Skip # Issue 31902
 front_end/test/fasta/strong_test: Pass, Slow, Timeout
+front_end/test/incremental_load_from_dill_test: Pass, Slow
 front_end/test/src/incremental/hot_reload_e2e_test: Skip # Issue 31901
 front_end/test/whole_program_test: Skip # Issue 31902
 
diff --git a/pkg/vm/bin/frontend_server_starter.dart b/pkg/vm/bin/frontend_server_starter.dart
new file mode 100644
index 0000000..229410b
--- /dev/null
+++ b/pkg/vm/bin/frontend_server_starter.dart
@@ -0,0 +1,7 @@
+library frontend_server;
+
+import '../lib/frontend_server.dart';
+
+void main(List<String> args) {
+  starter(args);
+}
diff --git a/pkg/vm/lib/frontend_server.dart b/pkg/vm/lib/frontend_server.dart
new file mode 100644
index 0000000..4abf53c
--- /dev/null
+++ b/pkg/vm/lib/frontend_server.dart
@@ -0,0 +1,484 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+library frontend_server;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' hide FileSystemEntity;
+
+import 'package:args/args.dart';
+// front_end/src imports below that require lint `ignore_for_file`
+// are a temporary state of things until frontend team builds better api
+// that would replace api used below. This api was made private in
+// an effort to discourage further use.
+// ignore_for_file: implementation_imports
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart'
+    show FileSystemEntity;
+import 'package:kernel/ast.dart';
+import 'package:kernel/binary/ast_to_binary.dart';
+import 'package:kernel/binary/limited_ast_to_binary.dart';
+import 'package:kernel/kernel.dart' show Program, loadProgramFromBytes;
+import 'package:kernel/target/targets.dart';
+import 'package:path/path.dart' as path;
+import 'package:usage/uuid/uuid.dart';
+import 'package:vm/incremental_compiler.dart' show IncrementalCompiler;
+import 'package:vm/kernel_front_end.dart' show compileToKernel;
+
+ArgParser argParser = new ArgParser(allowTrailingOptions: true)
+  ..addFlag('train',
+      help: 'Run through sample command line to produce snapshot',
+      negatable: false)
+  ..addFlag('incremental',
+      help: 'Run compiler in incremental mode', defaultsTo: false)
+  ..addOption('sdk-root',
+      help: 'Path to sdk root',
+      defaultsTo: '../../out/android_debug/flutter_patched_sdk')
+  ..addOption('platform', help: 'Platform kernel filename')
+  ..addFlag('aot',
+      help: 'Run compiler in AOT mode (enables whole-program transformations)',
+      defaultsTo: false)
+  ..addFlag('strong',
+      help: 'Run compiler in strong mode (uses strong mode semantics)',
+      defaultsTo: false)
+  ..addFlag('tfa',
+      help:
+          'Enable global type flow analysis and related transformations in AOT mode.',
+      defaultsTo: false)
+  ..addOption('entry-points',
+      help: 'Path to JSON file with the list of entry points',
+      allowMultiple: true)
+  ..addFlag('link-platform',
+      help:
+          'When in batch mode, link platform kernel file into result kernel file.'
+          ' Intended use is to satisfy different loading strategies implemented'
+          ' by gen_snapshot(which needs platform embedded) vs'
+          ' Flutter engine(which does not)',
+      defaultsTo: true)
+  ..addOption('output-dill',
+      help: 'Output path for the generated dill', defaultsTo: null)
+  ..addOption('output-incremental-dill',
+      help: 'Output path for the generated incremental dill', defaultsTo: null)
+  ..addOption('depfile',
+      help: 'Path to output Ninja depfile. Only used in batch mode.')
+  ..addOption('packages',
+      help: '.packages file to use for compilation', defaultsTo: null)
+  ..addOption('target',
+      help: 'Target model that determines what core libraries are available',
+      allowed: <String>['vm', 'flutter'],
+      defaultsTo: 'vm');
+
+String usage = '''
+Usage: server [options] [input.dart]
+
+If input dart source code is provided on the command line, then the server
+compiles it, generates dill file and exits.
+If no input dart source is provided on the command line, server waits for
+instructions from stdin.
+
+Instructions:
+- compile <input.dart>
+- recompile [<input.dart>] <boundary-key>
+<path/to/updated/file1.dart>
+<path/to/updated/file2.dart>
+...
+<boundary-key>
+- accept
+- quit
+
+Output:
+- result <boundary-key>
+<compiler output>
+<boundary-key> [<output.dill>]
+
+Options:
+${argParser.usage}
+''';
+
+enum _State { READY_FOR_INSTRUCTION, RECOMPILE_LIST }
+
+/// Actions that every compiler should implement.
+abstract class CompilerInterface {
+  /// Compile given Dart program identified by `filename` with given list of
+  /// `options`. When `generator` parameter is omitted, new instance of
+  /// `IncrementalKernelGenerator` is created by this method. Main use for this
+  /// parameter is for mocking in tests.
+  Future<Null> compile(
+    String filename,
+    ArgResults options, {
+    IncrementalCompiler generator,
+  });
+
+  /// Assuming some Dart program was previously compiled, recompile it again
+  /// taking into account some changed(invalidated) sources.
+  Future<Null> recompileDelta({String filename});
+
+  /// Accept results of previous compilation so that next recompilation cycle
+  /// won't recompile sources that were previously reported as changed.
+  void acceptLastDelta();
+
+  /// This let's compiler know that source file identifed by `uri` was changed.
+  void invalidate(Uri uri);
+
+  /// Resets incremental compiler accept/reject status so that next time
+  /// recompile is requested, complete kernel file is produced.
+  void resetIncrementalCompiler();
+}
+
+abstract class ProgramTransformer {
+  void transform(Program program);
+}
+
+/// Class that for test mocking purposes encapsulates creation of [BinaryPrinter].
+class BinaryPrinterFactory {
+  /// Creates new [BinaryPrinter] to write to [targetSink].
+  BinaryPrinter newBinaryPrinter(IOSink targetSink) {
+    return new LimitedBinaryPrinter(targetSink, (_) => true /* predicate */,
+        false /* excludeUriToSource */);
+  }
+}
+
+class FrontendCompiler implements CompilerInterface {
+  FrontendCompiler(this._outputStream,
+      {this.printerFactory, this.transformer}) {
+    _outputStream ??= stdout;
+    printerFactory ??= new BinaryPrinterFactory();
+  }
+
+  StringSink _outputStream;
+  BinaryPrinterFactory printerFactory;
+
+  CompilerOptions _compilerOptions;
+  Uri _mainSource;
+  ArgResults _options;
+
+  IncrementalCompiler _generator;
+  String _kernelBinaryFilename;
+  String _kernelBinaryFilenameIncremental;
+  String _kernelBinaryFilenameFull;
+
+  final ProgramTransformer transformer;
+
+  void setMainSourceFilename(String filename) {
+    final Uri filenameUri = Uri.base.resolveUri(new Uri.file(filename));
+    _mainSource = filenameUri;
+  }
+
+  @override
+  Future<Null> compile(
+    String filename,
+    ArgResults options, {
+    IncrementalCompiler generator,
+  }) async {
+    _options = options;
+    setMainSourceFilename(filename);
+    _kernelBinaryFilenameFull = _options['output-dill'] ?? '$filename.dill';
+    _kernelBinaryFilenameIncremental = _options['output-incremental-dill'] ??
+        (_options['output-dill'] != null
+            ? '${_options["output-dill"]}.incremental.dill'
+            : '$filename.incremental.dill');
+    _kernelBinaryFilename = _kernelBinaryFilenameFull;
+    final String boundaryKey = new Uuid().generateV4();
+    _outputStream.writeln('result $boundaryKey');
+    final Uri sdkRoot = _ensureFolderPath(options['sdk-root']);
+    final String platformKernelDill = options['platform'] ??
+        (options['strong'] ? 'platform_strong.dill' : 'platform.dill');
+    final CompilerOptions compilerOptions = new CompilerOptions()
+      ..sdkRoot = sdkRoot
+      ..packagesFileUri = options['packages'] != null
+          ? Uri.base.resolveUri(new Uri.file(options['packages']))
+          : null
+      ..strongMode = options['strong']
+      ..sdkSummary = sdkRoot.resolve(platformKernelDill)
+      ..reportMessages = true;
+
+    final TargetFlags targetFlags =
+        new TargetFlags(strongMode: options['strong']);
+    compilerOptions.target = getTarget(options['target'], targetFlags);
+
+    Program program;
+    if (options['incremental']) {
+      _compilerOptions = compilerOptions;
+      _generator = generator ??
+          _createGenerator(new Uri.file(_kernelBinaryFilenameFull));
+      await invalidateIfBootstrapping();
+      program = await _runWithPrintRedirection(() => _generator.compile());
+    } else {
+      if (options['link-platform']) {
+        // TODO(aam): Remove linkedDependencies once platform is directly embedded
+        // into VM snapshot and http://dartbug.com/30111 is fixed.
+        compilerOptions.linkedDependencies = <Uri>[
+          sdkRoot.resolve(platformKernelDill)
+        ];
+      }
+      program = await _runWithPrintRedirection(() => compileToKernel(
+          _mainSource, compilerOptions,
+          aot: options['aot'],
+          useGlobalTypeFlowAnalysis: options['tfa'],
+          entryPoints: options['entry-points']));
+    }
+    if (program != null) {
+      if (transformer != null) {
+        transformer.transform(program);
+      }
+
+      final IOSink sink = new File(_kernelBinaryFilename).openWrite();
+      final BinaryPrinter printer = printerFactory.newBinaryPrinter(sink);
+      printer.writeProgramFile(program);
+      await sink.close();
+      _outputStream.writeln('$boundaryKey $_kernelBinaryFilename');
+
+      final String depfile = options['depfile'];
+      if (depfile != null) {
+        await _writeDepfile(program, _kernelBinaryFilename, depfile);
+      }
+
+      _kernelBinaryFilename = _kernelBinaryFilenameIncremental;
+    } else
+      _outputStream.writeln(boundaryKey);
+    return null;
+  }
+
+  Future<Null> invalidateIfBootstrapping() async {
+    if (_kernelBinaryFilename != _kernelBinaryFilenameFull) return null;
+
+    try {
+      final File f = new File(_kernelBinaryFilenameFull);
+      if (!f.existsSync()) return null;
+
+      final Program program = loadProgramFromBytes(f.readAsBytesSync());
+      for (Uri uri in program.uriToSource.keys) {
+        if ('$uri' == '') continue;
+
+        final List<int> oldBytes = program.uriToSource[uri].source;
+        final FileSystemEntity entity =
+            _compilerOptions.fileSystem.entityForUri(uri);
+        if (!await entity.exists()) {
+          _generator.invalidate(uri);
+          continue;
+        }
+        final List<int> newBytes = await entity.readAsBytes();
+        if (oldBytes.length != newBytes.length) {
+          _generator.invalidate(uri);
+          continue;
+        }
+        for (int i = 0; i < oldBytes.length; ++i) {
+          if (oldBytes[i] != newBytes[i]) {
+            _generator.invalidate(uri);
+            continue;
+          }
+        }
+      }
+    } catch (e) {
+      // If there's a failure in the above block we might not have invalidated
+      // correctly. Create a new generator that doesn't bootstrap to avoid missing
+      // any changes.
+      _generator = _createGenerator(null);
+    }
+  }
+
+  @override
+  Future<Null> recompileDelta({String filename}) async {
+    final String boundaryKey = new Uuid().generateV4();
+    _outputStream.writeln('result $boundaryKey');
+    await invalidateIfBootstrapping();
+    if (filename != null) {
+      setMainSourceFilename(filename);
+    }
+    final Program deltaProgram =
+        await _generator.compile(entryPoint: _mainSource);
+
+    if (deltaProgram != null && transformer != null) {
+      transformer.transform(deltaProgram);
+    }
+
+    final IOSink sink = new File(_kernelBinaryFilename).openWrite();
+    final BinaryPrinter printer = printerFactory.newBinaryPrinter(sink);
+    printer.writeProgramFile(deltaProgram);
+    await sink.close();
+    _outputStream.writeln('$boundaryKey $_kernelBinaryFilename');
+    _kernelBinaryFilename = _kernelBinaryFilenameIncremental;
+    return null;
+  }
+
+  @override
+  void acceptLastDelta() {
+    _generator.accept();
+  }
+
+  @override
+  void invalidate(Uri uri) {
+    _generator.invalidate(uri);
+  }
+
+  @override
+  void resetIncrementalCompiler() {
+    _generator = _createGenerator(new Uri.file(_kernelBinaryFilenameFull));
+    _kernelBinaryFilename = _kernelBinaryFilenameFull;
+  }
+
+  IncrementalCompiler _createGenerator(Uri bootstrapDill) {
+    return new IncrementalCompiler(_compilerOptions, _mainSource,
+        bootstrapDill: bootstrapDill);
+  }
+
+  Uri _ensureFolderPath(String path) {
+    String uriPath = new Uri.file(path).toString();
+    if (!uriPath.endsWith('/')) {
+      uriPath = '$uriPath/';
+    }
+    return Uri.base.resolve(uriPath);
+  }
+
+  /// Runs the given function [f] in a Zone that redirects all prints into
+  /// [_outputStream].
+  Future<T> _runWithPrintRedirection<T>(Future<T> f()) {
+    return runZoned(() => new Future<T>(f),
+        zoneSpecification: new ZoneSpecification(
+            print: (Zone self, ZoneDelegate parent, Zone zone, String line) =>
+                _outputStream.writeln(line)));
+  }
+}
+
+String _escapePath(String path) {
+  return path.replaceAll(r'\', r'\\').replaceAll(r' ', r'\ ');
+}
+
+// https://ninja-build.org/manual.html#_depfile
+void _writeDepfile(Program program, String output, String depfile) async {
+  final IOSink file = new File(depfile).openWrite();
+  file.write(_escapePath(output));
+  file.write(':');
+  for (Uri dep in program.uriToSource.keys) {
+    file.write(' ');
+    file.write(_escapePath(dep.toFilePath()));
+  }
+  file.write('\n');
+  await file.close();
+}
+
+/// Listens for the compilation commands on [input] stream.
+/// This supports "interactive" recompilation mode of execution.
+void listenAndCompile(CompilerInterface compiler, Stream<List<int>> input,
+    ArgResults options, void quit(),
+    {IncrementalCompiler generator}) {
+  _State state = _State.READY_FOR_INSTRUCTION;
+  String boundaryKey;
+  String recompileFilename;
+  input
+      .transform(UTF8.decoder)
+      .transform(const LineSplitter())
+      .listen((String string) async {
+    switch (state) {
+      case _State.READY_FOR_INSTRUCTION:
+        const String COMPILE_INSTRUCTION_SPACE = 'compile ';
+        const String RECOMPILE_INSTRUCTION_SPACE = 'recompile ';
+        if (string.startsWith(COMPILE_INSTRUCTION_SPACE)) {
+          final String filename =
+              string.substring(COMPILE_INSTRUCTION_SPACE.length);
+          await compiler.compile(filename, options, generator: generator);
+        } else if (string.startsWith(RECOMPILE_INSTRUCTION_SPACE)) {
+          // 'recompile [<filename>] <boundarykey>'
+          //   where <boundarykey> can't have spaces
+          final String remainder =
+              string.substring(RECOMPILE_INSTRUCTION_SPACE.length);
+          final int spaceDelim = remainder.lastIndexOf(' ');
+          if (spaceDelim > -1) {
+            recompileFilename = remainder.substring(0, spaceDelim);
+            boundaryKey = remainder.substring(spaceDelim + 1);
+          } else {
+            boundaryKey = remainder;
+          }
+          state = _State.RECOMPILE_LIST;
+        } else if (string == 'accept') {
+          compiler.acceptLastDelta();
+        } else if (string == 'reset') {
+          compiler.resetIncrementalCompiler();
+        } else if (string == 'quit') {
+          quit();
+        }
+        break;
+      case _State.RECOMPILE_LIST:
+        if (string == boundaryKey) {
+          compiler.recompileDelta(filename: recompileFilename);
+          state = _State.READY_FOR_INSTRUCTION;
+        } else
+          compiler.invalidate(Uri.base.resolve(string));
+        break;
+    }
+  });
+}
+
+/// Entry point for this module, that creates `_FrontendCompiler` instance and
+/// processes user input.
+/// `compiler` is an optional parameter so it can be replaced with mocked
+/// version for testing.
+Future<int> starter(
+  List<String> args, {
+  CompilerInterface compiler,
+  Stream<List<int>> input,
+  StringSink output,
+  IncrementalCompiler generator,
+  BinaryPrinterFactory binaryPrinterFactory,
+}) async {
+  ArgResults options;
+  try {
+    options = argParser.parse(args);
+  } catch (error) {
+    print('ERROR: $error\n');
+    print(usage);
+    return 1;
+  }
+
+  if (options['train']) {
+    final String sdkRoot = options['sdk-root'];
+    final String platform = options['platform'];
+    final Directory temp =
+        Directory.systemTemp.createTempSync('train_frontend_server');
+    try {
+      final String outputTrainingDill = path.join(temp.path, 'app.dill');
+      final List<String> args = <String>[
+        '--incremental',
+        '--sdk-root=$sdkRoot',
+        '--output-dill=$outputTrainingDill',
+      ];
+      if (platform != null) {
+        args.add('--platform=${new Uri.file(platform)}');
+      }
+      options = argParser.parse(args);
+      compiler ??=
+          new FrontendCompiler(output, printerFactory: binaryPrinterFactory);
+
+      await compiler.compile(Platform.script.toFilePath(), options,
+          generator: generator);
+      compiler.acceptLastDelta();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      compiler.resetIncrementalCompiler();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      return 0;
+    } finally {
+      temp.deleteSync(recursive: true);
+    }
+  }
+
+  compiler ??= new FrontendCompiler(
+    output,
+    printerFactory: binaryPrinterFactory,
+  );
+
+  if (options.rest.isNotEmpty) {
+    await compiler.compile(options.rest[0], options, generator: generator);
+    return 0;
+  }
+
+  listenAndCompile(compiler, input ?? stdin, options, () {
+    exit(0);
+  }, generator: generator);
+  return 0;
+}
diff --git a/pkg/vm/test/frontend_server_test.dart b/pkg/vm/test/frontend_server_test.dart
new file mode 100644
index 0000000..481eb0c
--- /dev/null
+++ b/pkg/vm/test/frontend_server_test.dart
@@ -0,0 +1,540 @@
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:isolate';
+
+import 'package:args/src/arg_results.dart';
+import 'package:kernel/binary/ast_to_binary.dart';
+import 'package:kernel/ast.dart' show Program;
+import 'package:mockito/mockito.dart';
+import 'package:test/test.dart';
+import 'package:vm/incremental_compiler.dart';
+
+import '../lib/frontend_server.dart';
+
+class _MockedCompiler extends Mock implements CompilerInterface {}
+
+class _MockedIncrementalCompiler extends Mock implements IncrementalCompiler {}
+
+class _MockedBinaryPrinterFactory extends Mock implements BinaryPrinterFactory {
+}
+
+class _MockedBinaryPrinter extends Mock implements BinaryPrinter {}
+
+Future<int> main() async {
+  group('basic', () {
+    final CompilerInterface compiler = new _MockedCompiler();
+
+    test('train with mocked compiler completes', () async {
+      expect(await starter(<String>['--train'], compiler: compiler), equals(0));
+    });
+  });
+
+  group('batch compile with mocked compiler', () {
+    final CompilerInterface compiler = new _MockedCompiler();
+
+    test('compile from command line', () async {
+      final List<String> args = <String>[
+        'server.dart',
+        '--sdk-root',
+        'sdkroot',
+      ];
+      final int exitcode = await starter(args, compiler: compiler);
+      expect(exitcode, equals(0));
+      final List<ArgResults> capturedArgs = verify(compiler.compile(
+        argThat(equals('server.dart')),
+        captureAny,
+        generator: any,
+      ))
+          .captured;
+      expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
+      expect(capturedArgs.single['strong'], equals(false));
+    });
+
+    test('compile from command line (strong mode)', () async {
+      final List<String> args = <String>[
+        'server.dart',
+        '--sdk-root',
+        'sdkroot',
+        '--strong',
+      ];
+      final int exitcode = await starter(args, compiler: compiler);
+      expect(exitcode, equals(0));
+      final List<ArgResults> capturedArgs = verify(compiler.compile(
+        argThat(equals('server.dart')),
+        captureAny,
+        generator: any,
+      ))
+          .captured;
+      expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
+      expect(capturedArgs.single['strong'], equals(true));
+    });
+
+    test('compile from command line with link platform', () async {
+      final List<String> args = <String>[
+        'server.dart',
+        '--sdk-root',
+        'sdkroot',
+        '--link-platform',
+      ];
+      final int exitcode = await starter(args, compiler: compiler);
+      expect(exitcode, equals(0));
+      final List<ArgResults> capturedArgs = verify(compiler.compile(
+        argThat(equals('server.dart')),
+        captureAny,
+        generator: any,
+      ))
+          .captured;
+      expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
+      expect(capturedArgs.single['link-platform'], equals(true));
+      expect(capturedArgs.single['strong'], equals(false));
+    });
+  });
+
+  group('interactive compile with mocked compiler', () {
+    final CompilerInterface compiler = new _MockedCompiler();
+
+    final List<String> args = <String>[
+      '--sdk-root',
+      'sdkroot',
+    ];
+
+    test('compile one file', () async {
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final ReceivePort compileCalled = new ReceivePort();
+      when(compiler.compile(any, any, generator: any))
+          .thenAnswer((Invocation invocation) {
+        expect(invocation.positionalArguments[0], equals('server.dart'));
+        expect(
+            invocation.positionalArguments[1]['sdk-root'], equals('sdkroot'));
+        expect(invocation.positionalArguments[1]['strong'], equals(false));
+        compileCalled.sendPort.send(true);
+      });
+
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: inputStreamController.stream,
+      );
+      expect(exitcode, equals(0));
+      inputStreamController.add('compile server.dart\n'.codeUnits);
+      await compileCalled.first;
+      inputStreamController.close();
+    });
+  });
+
+  group('interactive compile with mocked compiler', () {
+    final CompilerInterface compiler = new _MockedCompiler();
+
+    final List<String> args = <String>[
+      '--sdk-root',
+      'sdkroot',
+    ];
+    final List<String> strongArgs = <String>[
+      '--sdk-root',
+      'sdkroot',
+      '--strong',
+    ];
+
+    test('compile one file', () async {
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final ReceivePort compileCalled = new ReceivePort();
+      when(compiler.compile(any, any, generator: any))
+          .thenAnswer((Invocation invocation) {
+        expect(invocation.positionalArguments[0], equals('server.dart'));
+        expect(
+            invocation.positionalArguments[1]['sdk-root'], equals('sdkroot'));
+        expect(invocation.positionalArguments[1]['strong'], equals(false));
+        compileCalled.sendPort.send(true);
+      });
+
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: inputStreamController.stream,
+      );
+      expect(exitcode, equals(0));
+      inputStreamController.add('compile server.dart\n'.codeUnits);
+      await compileCalled.first;
+      inputStreamController.close();
+    });
+
+    test('compile one file (strong mode)', () async {
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final ReceivePort compileCalled = new ReceivePort();
+      when(compiler.compile(any, any, generator: any))
+          .thenAnswer((Invocation invocation) {
+        expect(invocation.positionalArguments[0], equals('server.dart'));
+        expect(
+            invocation.positionalArguments[1]['sdk-root'], equals('sdkroot'));
+        expect(invocation.positionalArguments[1]['strong'], equals(true));
+        compileCalled.sendPort.send(true);
+      });
+
+      final int exitcode = await starter(
+        strongArgs,
+        compiler: compiler,
+        input: inputStreamController.stream,
+      );
+      expect(exitcode, equals(0));
+      inputStreamController.add('compile server.dart\n'.codeUnits);
+      await compileCalled.first;
+      inputStreamController.close();
+    });
+
+    test('compile few files', () async {
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final ReceivePort compileCalled = new ReceivePort();
+      int counter = 1;
+      when(compiler.compile(any, any, generator: any))
+          .thenAnswer((Invocation invocation) {
+        expect(invocation.positionalArguments[0],
+            equals('server${counter++}.dart'));
+        expect(
+            invocation.positionalArguments[1]['sdk-root'], equals('sdkroot'));
+        expect(invocation.positionalArguments[1]['strong'], equals(false));
+        compileCalled.sendPort.send(true);
+      });
+
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: streamController.stream,
+      );
+      expect(exitcode, equals(0));
+      streamController.add('compile server1.dart\n'.codeUnits);
+      streamController.add('compile server2.dart\n'.codeUnits);
+      await compileCalled.first;
+      streamController.close();
+    });
+  });
+
+  group('interactive incremental compile with mocked compiler', () {
+    final CompilerInterface compiler = new _MockedCompiler();
+
+    final List<String> args = <String>[
+      '--sdk-root',
+      'sdkroot',
+      '--incremental'
+    ];
+
+    test('recompile few files', () async {
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final ReceivePort recompileCalled = new ReceivePort();
+
+      when(compiler.recompileDelta(filename: null))
+          .thenAnswer((Invocation invocation) {
+        recompileCalled.sendPort.send(true);
+      });
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: streamController.stream,
+      );
+      expect(exitcode, equals(0));
+      streamController
+          .add('recompile abc\nfile1.dart\nfile2.dart\nabc\n'.codeUnits);
+      await recompileCalled.first;
+
+      verifyInOrder(<void>[
+        compiler.invalidate(Uri.base.resolve('file1.dart')),
+        compiler.invalidate(Uri.base.resolve('file2.dart')),
+        await compiler.recompileDelta(filename: null),
+      ]);
+      streamController.close();
+    });
+
+    test('recompile few files with new entrypoint', () async {
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final ReceivePort recompileCalled = new ReceivePort();
+
+      when(compiler.recompileDelta(filename: 'file2.dart'))
+          .thenAnswer((Invocation invocation) {
+        recompileCalled.sendPort.send(true);
+      });
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: streamController.stream,
+      );
+      expect(exitcode, equals(0));
+      streamController.add(
+          'recompile file2.dart abc\nfile1.dart\nfile2.dart\nabc\n'.codeUnits);
+      await recompileCalled.first;
+
+      verifyInOrder(<void>[
+        compiler.invalidate(Uri.base.resolve('file1.dart')),
+        compiler.invalidate(Uri.base.resolve('file2.dart')),
+        await compiler.recompileDelta(filename: 'file2.dart'),
+      ]);
+      streamController.close();
+    });
+
+    test('accept', () async {
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final ReceivePort acceptCalled = new ReceivePort();
+      when(compiler.acceptLastDelta()).thenAnswer((Invocation invocation) {
+        acceptCalled.sendPort.send(true);
+      });
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: inputStreamController.stream,
+      );
+      expect(exitcode, equals(0));
+      inputStreamController.add('accept\n'.codeUnits);
+      await acceptCalled.first;
+      inputStreamController.close();
+    });
+
+    test('reset', () async {
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final ReceivePort resetCalled = new ReceivePort();
+      when(compiler.resetIncrementalCompiler())
+          .thenAnswer((Invocation invocation) {
+        resetCalled.sendPort.send(true);
+      });
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: inputStreamController.stream,
+      );
+      expect(exitcode, equals(0));
+      inputStreamController.add('reset\n'.codeUnits);
+      await resetCalled.first;
+      inputStreamController.close();
+    });
+
+    test('compile then recompile', () async {
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final ReceivePort recompileCalled = new ReceivePort();
+
+      when(compiler.recompileDelta(filename: null))
+          .thenAnswer((Invocation invocation) {
+        recompileCalled.sendPort.send(true);
+      });
+      final int exitcode = await starter(
+        args,
+        compiler: compiler,
+        input: streamController.stream,
+      );
+      expect(exitcode, equals(0));
+      streamController.add('compile file1.dart\n'.codeUnits);
+      streamController.add('accept\n'.codeUnits);
+      streamController
+          .add('recompile def\nfile2.dart\nfile3.dart\ndef\n'.codeUnits);
+      await recompileCalled.first;
+
+      verifyInOrder(<void>[
+        await compiler.compile('file1.dart', any, generator: any),
+        compiler.acceptLastDelta(),
+        compiler.invalidate(Uri.base.resolve('file2.dart')),
+        compiler.invalidate(Uri.base.resolve('file3.dart')),
+        await compiler.recompileDelta(filename: null),
+      ]);
+      streamController.close();
+    });
+  });
+
+  group('interactive incremental compile with mocked IKG', () {
+    final List<String> args = <String>[
+      '--sdk-root',
+      'sdkroot',
+      '--incremental',
+    ];
+
+    test('compile then accept', () async {
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final StreamController<List<int>> stdoutStreamController =
+          new StreamController<List<int>>();
+      final IOSink ioSink = new IOSink(stdoutStreamController.sink);
+      ReceivePort receivedResult = new ReceivePort();
+
+      String boundaryKey;
+      stdoutStreamController.stream
+          .transform(UTF8.decoder)
+          .transform(const LineSplitter())
+          .listen((String s) {
+        const String RESULT_OUTPUT_SPACE = 'result ';
+        if (boundaryKey == null) {
+          if (s.startsWith(RESULT_OUTPUT_SPACE)) {
+            boundaryKey = s.substring(RESULT_OUTPUT_SPACE.length);
+          }
+        } else {
+          if (s.startsWith(boundaryKey)) {
+            boundaryKey = null;
+            receivedResult.sendPort.send(true);
+          }
+        }
+      });
+
+      final _MockedIncrementalCompiler generator =
+          new _MockedIncrementalCompiler();
+      when(generator.compile())
+          .thenAnswer((_) => new Future<Program>.value(new Program()));
+      final _MockedBinaryPrinterFactory printerFactory =
+          new _MockedBinaryPrinterFactory();
+      when(printerFactory.newBinaryPrinter(any))
+          .thenReturn(new _MockedBinaryPrinter());
+      final int exitcode = await starter(
+        args,
+        compiler: null,
+        input: streamController.stream,
+        output: ioSink,
+        generator: generator,
+        binaryPrinterFactory: printerFactory,
+      );
+      expect(exitcode, equals(0));
+
+      streamController.add('compile file1.dart\n'.codeUnits);
+      await receivedResult.first;
+      streamController.add('accept\n'.codeUnits);
+      receivedResult = new ReceivePort();
+      streamController.add('recompile def\nfile1.dart\ndef\n'.codeUnits);
+      await receivedResult.first;
+
+      streamController.close();
+    });
+
+    group('compile with output path', () {
+      final CompilerInterface compiler = new _MockedCompiler();
+
+      test('compile from command line', () async {
+        final List<String> args = <String>[
+          'server.dart',
+          '--sdk-root',
+          'sdkroot',
+          '--output-dill',
+          '/foo/bar/server.dart.dill',
+          '--output-incremental-dill',
+          '/foo/bar/server.incremental.dart.dill',
+        ];
+        final int exitcode = await starter(args, compiler: compiler);
+        expect(exitcode, equals(0));
+        final List<ArgResults> capturedArgs = verify(compiler.compile(
+          argThat(equals('server.dart')),
+          captureAny,
+          generator: any,
+        ))
+            .captured;
+        expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
+        expect(capturedArgs.single['strong'], equals(false));
+      });
+    });
+  });
+
+  group('full compiler tests', () {
+    final platformKernel =
+        computePlatformBinariesLocation().resolve('vm_platform_strong.dill');
+    final sdkRoot = computePlatformBinariesLocation();
+
+    Directory tempDir;
+    setUp(() {
+      var systemTempDir = Directory.systemTemp;
+      tempDir = systemTempDir.createTempSync('foo');
+    });
+
+    tearDown(() {
+      tempDir.delete(recursive: true);
+    });
+
+    test('recompile request keeps incremental output dill filename', () async {
+      var file = new File('${tempDir.path}/foo.dart')..createSync();
+      file.writeAsStringSync("main() {}\n");
+      var dillFile = new File('${tempDir.path}/app.dill');
+      expect(dillFile.existsSync(), equals(false));
+      final List<String> args = <String>[
+        '--sdk-root=${sdkRoot.toFilePath()}',
+        '--strong',
+        '--incremental',
+        '--platform=${platformKernel.path}',
+        '--output-dill=${dillFile.path}'
+      ];
+
+      final StreamController<List<int>> streamController =
+          new StreamController<List<int>>();
+      final StreamController<List<int>> stdoutStreamController =
+          new StreamController<List<int>>();
+      final IOSink ioSink = new IOSink(stdoutStreamController.sink);
+      StreamController<String> receivedResults = new StreamController<String>();
+
+      String boundaryKey;
+      stdoutStreamController.stream
+          .transform(UTF8.decoder)
+          .transform(const LineSplitter())
+          .listen((String s) {
+        const String RESULT_OUTPUT_SPACE = 'result ';
+        if (boundaryKey == null) {
+          if (s.startsWith(RESULT_OUTPUT_SPACE)) {
+            boundaryKey = s.substring(RESULT_OUTPUT_SPACE.length);
+          }
+        } else {
+          if (s.startsWith(boundaryKey)) {
+            receivedResults.add(s.substring(boundaryKey.length + 1));
+            boundaryKey = null;
+          }
+        }
+      });
+      int exitcode =
+          await starter(args, input: streamController.stream, output: ioSink);
+      expect(exitcode, equals(0));
+      streamController.add('compile ${file.path}\n'.codeUnits);
+      int count = 0;
+      Completer<bool> allDone = new Completer<bool>();
+      receivedResults.stream.listen((String outputFilename) {
+        if (count == 0) {
+          // First request is to 'compile', which results in full kernel file.
+          expect(dillFile.existsSync(), equals(true));
+          expect(outputFilename, dillFile.path);
+          count += 1;
+          streamController.add('accept\n'.codeUnits);
+          var file2 = new File('${tempDir.path}/bar.dart')..createSync();
+          file2.writeAsStringSync("main() {}\n");
+          streamController.add('recompile ${file2.path} abc\n'
+              '${file2.path}\n'
+              'abc\n'
+              .codeUnits);
+        } else {
+          expect(count, 1);
+          // Second request is to 'recompile', which results in incremental
+          // kernel file.
+          var dillIncFile = new File('${dillFile.path}.incremental.dill');
+          expect(outputFilename, dillIncFile.path);
+          expect(dillIncFile.existsSync(), equals(true));
+          allDone.complete(true);
+        }
+      });
+      expect(await allDone.future, true);
+    });
+  });
+  return 0;
+}
+
+/// Computes the location of platform binaries, that is, compiled `.dill` files
+/// of the platform libraries that are used to avoid recompiling those
+/// libraries.
+Uri computePlatformBinariesLocation() {
+  // The directory of the Dart VM executable.
+  Uri vmDirectory = Uri.base
+      .resolveUri(new Uri.file(Platform.resolvedExecutable))
+      .resolve(".");
+  if (vmDirectory.path.endsWith("/bin/")) {
+    // Looks like the VM is in a `/bin/` directory, so this is running from a
+    // built SDK.
+    return vmDirectory.resolve("../lib/_internal/");
+  } else {
+    // We assume this is running from a build directory (for example,
+    // `out/ReleaseX64` or `xcodebuild/ReleaseX64`).
+    return vmDirectory;
+  }
+}
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index 7e3f880..8031f9e 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -14,6 +14,7 @@
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "bin/log.h"
 
 namespace dart {
 namespace bin {
@@ -24,6 +25,12 @@
 char** Platform::argv_ = NULL;
 
 static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
+  Log::PrintErr(
+      "\n===== DART STANDALONE VM CRASH =====\n"
+      "version=%s\n"
+      "si_signo=%s(%d), si_code=%d, si_addr=%p\n",
+      Dart_VersionString(), strsignal(siginfo->si_signo), siginfo->si_signo,
+      siginfo->si_code, siginfo->si_addr);
   Dart_DumpNativeStackTrace(context);
   abort();
 }
@@ -62,7 +69,10 @@
     perror("sigaction() failed.");
     return false;
   }
-
+  if (sigaction(SIGILL, &act, NULL) != 0) {
+    perror("sigaction() failed.");
+    return false;
+  }
   return true;
 }
 
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index e681f03..0d5d885 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -14,6 +14,7 @@
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "bin/log.h"
 
 namespace dart {
 namespace bin {
@@ -24,6 +25,12 @@
 char** Platform::argv_ = NULL;
 
 static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
+  Log::PrintErr(
+      "\n===== DART STANDALONE VM CRASH =====\n"
+      "version=%s\n"
+      "si_signo=%s(%d), si_code=%d, si_addr=%p\n",
+      Dart_VersionString(), strsignal(siginfo->si_signo), siginfo->si_signo,
+      siginfo->si_code, siginfo->si_addr);
   Dart_DumpNativeStackTrace(context);
   abort();
 }
@@ -62,6 +69,10 @@
     perror("sigaction() failed.");
     return false;
   }
+  if (sigaction(SIGILL, &act, NULL) != 0) {
+    perror("sigaction() failed.");
+    return false;
+  }
   return true;
 }
 
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index e563788..d6544be 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -22,6 +22,7 @@
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "bin/log.h"
 
 namespace dart {
 namespace bin {
@@ -32,6 +33,12 @@
 char** Platform::argv_ = NULL;
 
 static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
+  Log::PrintErr(
+      "\n===== DART STANDALONE VM CRASH =====\n"
+      "version=%s\n"
+      "si_signo=%s(%d), si_code=%d, si_addr=%p\n",
+      Dart_VersionString(), strsignal(siginfo->si_signo), siginfo->si_signo,
+      siginfo->si_code, siginfo->si_addr);
   Dart_DumpNativeStackTrace(context);
   abort();
 }
@@ -69,6 +76,10 @@
     perror("sigaction() failed.");
     return false;
   }
+  if (sigaction(SIGILL, &act, NULL) != 0) {
+    perror("sigaction() failed.");
+    return false;
+  }
   return true;
 }
 
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 333d57c..b7a2115 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -116,10 +116,19 @@
   // https://msdn.microsoft.com/en-us/library/windows/desktop/ms681401(v=vs.85).aspx
   static LONG WINAPI
   DartExceptionHandler(struct _EXCEPTION_POINTERS* ExceptionInfo) {
-    if (ExceptionInfo->ExceptionRecord->ExceptionCode ==
-        EXCEPTION_ACCESS_VIOLATION) {
-      const int kAbortExitCode = 3;
+    if ((ExceptionInfo->ExceptionRecord->ExceptionCode ==
+         EXCEPTION_ACCESS_VIOLATION) ||
+        (ExceptionInfo->ExceptionRecord->ExceptionCode ==
+         EXCEPTION_ILLEGAL_INSTRUCTION)) {
+      Log::PrintErr(
+          "\n===== DART STANDALONE VM CRASH =====\n"
+          "version=%s\n"
+          "ExceptionCode=%d, ExceptionFlags=%d, ExceptionAddress=%p\n",
+          Dart_VersionString(), ExceptionInfo->ExceptionRecord->ExceptionCode,
+          ExceptionInfo->ExceptionRecord->ExceptionFlags,
+          ExceptionInfo->ExceptionRecord->ExceptionAddress);
       Dart_DumpNativeStackTrace(ExceptionInfo->ContextRecord);
+      const int kAbortExitCode = 3;
       Platform::Exit(kAbortExitCode);
     }
     return EXCEPTION_CONTINUE_SEARCH;
diff --git a/runtime/bin/secure_socket_patch.dart b/runtime/bin/secure_socket_patch.dart
index 0ef6c35..cae58a5 100644
--- a/runtime/bin/secure_socket_patch.dart
+++ b/runtime/bin/secure_socket_patch.dart
@@ -94,6 +94,10 @@
 
   void handshake() native "SecureSocket_Handshake";
 
+  void rehandshake() => throw new UnimplementedError();
+
+  int processBuffer(int bufferIndex) => throw new UnimplementedError();
+
   String selectedProtocol() native "SecureSocket_GetSelectedProtocol";
 
   void renegotiate(bool useSessionCache, bool requestClientCertificate,
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 1aec6f8..6a74465 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -236,7 +236,7 @@
   }
 }
 
-// The NativeFieldWrapperClass1 can not be used with a mixin, due to missing
+// The NativeFieldWrapperClass1 cannot be used with a mixin, due to missing
 // implicit constructor.
 class _NativeSocketNativeWrapper extends NativeFieldWrapperClass1 {}
 
@@ -593,6 +593,10 @@
   bool get isTcp => (typeFlags & TYPE_TCP_SOCKET) != 0;
   bool get isUdp => (typeFlags & TYPE_UDP_SOCKET) != 0;
 
+  Map _toJSON(bool ref) => throw new UnimplementedError();
+  String get _serviceTypePath => throw new UnimplementedError();
+  String get _serviceTypeName => throw new UnimplementedError();
+
   List<int> read(int len) {
     if (len != null && len <= 0) {
       throw new ArgumentError("Illegal length $len");
@@ -1550,6 +1554,10 @@
 
   void add(List<int> bytes) => _sink.add(bytes);
 
+  void addError(Object error, [StackTrace stackTrace]) {
+    throw new UnsupportedError("Cannot send errors on sockets");
+  }
+
   Future addStream(Stream<List<int>> stream) {
     return _sink.addStream(stream);
   }
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 072545e..26d8f3d 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -1325,6 +1325,8 @@
   }
 
   static _tryUpgradePrefix(libraryPrefix) native "LibraryMirror_fromPrefix";
+
+  SourceLocation get location => null;
 }
 
 class _LocalCombinatorMirror extends _LocalMirror implements CombinatorMirror {
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 6a0a132..040f075 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -35,7 +35,7 @@
 # Tests with known analyzer issues
 [ $compiler == dart2analyzer ]
 developer_extension_test: SkipByDesign
-evaluate_activation_in_method_class_test: CompileTimeError # Issue 24478
+evaluate_activation_in_method_class_test: RuntimeError # Issue 24478, also, test is excluded in .analysis_options
 get_isolate_after_language_error_test: SkipByDesign
 
 # Kernel version of tests
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 8553eca..16e041d 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -285,7 +285,7 @@
 cc/DartAPI_NativePortPostInteger: Crash # Issue 32190
 cc/DartAPI_NativePortReceiveInteger: Timeout # Issue 32190
 cc/DartAPI_NativePortReceiveNull: Timeout # Issue 32190
-cc/DartAPI_NewNativePort: Crash # Issue 32190
+cc/DartAPI_NewNativePort: Crash,Timeout # Issue 32190
 cc/DartGeneratedArrayLiteralMessages: Crash # Issue 32190
 cc/FullSnapshot1: Crash # Issue 32190
 cc/IsolateReload_LibraryImportAdded: Crash # Issue 32190
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 12c48e7..3c8a853 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -639,7 +639,13 @@
   const TypeArguments& arguments =
       TypeArguments::Handle(zone, type.arguments());
   // A type can only be recursive via its type arguments.
-  ASSERT(!arguments.IsNull());
+  if (arguments.IsNull()) {
+    // However, Kernel does not keep the relation between a function type and
+    // its declaring typedef. Therefore, a typedef-declared function type may
+    // refer to the still unfinalized typedef via a type in its signature.
+    ASSERT(type.IsFunctionType());
+    return;
+  }
   const intptr_t num_type_args = arguments.Length();
   ASSERT(num_type_args > 0);
   ASSERT(num_type_args == type_cls.NumTypeArguments());
@@ -1100,7 +1106,7 @@
     }
   }
   AbstractType& super_type = AbstractType::Handle(cls.super_type());
-  if (!super_type.IsNull()) {
+  if (!super_type.IsNull() && !super_type.IsBeingFinalized()) {
     const Class& super_class = Class::Handle(super_type.type_class());
     CheckTypeArgumentBounds(super_class, arguments, bound_error);
   }
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index 5ccc59e..caedbd7 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -1277,20 +1277,20 @@
   return true;
 }
 
-void AotCallSpecializer::ReplaceArrayBoundChecks() {
-  for (BlockIterator block_it = flow_graph()->reverse_postorder_iterator();
+void AotCallSpecializer::ReplaceArrayBoundChecks(FlowGraph* flow_graph) {
+  Zone* zone = Thread::Current()->zone();
+
+  for (BlockIterator block_it = flow_graph->reverse_postorder_iterator();
        !block_it.Done(); block_it.Advance()) {
-    ForwardInstructionIterator it(block_it.Current());
-    current_iterator_ = &it;
-    for (; !it.Done(); it.Advance()) {
-      CheckArrayBoundInstr* check = it.Current()->AsCheckArrayBound();
-      if (check != NULL) {
-        GenericCheckBoundInstr* new_check = new (Z) GenericCheckBoundInstr(
-            new (Z) Value(check->length()->definition()),
-            new (Z) Value(check->index()->definition()), check->deopt_id());
-        flow_graph()->InsertBefore(check, new_check, check->env(),
-                                   FlowGraph::kEffect);
-        current_iterator()->RemoveCurrentFromGraph();
+    for (ForwardInstructionIterator it(block_it.Current()); !it.Done();
+         it.Advance()) {
+      if (CheckArrayBoundInstr* check = it.Current()->AsCheckArrayBound()) {
+        GenericCheckBoundInstr* new_check = new (zone) GenericCheckBoundInstr(
+            new (zone) Value(check->length()->definition()),
+            new (zone) Value(check->index()->definition()), check->deopt_id());
+        flow_graph->InsertBefore(check, new_check, check->env(),
+                                 FlowGraph::kEffect);
+        it.RemoveCurrentFromGraph();
       }
     }
   }
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.h b/runtime/vm/compiler/aot/aot_call_specializer.h
index 34a089a..7169626 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.h
+++ b/runtime/vm/compiler/aot/aot_call_specializer.h
@@ -23,7 +23,7 @@
   // TODO(dartbug.com/30633) these method has nothing to do with
   // specialization of calls. They are here for historical reasons.
   // Find a better place for them.
-  void ReplaceArrayBoundChecks();
+  static void ReplaceArrayBoundChecks(FlowGraph* flow_graph);
 
   virtual void VisitInstanceCall(InstanceCallInstr* instr);
   virtual void VisitStaticCall(StaticCallInstr* instr);
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 6e912c6..d70ef75 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -21,6 +21,7 @@
 #include "vm/compiler/backend/redundancy_elimination.h"
 #include "vm/compiler/backend/type_propagator.h"
 #include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_pass.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_entry.h"
@@ -63,17 +64,11 @@
     "Max number of attempts with speculative inlining (precompilation only)");
 DEFINE_FLAG(int, precompiler_rounds, 1, "Number of precompiler iterations");
 
-DECLARE_FLAG(bool, allocation_sinking);
-DECLARE_FLAG(bool, common_subexpression_elimination);
-DECLARE_FLAG(bool, constant_propagation);
-DECLARE_FLAG(bool, loop_invariant_code_motion);
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(bool, print_flow_graph_optimized);
-DECLARE_FLAG(bool, range_analysis);
 DECLARE_FLAG(bool, trace_compiler);
 DECLARE_FLAG(bool, trace_optimizing_compiler);
 DECLARE_FLAG(bool, trace_bailout);
-DECLARE_FLAG(bool, use_inlining);
 DECLARE_FLAG(bool, verify_compiler);
 DECLARE_FLAG(bool, huge_method_cutoff_in_code_size);
 DECLARE_FLAG(bool, trace_failed_optimization_attempts);
@@ -2717,39 +2712,22 @@
            (optimized() && FLAG_print_flow_graph_optimized)) &&
           FlowGraphPrinter::ShouldPrint(function);
 
-      if (print_flow_graph) {
-        FlowGraphPrinter::PrintGraph("Before Optimizations", flow_graph);
+      if (print_flow_graph && !optimized()) {
+        FlowGraphPrinter::PrintGraph("Unoptimized Compilation", flow_graph);
       }
 
-      if (optimized()) {
-#ifndef PRODUCT
-        TimelineDurationScope tds(thread(), compiler_timeline, "ComputeSSA");
-#endif  // !PRODUCT
-        CSTAT_TIMER_SCOPE(thread(), ssa_timer);
-        // Transform to SSA (virtual register 0 and no inlining arguments).
-        flow_graph->ComputeSSA(0, NULL);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        if (print_flow_graph) {
-          FlowGraphPrinter::PrintGraph("After SSA", flow_graph);
-        }
-      }
+      CompilerPassState pass_state(thread(), flow_graph, &speculative_policy,
+                                   precompiler_);
+      NOT_IN_PRODUCT(pass_state.compiler_timeline = compiler_timeline);
 
-      // Maps inline_id_to_function[inline_id] -> function. Top scope
-      // function has inline_id 0. The map is populated by the inliner.
-      GrowableArray<const Function*> inline_id_to_function;
-      // Token position where inlining occured.
-      GrowableArray<TokenPosition> inline_id_to_token_pos;
-      // For a given inlining-id(index) specifies the caller's inlining-id.
-      GrowableArray<intptr_t> caller_inline_id;
-      // Collect all instance fields that are loaded in the graph and
-      // have non-generic type feedback attached to them that can
-      // potentially affect optimizations.
       if (optimized()) {
 #ifndef PRODUCT
         TimelineDurationScope tds(thread(), compiler_timeline,
                                   "OptimizationPasses");
 #endif  // !PRODUCT
-        inline_id_to_function.Add(&function);
+        CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer);
+
+        pass_state.inline_id_to_function.Add(&function);
         // We do not add the token position now because we don't know the
         // position of the inlined call until later. A side effect of this
         // is that the length of |inline_id_to_function| is always larger
@@ -2757,339 +2735,22 @@
         // Top scope function has no caller (-1). We do this because we expect
         // all token positions to be at an inlined call.
         // Top scope function has no caller (-1).
-        caller_inline_id.Add(-1);
-        CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer);
+        pass_state.caller_inline_id.Add(-1);
 
         AotCallSpecializer call_specializer(precompiler_, flow_graph,
                                             &speculative_policy);
+        pass_state.call_specializer = &call_specializer;
 
-        call_specializer.ApplyClassIds();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        call_specializer.ApplyICData();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        // Optimize (a << b) & c patterns, merge operations.
-        // Run early in order to have more opportunity to optimize left shifts.
-        flow_graph->TryOptimizePatterns();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        FlowGraphInliner::SetInliningId(flow_graph, 0);
-
-        // Inlining (mutates the flow graph)
-        if (FLAG_use_inlining) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline, "Inlining");
-#endif  // !PRODUCT
-          CSTAT_TIMER_SCOPE(thread(), graphinliner_timer);
-          // Propagate types to create more inlining opportunities.
-          FlowGraphTypePropagator::Propagate(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          // Use propagated class-ids to create more inlining opportunities.
-          call_specializer.ApplyClassIds();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          FlowGraphInliner inliner(flow_graph, &inline_id_to_function,
-                                   &inline_id_to_token_pos, &caller_inline_id,
-                                   &speculative_policy, precompiler_);
-          inliner.Inline();
-          // Use lists are maintained and validated by the inliner.
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Propagate types and eliminate more type tests.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "ApplyClassIds");
-#endif  // !PRODUCT
-          // Use propagated class-ids to optimize further.
-          call_specializer.ApplyClassIds();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Propagate types for potentially newly added instructions by
-        // ApplyClassIds(). Must occur before canonicalization.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        // Do optimizations that depend on the propagated type information.
-        if (flow_graph->Canonicalize()) {
-          // Invoke Canonicalize twice in order to fully canonicalize patterns
-          // like "if (a & const == 0) { }".
-          flow_graph->Canonicalize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "BranchSimplifier");
-#endif  // !PRODUCT
-          BranchSimplifier::Simplify(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          IfConverter::Simplify(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (FLAG_constant_propagation) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "ConstantPropagation");
-#endif  // !PRODUCT
-          ConstantPropagator::Optimize(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          // A canonicalization pass to remove e.g. smi checks on smi constants.
-          flow_graph->Canonicalize();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          // Canonicalization introduced more opportunities for constant
-          // propagation.
-          ConstantPropagator::Optimize(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Optimistically convert loop phis that have a single non-smi input
-        // coming from the loop pre-header into smi-phis.
-        if (FLAG_loop_invariant_code_motion) {
-          LICM licm(flow_graph);
-          licm.OptimisticallySpecializeSmiPhis();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Propagate types and eliminate even more type tests.
-        // Recompute types after constant propagation to infer more precise
-        // types for uses that were previously reached by now eliminated phis.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "SelectRepresentations");
-#endif  // !PRODUCT
-          // Where beneficial convert Smi operations into Int32 operations.
-          // Only meanigful for 32bit platforms right now.
-          flow_graph->WidenSmiToInt32();
-
-          // Unbox doubles. Performed after constant propagation to minimize
-          // interference from phis merging double values and tagged
-          // values coming from dead paths.
-          flow_graph->SelectRepresentations();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "CommonSubexpressionElimination");
-#endif  // !PRODUCT
-
-          if (FLAG_common_subexpression_elimination) {
-            if (DominatorBasedCSE::Optimize(flow_graph)) {
-              DEBUG_ASSERT(flow_graph->VerifyUseLists());
-              flow_graph->Canonicalize();
-              // Do another round of CSE to take secondary effects into account:
-              // e.g. when eliminating dependent loads (a.x[0] + a.x[0])
-              // TODO(fschneider): Change to a one-pass optimization pass.
-              if (DominatorBasedCSE::Optimize(flow_graph)) {
-                flow_graph->Canonicalize();
-              }
-              DEBUG_ASSERT(flow_graph->VerifyUseLists());
-            }
-          }
-
-          // Run loop-invariant code motion right after load elimination since
-          // it depends on the numbering of loads from the previous
-          // load-elimination.
-          if (FLAG_loop_invariant_code_motion) {
-            flow_graph->RenameUsesDominatedByRedefinitions();
-            DEBUG_ASSERT(flow_graph->VerifyRedefinitions());
-            LICM licm(flow_graph);
-            licm.Optimize();
-            DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          }
-          flow_graph->RemoveRedefinitions();
-        }
-
-        // Optimize (a << b) & c patterns, merge operations.
-        // Run after CSE in order to have more opportunity to merge
-        // instructions that have same inputs.
-        flow_graph->TryOptimizePatterns();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "DeadStoreElimination");
-#endif  // !PRODUCT
-          DeadStoreElimination::Optimize(flow_graph);
-        }
-
-        if (FLAG_range_analysis) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "RangeAnalysis");
-#endif  // !PRODUCT
-          // Propagate types after store-load-forwarding. Some phis may have
-          // become smi phis that can be processed by range analysis.
-          FlowGraphTypePropagator::Propagate(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          // We have to perform range analysis after LICM because it
-          // optimistically moves CheckSmi through phis into loop preheaders
-          // making some phis smi.
-          RangeAnalysis range_analysis(flow_graph);
-          range_analysis.Analyze();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (FLAG_constant_propagation) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "ConstantPropagator::OptimizeBranches");
-#endif  // !PRODUCT
-          // Constant propagation can use information from range analysis to
-          // find unreachable branch targets and eliminate branches that have
-          // the same true- and false-target.
-          ConstantPropagator::OptimizeBranches(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Recompute types after code movement was done to ensure correct
-        // reaching types for hoisted values.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "TryCatchAnalyzer::Optimize");
-#endif  // !PRODUCT
-          // Optimize try-blocks.
-          TryCatchAnalyzer::Optimize(flow_graph);
-        }
-
-        // Detach environments from the instructions that can't deoptimize.
-        // Do it before we attempt to perform allocation sinking to minimize
-        // amount of materializations it has to perform.
-        flow_graph->EliminateEnvironments();
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "EliminateDeadPhis");
-#endif  // !PRODUCT
-          DeadCodeElimination::EliminateDeadPhis(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (flow_graph->Canonicalize()) {
-          flow_graph->Canonicalize();
-        }
-
-        // Attempt to sink allocations of temporary non-escaping objects to
-        // the deoptimization path.
-        AllocationSinking* sinking = NULL;
-        if (FLAG_allocation_sinking &&
-            (flow_graph->graph_entry()->SuccessorCount() == 1)) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "AllocationSinking::Optimize");
-#endif  // !PRODUCT
-          // TODO(fschneider): Support allocation sinking with try-catch.
-          sinking = new AllocationSinking(flow_graph);
-          sinking->Optimize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        DeadCodeElimination::EliminateDeadPhis(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "SelectRepresentations");
-#endif  // !PRODUCT
-          // Ensure that all phis inserted by optimization passes have
-          // consistent representations.
-          flow_graph->SelectRepresentations();
-        }
-
-        if (flow_graph->Canonicalize()) {
-          // To fully remove redundant boxing (e.g. BoxDouble used only in
-          // environments and UnboxDouble instructions) instruction we
-          // first need to replace all their uses and then fold them away.
-          // For now we just repeat Canonicalize twice to do that.
-          // TODO(vegorov): implement a separate representation folding pass.
-          flow_graph->Canonicalize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        CheckStackOverflowElimination::EliminateStackOverflow(flow_graph);
-
-        if (flow_graph->Canonicalize()) {
-          // To fully remove redundant boxing (e.g. BoxDouble used only in
-          // environments and UnboxDouble instructions) instruction we
-          // first need to replace all their uses and then fold them away.
-          // For now we just repeat Canonicalize twice to do that.
-          // TODO(vegorov): implement a separate representation folding pass.
-          flow_graph->Canonicalize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        if (sinking != NULL) {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(
-              thread(), compiler_timeline,
-              "AllocationSinking::DetachMaterializations");
-#endif  // !PRODUCT
-          // Remove all MaterializeObject instructions inserted by allocation
-          // sinking from the flow graph and let them float on the side
-          // referenced only from environments. Register allocator will consider
-          // them as part of a deoptimization environment.
-          sinking->DetachMaterializations();
-        }
-
-        // Replace bounds check instruction with a generic one.
-        call_specializer.ReplaceArrayBoundChecks();
-
-        // Compute and store graph informations (call & instruction counts)
-        // to be later used by the inliner.
-        FlowGraphInliner::CollectGraphInfo(flow_graph, true);
-
-        flow_graph->RemoveRedefinitions();
-        {
-#ifndef PRODUCT
-          TimelineDurationScope tds2(thread(), compiler_timeline,
-                                     "AllocateRegisters");
-#endif  // !PRODUCT
-          // Perform register allocation on the SSA graph.
-          FlowGraphAllocator allocator(*flow_graph);
-          allocator.AllocateRegisters();
-        }
-
-        if (print_flow_graph) {
-          FlowGraphPrinter::PrintGraph("After Optimizations", flow_graph);
-        }
+        CompilerPass::RunPipeline(CompilerPass::kAOT, &pass_state);
       }
 
-      ASSERT(inline_id_to_function.length() == caller_inline_id.length());
+      ASSERT(pass_state.inline_id_to_function.length() ==
+             pass_state.caller_inline_id.length());
       Assembler assembler(use_far_branches);
       FlowGraphCompiler graph_compiler(
           &assembler, flow_graph, *parsed_function(), optimized(),
-          &speculative_policy, inline_id_to_function, inline_id_to_token_pos,
-          caller_inline_id);
+          &speculative_policy, pass_state.inline_id_to_function,
+          pass_state.inline_id_to_token_pos, pass_state.caller_inline_id);
       {
         CSTAT_TIMER_SCOPE(thread(), graphcompiler_timer);
 #ifndef PRODUCT
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 6d5c531..6eba840 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -425,6 +425,7 @@
   // TODO(zra, kmillikin): Also load other large immediates from the object
   // pool
   if (object.IsSmi()) {
+    ASSERT(Smi::IsValid(Smi::Value(reinterpret_cast<RawSmi*>(object.raw()))));
     // If the raw smi does not fit into a 32-bit signed int, then we'll keep
     // the raw value in the object pool.
     return !Utils::IsInt(32, reinterpret_cast<int64_t>(object.raw()));
@@ -680,37 +681,69 @@
   }
 }
 
-void Assembler::AddImmediateSetFlags(Register dest, Register rn, int64_t imm) {
+void Assembler::AddImmediateSetFlags(Register dest,
+                                     Register rn,
+                                     int64_t imm,
+                                     OperandSize sz) {
+  ASSERT(sz == kDoubleWord || sz == kWord);
   Operand op;
   if (Operand::CanHold(imm, kXRegSizeInBits, &op) == Operand::Immediate) {
     // Handles imm == kMinInt64.
-    adds(dest, rn, op);
+    if (sz == kDoubleWord) {
+      adds(dest, rn, op);
+    } else {
+      addsw(dest, rn, op);
+    }
   } else if (Operand::CanHold(-imm, kXRegSizeInBits, &op) ==
              Operand::Immediate) {
     ASSERT(imm != kMinInt64);  // Would cause erroneous overflow detection.
-    subs(dest, rn, op);
+    if (sz == kDoubleWord) {
+      subs(dest, rn, op);
+    } else {
+      subsw(dest, rn, op);
+    }
   } else {
     // TODO(zra): Try adding top 12 bits, then bottom 12 bits.
     ASSERT(rn != TMP2);
     LoadImmediate(TMP2, imm);
-    adds(dest, rn, Operand(TMP2));
+    if (sz == kDoubleWord) {
+      adds(dest, rn, Operand(TMP2));
+    } else {
+      addsw(dest, rn, Operand(TMP2));
+    }
   }
 }
 
-void Assembler::SubImmediateSetFlags(Register dest, Register rn, int64_t imm) {
+void Assembler::SubImmediateSetFlags(Register dest,
+                                     Register rn,
+                                     int64_t imm,
+                                     OperandSize sz) {
   Operand op;
+  ASSERT(sz == kDoubleWord || sz == kWord);
   if (Operand::CanHold(imm, kXRegSizeInBits, &op) == Operand::Immediate) {
     // Handles imm == kMinInt64.
-    subs(dest, rn, op);
+    if (sz == kDoubleWord) {
+      subs(dest, rn, op);
+    } else {
+      subsw(dest, rn, op);
+    }
   } else if (Operand::CanHold(-imm, kXRegSizeInBits, &op) ==
              Operand::Immediate) {
     ASSERT(imm != kMinInt64);  // Would cause erroneous overflow detection.
-    adds(dest, rn, op);
+    if (sz == kDoubleWord) {
+      adds(dest, rn, op);
+    } else {
+      addsw(dest, rn, op);
+    }
   } else {
     // TODO(zra): Try subtracting top 12 bits, then bottom 12 bits.
     ASSERT(rn != TMP2);
     LoadImmediate(TMP2, imm);
-    subs(dest, rn, Operand(TMP2));
+    if (sz == kDoubleWord) {
+      subs(dest, rn, Operand(TMP2));
+    } else {
+      subsw(dest, rn, Operand(TMP2));
+    }
   }
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 4a9c450..3b7e289 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -649,8 +649,9 @@
              int width,
              OperandSize size = kDoubleWord) {
     int wordsize = size == kDoubleWord ? 64 : 32;
-    EmitBitfieldOp(UBFM, rd, rn, (width - low_bit) & (wordsize - 1),
-                   wordsize - 1, size);
+    ASSERT(width > 0);
+    ASSERT(low_bit < wordsize);
+    EmitBitfieldOp(UBFM, rd, rn, (-low_bit) & (wordsize - 1), width - 1, size);
   }
 
   // Unsigned bitfield extract.  Takes the width bits, starting at low_bit and
@@ -688,6 +689,11 @@
     EmitBitfieldOp(UBFM, rd, rn, 0, 15, kDoubleWord);
   }
 
+  // Zero/unsigned extend word->64 bit.
+  void uxtw(Register rd, Register rn) {
+    EmitBitfieldOp(UBFM, rd, rn, 0, 31, kDoubleWord);
+  }
+
   // Logical immediate operations.
   void andi(Register rd, Register rn, const Immediate& imm) {
     Operand imm_op;
@@ -737,6 +743,9 @@
   void orn(Register rd, Register rn, Operand o) {
     EmitLogicalShiftOp(ORN, rd, rn, o, kDoubleWord);
   }
+  void ornw(Register rd, Register rn, Operand o) {
+    EmitLogicalShiftOp(ORN, rd, rn, o, kWord);
+  }
   void eor(Register rd, Register rn, Operand o) {
     EmitLogicalShiftOp(EOR, rd, rn, o, kDoubleWord);
   }
@@ -774,20 +783,66 @@
   void asrv(Register rd, Register rn, Register rm) {
     EmitMiscDP2Source(ASRV, rd, rn, rm, kDoubleWord);
   }
-  void madd(Register rd, Register rn, Register rm, Register ra) {
-    EmitMiscDP3Source(MADD, rd, rn, rm, ra, kDoubleWord);
+  void lslvw(Register rd, Register rn, Register rm) {
+    EmitMiscDP2Source(LSLV, rd, rn, rm, kWord);
   }
-  void msub(Register rd, Register rn, Register rm, Register ra) {
-    EmitMiscDP3Source(MSUB, rd, rn, rm, ra, kDoubleWord);
+  void lsrvw(Register rd, Register rn, Register rm) {
+    EmitMiscDP2Source(LSRV, rd, rn, rm, kWord);
   }
-  void smulh(Register rd, Register rn, Register rm) {
-    EmitMiscDP3Source(SMULH, rd, rn, rm, R31, kDoubleWord);
+  void asrvw(Register rd, Register rn, Register rm) {
+    EmitMiscDP2Source(ASRV, rd, rn, rm, kWord);
   }
-  void umulh(Register rd, Register rn, Register rm) {
-    EmitMiscDP3Source(UMULH, rd, rn, rm, R31, kDoubleWord);
+  void madd(Register rd,
+            Register rn,
+            Register rm,
+            Register ra,
+            OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(MADD, rd, rn, rm, ra, sz);
   }
-  void umaddl(Register rd, Register rn, Register rm, Register ra) {
-    EmitMiscDP3Source(UMADDL, rd, rn, rm, ra, kDoubleWord);
+  void msub(Register rd,
+            Register rn,
+            Register rm,
+            Register ra,
+            OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(MSUB, rd, rn, rm, ra, sz);
+  }
+  void smulh(Register rd,
+             Register rn,
+             Register rm,
+             OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(SMULH, rd, rn, rm, R31, sz);
+  }
+  void umulh(Register rd,
+             Register rn,
+             Register rm,
+             OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(UMULH, rd, rn, rm, R31, sz);
+  }
+  void umaddl(Register rd,
+              Register rn,
+              Register rm,
+              Register ra,
+              OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(UMADDL, rd, rn, rm, ra, sz);
+  }
+  void umull(Register rd,
+             Register rn,
+             Register rm,
+             OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(UMADDL, rd, rn, rm, ZR, sz);
+  }
+  void smaddl(Register rd,
+              Register rn,
+              Register rm,
+              Register ra,
+              OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(SMADDL, rd, rn, rm, ra, sz);
+  }
+  void smull(Register rd,
+             Register rn,
+             Register rm,
+             OperandSize sz = kDoubleWord) {
+    EmitMiscDP3Source(SMADDL, rd, rn, rm, ZR, sz);
   }
 
   // Move wide immediate.
@@ -903,6 +958,7 @@
   // For add and sub, to use CSP for rn, o must be of type Operand::Extend.
   // For an unmodified rm in this case, use Operand(rm, UXTX, 0);
   void cmp(Register rn, Operand o) { subs(ZR, rn, o); }
+  void cmpw(Register rn, Operand o) { subsw(ZR, rn, o); }
   // rn cmp -o.
   void cmn(Register rn, Operand o) { adds(ZR, rn, o); }
 
@@ -1199,9 +1255,16 @@
   }
   void vmov(VRegister vd, VRegister vn) { vorr(vd, vn, vn); }
   void mvn(Register rd, Register rm) { orn(rd, ZR, Operand(rm)); }
+  void mvnw(Register rd, Register rm) { ornw(rd, ZR, Operand(rm)); }
   void neg(Register rd, Register rm) { sub(rd, ZR, Operand(rm)); }
   void negs(Register rd, Register rm) { subs(rd, ZR, Operand(rm)); }
-  void mul(Register rd, Register rn, Register rm) { madd(rd, rn, rm, ZR); }
+  void negsw(Register rd, Register rm) { subsw(rd, ZR, Operand(rm)); }
+  void mul(Register rd, Register rn, Register rm) {
+    madd(rd, rn, rm, ZR, kDoubleWord);
+  }
+  void mulw(Register rd, Register rn, Register rm) {
+    madd(rd, rn, rm, ZR, kWord);
+  }
   void Push(Register reg) {
     ASSERT(reg != PP);  // Only push PP with TagAndPushPP().
     str(reg, Address(SP, -1 * kWordSize, Address::PreIndex));
@@ -1257,8 +1320,15 @@
   void tsti(Register rn, const Immediate& imm) { andis(ZR, rn, imm); }
 
   // We use an alias of add, where ARM recommends an alias of ubfm.
-  void LslImmediate(Register rd, Register rn, int shift) {
-    add(rd, ZR, Operand(rn, LSL, shift));
+  void LslImmediate(Register rd,
+                    Register rn,
+                    int shift,
+                    OperandSize sz = kDoubleWord) {
+    if (sz == kDoubleWord) {
+      add(rd, ZR, Operand(rn, LSL, shift));
+    } else {
+      addw(rd, ZR, Operand(rn, LSL, shift));
+    }
   }
   // We use an alias of add, where ARM recommends an alias of ubfm.
   void LsrImmediate(Register rd, Register rn, int shift) {
@@ -1310,8 +1380,14 @@
   // pool pointer is in another register, or that it is not available at all,
   // PP should be passed for pp.
   void AddImmediate(Register dest, Register rn, int64_t imm);
-  void AddImmediateSetFlags(Register dest, Register rn, int64_t imm);
-  void SubImmediateSetFlags(Register dest, Register rn, int64_t imm);
+  void AddImmediateSetFlags(Register dest,
+                            Register rn,
+                            int64_t imm,
+                            OperandSize sz = kDoubleWord);
+  void SubImmediateSetFlags(Register dest,
+                            Register rn,
+                            int64_t imm,
+                            OperandSize sz = kDoubleWord);
   void AndImmediate(Register rd, Register rn, int64_t imm);
   void OrImmediate(Register rd, Register rn, int64_t imm);
   void XorImmediate(Register rd, Register rn, int64_t imm);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 8bf00c9..fbfb286 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -1654,6 +1654,154 @@
   EXPECT_EQ(0x700000001, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
 }
 
+ASSEMBLER_TEST_GENERATE(Smaddl, assembler) {
+  __ movn(R1, Immediate(1), 0);   // W1 = -2.
+  __ movz(R2, Immediate(7), 0);   // W2 = 7.
+  __ movz(R3, Immediate(20), 0);  // X3 = 20.
+  __ smaddl(R0, R1, R2, R3);      // X0 = W1*W2 + X3 = 6.
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(Smaddl, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(6, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(Smaddl2, assembler) {
+  __ movn(R1, Immediate(1), 0);  // W1 = -2.
+  __ movn(R2, Immediate(0), 0);  // W2 = -1.
+  __ smull(R0, R1, R2);          // X0 = W1*W2 = 2, alias of smaddl.
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(Smaddl2, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(2, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(Smaddl3, assembler) {
+  __ movz(R1, Immediate(0xffff), 0);  // W1 = 0xffff.
+  __ movz(R2, Immediate(0xffff), 0);  // W2 = 0xffff.
+  __ smull(R0, R1, R2);               // X0 = W1*W2, alias of smaddl.
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(Smaddl3, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(0xffffl * 0xffffl,
+            EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(SmaddlOverflow, assembler) {
+  Label return_ltuae;
+  __ movz(R1, Immediate(0xffff), 0);  // W1 = 0xffff.
+  __ AddImmediate(R1, 4);             // W1 = 0x10003.
+  __ movz(R2, Immediate(0x7fff), 0);  // W2 = 0xffff.
+  __ smull(R0, R1, R2);               // X0 = W1*W2, alias of smaddl.
+  __ AsrImmediate(R3, R0, 31);
+  __ cmp(R3, Operand(R0, ASR, 63));  // Detect signed 32 bit overflow.
+  __ b(&return_ltuae, NE);
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(SmaddlOverflow, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(SmaddlOverflow2, assembler) {
+  Label return_ltuae;
+  __ movz(R1, Immediate(0xffff), 0);  // W1 = 0xffff.
+  __ movn(R2, Immediate(0xffff), 0);  // W2 = -0x10000.
+  __ AddImmediate(R2, -3);            // W2 = -0x10003.
+  __ smull(R0, R1, R2);               // X0 = W1*W2, alias of smaddl.
+  __ AsrImmediate(R3, R0, 31);
+  __ cmp(R3, Operand(R0, ASR, 63));  // Detect signed 32 bit overflow.
+  __ b(&return_ltuae, NE);
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(SmaddlOverflow2, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(SmaddlOverflow3, assembler) {
+  Label return_ltuae;
+  __ LoadImmediate(R1, 0x01007fff);
+  __ LoadImmediate(R2, 0x01007fff);
+  __ smull(R0, R1, R2);  // X0 = W1*W2, alias of smaddl.
+  __ AsrImmediate(R3, R0, 31);
+  __ cmp(R3, Operand(R0, ASR, 63));  // Detect signed 32 bit overflow.
+  __ b(&return_ltuae, NE);
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(SmaddlOverflow3, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(NegNoOverflow, assembler) {
+  Label return_ltuae;
+  __ LoadImmediate(R1, 0x7fffffff);
+  __ negsw(R0, R1);  // X0 = W1*W2, alias of smaddl.
+  __ sxtw(R0, R0);
+  __ b(&return_ltuae, VS);  // Branch on overflow set.
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(NegNoOverflow, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(-0x7fffffff, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(NegNoOverflow2, assembler) {
+  Label return_ltuae;
+  __ LoadImmediate(R1, 0x7123);
+  __ negsw(R0, R1);  // X0 = W1*W2, alias of smaddl.
+  __ sxtw(R0, R0);
+  __ b(&return_ltuae, VS);  // Branch on overflow set.
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(NegNoOverflow2, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(-0x7123, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+ASSEMBLER_TEST_GENERATE(NegOverflow, assembler) {
+  Label return_ltuae;
+  __ LoadImmediate(R1, -0x80000000ll);
+  __ negsw(R0, R1);  // X0 = W1*W2, alias of smaddl.
+  __ sxtw(R0, R0);
+  __ b(&return_ltuae, VS);  // Branch on overflow set.
+  __ ret();
+  __ Bind(&return_ltuae);
+  __ movz(R0, Immediate(42), 0);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(NegOverflow, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
 // Loading immediate values without the object pool.
 ASSEMBLER_TEST_GENERATE(LoadImmediateSmall, assembler) {
   __ LoadImmediate(R0, 42);
@@ -2145,6 +2293,19 @@
   EXPECT_EQ(0x5a5b9a5a, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
 }
 
+ASSEMBLER_TEST_GENERATE(Ubfiz, assembler) {
+  __ LoadImmediate(R1, 0xff1248ff);
+  __ LoadImmediate(R0, 0x5a5a5a5a);
+  // Take 30 low bits and place at position 1 in R0, zeroing the rest.
+  __ ubfiz(R0, R1, 1, 30);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(Ubfiz, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(0x7e2491fe, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
 ASSEMBLER_TEST_GENERATE(Bfxil, assembler) {
   __ LoadImmediate(R1, 0x819);
   __ LoadImmediate(R0, 0x5a5a5a5a);
@@ -2217,6 +2378,23 @@
   EXPECT_EQ(0x29, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
 }
 
+ASSEMBLER_TEST_GENERATE(Uxtw, assembler) {
+  __ LoadImmediate(R1, 0xffffffffll);
+  __ LoadImmediate(R0, 0x5a5a5a5a);  // Overwritten.
+  __ ubfiz(R0, R1, 0, 32);           // Zero extend word.
+  __ LoadImmediate(R2, 0x10000002all);
+  __ LoadImmediate(R1, 0x5a5a5a5a);  // Overwritten.
+  __ ubfiz(R1, R2, 0, 32);           // Zero extend word.
+  __ add(R0, R0, Operand(R1));
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(Uxtw, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(0xffffffffll + 42,
+            EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
 ASSEMBLER_TEST_GENERATE(Uxtb, assembler) {
   __ LoadImmediate(R1, -1);
   __ LoadImmediate(R0, 0x5a5a5a5a);  // Overwritten.
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index e9451d0..b13e48a 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -683,12 +683,19 @@
   }
 }
 
-void Assembler::MulImmediate(Register reg, const Immediate& imm) {
+void Assembler::MulImmediate(Register reg,
+                             const Immediate& imm,
+                             OperandWidth width) {
   if (imm.is_int32()) {
-    imulq(reg, imm);
+    if (width == k32Bit) {
+      imull(reg, imm);
+    } else {
+      imulq(reg, imm);
+    }
   } else {
     ASSERT(reg != TMP);
-    LoadImmediate(TMP, imm);
+    ASSERT(width != k32Bit);
+    movq(TMP, imm);
     imulq(reg, TMP);
   }
 }
@@ -943,25 +950,36 @@
   popq(r);
 }
 
-void Assembler::AddImmediate(Register reg, const Immediate& imm) {
+void Assembler::AddImmediate(Register reg,
+                             const Immediate& imm,
+                             OperandWidth width) {
   const int64_t value = imm.value();
   if (value == 0) {
     return;
   }
   if ((value > 0) || (value == kMinInt64)) {
     if (value == 1) {
-      incq(reg);
+      if (width == k32Bit) {
+        incl(reg);
+      } else {
+        incq(reg);
+      }
     } else {
-      if (imm.is_int32()) {
-        addq(reg, imm);
+      if (imm.is_int32() || (width == k32Bit && imm.is_uint32())) {
+        if (width == k32Bit) {
+          addl(reg, imm);
+        } else {
+          addq(reg, imm);
+        }
       } else {
         ASSERT(reg != TMP);
+        ASSERT(width != k32Bit);
         LoadImmediate(TMP, imm);
         addq(reg, TMP);
       }
     }
   } else {
-    SubImmediate(reg, Immediate(-value));
+    SubImmediate(reg, Immediate(-value), width);
   }
 }
 
@@ -986,25 +1004,37 @@
   }
 }
 
-void Assembler::SubImmediate(Register reg, const Immediate& imm) {
+void Assembler::SubImmediate(Register reg,
+                             const Immediate& imm,
+                             OperandWidth width) {
   const int64_t value = imm.value();
   if (value == 0) {
     return;
   }
-  if ((value > 0) || (value == kMinInt64)) {
+  if ((value > 0) || (value == kMinInt64) ||
+      (value == kMinInt32 && width == k32Bit)) {
     if (value == 1) {
-      decq(reg);
+      if (width == k32Bit) {
+        decl(reg);
+      } else {
+        decq(reg);
+      }
     } else {
       if (imm.is_int32()) {
-        subq(reg, imm);
+        if (width == k32Bit) {
+          subl(reg, imm);
+        } else {
+          subq(reg, imm);
+        }
       } else {
         ASSERT(reg != TMP);
+        ASSERT(width != k32Bit);
         LoadImmediate(TMP, imm);
         subq(reg, TMP);
       }
     }
   } else {
-    AddImmediate(reg, Immediate(-value));
+    AddImmediate(reg, Immediate(-value), width);
   }
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index c6117d1..116ff36 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -484,6 +484,9 @@
   void cvttsd2siq(Register dst, XmmRegister src) {
     EmitQ(dst, src, 0x2C, 0x0F, 0xF2);
   }
+  void cvttsd2sil(Register dst, XmmRegister src) {
+    EmitL(dst, src, 0x2C, 0x0F, 0xF2);
+  }
   void movmskpd(Register dst, XmmRegister src) {
     EmitL(dst, src, 0x50, 0x0F, 0x66);
   }
@@ -579,10 +582,16 @@
   REGULAR_UNARY(dec, 0xFF, 1)
 #undef REGULAR_UNARY
 
+  // We could use kWord, kDoubleWord, and kQuadWord here, but it is rather
+  // confusing since the same sizes mean something different on ARM.
+  enum OperandWidth { k32Bit, k64Bit };
+
   void imull(Register reg, const Immediate& imm);
 
   void imulq(Register dst, const Immediate& imm);
-  void MulImmediate(Register reg, const Immediate& imm);
+  void MulImmediate(Register reg,
+                    const Immediate& imm,
+                    OperandWidth width = k64Bit);
 
   void shll(Register reg, const Immediate& imm);
   void shll(Register operand, Register shifter);
@@ -653,9 +662,13 @@
   // Methods for adding/subtracting an immediate value that may be loaded from
   // the constant pool.
   // TODO(koda): Assert that these are not used for heap objects.
-  void AddImmediate(Register reg, const Immediate& imm);
+  void AddImmediate(Register reg,
+                    const Immediate& imm,
+                    OperandWidth width = k64Bit);
   void AddImmediate(const Address& address, const Immediate& imm);
-  void SubImmediate(Register reg, const Immediate& imm);
+  void SubImmediate(Register reg,
+                    const Immediate& imm,
+                    OperandWidth width = k64Bit);
   void SubImmediate(const Address& address, const Immediate& imm);
 
   void Drop(intptr_t stack_elements, Register tmp = TMP);
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index 73ec3b7..a18453c 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -838,7 +838,7 @@
   __ movq(RAX, Immediate(kLargeConstant));
   __ movq(RCX, Immediate(kAnotherLargeConstant));
   __ imulq(RAX, RCX);
-  __ imulq(RCX, Immediate(kLargeConstant));
+  __ MulImmediate(RCX, Immediate(kLargeConstant));
   __ cmpq(RAX, RCX);
   __ j(EQUAL, &done);
   __ int3();
@@ -4628,7 +4628,17 @@
 }
 
 ASSEMBLER_TEST_GENERATE(DoubleToInt64Conversion, assembler) {
-  __ movq(RAX, Immediate(bit_cast<int64_t, double>(12.3)));
+  __ movq(RAX, Immediate(bit_cast<int64_t, double>(4.2e22)));
+  __ pushq(RAX);
+  __ movsd(XMM9, Address(RSP, 0));
+  __ popq(RAX);
+  __ cvttsd2siq(RAX, XMM9);
+  __ CompareImmediate(RAX, Immediate(0x8000000000000000ll));
+  Label ok;
+  __ j(EQUAL, &ok);
+  __ int3();  // cvttsd2siq overflow not detected
+  __ Bind(&ok);
+  __ movq(RAX, Immediate(bit_cast<int64_t, double>(4.2e11)));
   __ pushq(RAX);
   __ movsd(XMM9, Address(RSP, 0));
   __ movsd(XMM6, Address(RSP, 0));
@@ -4638,6 +4648,8 @@
   __ cvttsd2siq(R10, XMM9);
   __ cvttsd2siq(RDX, XMM9);
   __ subq(RDX, R10);
+  __ addq(RDX, RDX);
+  __ addq(RDX, R10);
   __ movq(RAX, RDX);
   __ ret();
 }
@@ -4645,11 +4657,20 @@
 ASSEMBLER_TEST_RUN(DoubleToInt64Conversion, test) {
   typedef int64_t (*DoubleToInt64ConversionCode)();
   int64_t res = reinterpret_cast<DoubleToInt64ConversionCode>(test->entry())();
-  EXPECT_EQ(0, res);
+  EXPECT_EQ(420000000000l, res);
   EXPECT_DISASSEMBLY(
       "movq rax,0x................\n"
       "push rax\n"
       "movsd xmm9,[rsp]\n"
+      "pop rax\n"
+      "cvttsd2siq rax,xmm9\n"
+      "movq r11,0x................\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movq rax,0x................\n"
+      "push rax\n"
+      "movsd xmm9,[rsp]\n"
       "movsd xmm6,[rsp]\n"
       "pop rax\n"
       "cvttsd2siq r10,xmm6\n"
@@ -4657,6 +4678,99 @@
       "cvttsd2siq r10,xmm9\n"
       "cvttsd2siq rdx,xmm9\n"
       "subq rdx,r10\n"
+      "addq rdx,rdx\n"
+      "addq rdx,r10\n"
+      "movq rax,rdx\n"
+      "ret\n");
+}
+
+ASSEMBLER_TEST_GENERATE(DoubleToInt32Conversion, assembler) {
+  // Check that a too big double results in the overflow value for a conversion
+  // to signed 32 bit.
+  __ movq(RAX, Immediate(bit_cast<int64_t, double>(4.2e11)));
+  __ pushq(RAX);
+  __ movsd(XMM9, Address(RSP, 0));
+  __ popq(RAX);
+  __ cvttsd2sil(RAX, XMM9);
+  __ CompareImmediate(RAX, Immediate(0x80000000ll));
+  {
+    Label ok;
+    __ j(EQUAL, &ok);
+    __ int3();  // cvttsd2sil overflow not detected.
+    __ Bind(&ok);
+  }
+
+  // Check that negative floats result in signed 32 bit results with the top
+  // bits zeroed.
+  __ movq(RAX, Immediate(bit_cast<int64_t, double>(-42.0)));
+  __ pushq(RAX);
+  __ movsd(XMM9, Address(RSP, 0));
+  __ popq(RAX);
+  // These high 1-bits will be zeroed in the next insn.
+  __ movq(R10, Immediate(-1));
+  // Put -42 in r10d, zeroing the high bits of r10.
+  __ cvttsd2sil(R10, XMM9);
+  __ CompareImmediate(R10, Immediate(-42 & 0xffffffffll));
+  {
+    Label ok;
+    __ j(EQUAL, &ok);
+    __ int3();  // cvttsd2sil negative result error
+    __ Bind(&ok);
+  }
+
+  // Check for correct result for positive in-range input.
+  __ movq(RAX, Immediate(bit_cast<int64_t, double>(42.0)));
+  __ pushq(RAX);
+  __ movsd(XMM9, Address(RSP, 0));
+  __ movsd(XMM6, Address(RSP, 0));
+  __ popq(RAX);
+  __ cvttsd2sil(R10, XMM6);
+  __ cvttsd2sil(RDX, XMM6);
+  __ cvttsd2sil(R10, XMM9);
+  __ cvttsd2sil(RDX, XMM9);
+  __ subq(RDX, R10);
+  __ addq(RDX, RDX);
+  __ addq(RDX, R10);
+  __ movq(RAX, RDX);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(DoubleToInt32Conversion, test) {
+  typedef int64_t (*DoubleToInt32ConversionCode)();
+  int64_t res = reinterpret_cast<DoubleToInt32ConversionCode>(test->entry())();
+  EXPECT_EQ(42, res);
+  EXPECT_DISASSEMBLY(
+      "movq rax,0x................\n"
+      "push rax\n"
+      "movsd xmm9,[rsp]\n"
+      "pop rax\n"
+      "cvttsd2sil rax,xmm9\n"
+      "movl r11,0x........\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movq rax,0x................\n"
+      "push rax\n"
+      "movsd xmm9,[rsp]\n"
+      "pop rax\n"
+      "movq r10,-1\n"
+      "cvttsd2sil r10,xmm9\n"
+      "movl r11,0x........\n"
+      "cmpq r10,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movq rax,0x................\n"
+      "push rax\n"
+      "movsd xmm9,[rsp]\n"
+      "movsd xmm6,[rsp]\n"
+      "pop rax\n"
+      "cvttsd2sil r10,xmm6\n"
+      "cvttsd2sil rdx,xmm6\n"
+      "cvttsd2sil r10,xmm9\n"
+      "cvttsd2sil rdx,xmm9\n"
+      "subq rdx,r10\n"
+      "addq rdx,rdx\n"
+      "addq rdx,r10\n"
       "movq rax,rdx\n"
       "ret\n");
 }
@@ -5435,6 +5549,160 @@
       "ret\n");
 }
 
+ASSEMBLER_TEST_GENERATE(ImmediateMacros, assembler) {
+  const intptr_t kBillion = 1000 * 1000 * 1000;
+  {
+    __ LoadImmediate(RAX, Immediate(42));
+    __ MulImmediate(RAX, Immediate(kBillion));
+    Label ok;
+    __ CompareImmediate(RAX, Immediate(42 * kBillion));
+    __ j(EQUAL, &ok);
+    __ int3();  // MulImmediate 64 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(42));
+    __ MulImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    Label ok;
+    __ CompareImmediate(RAX, Immediate((42 * kBillion) & 0xffffffffll));
+    __ j(EQUAL, &ok);
+    __ int3();  // MulImmediate 32 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(kBillion));
+    __ AddImmediate(RAX, Immediate(41 * kBillion));
+    Label ok;
+    __ CompareImmediate(RAX, Immediate(42 * kBillion));
+    __ j(EQUAL, &ok);
+    __ int3();  // AddImmediate 64 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(kBillion));
+    __ AddImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ AddImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ AddImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    Label ok;
+    __ CompareImmediate(RAX, Immediate((4 * kBillion) & 0xffffffffll));
+    __ j(EQUAL, &ok);
+    __ int3();  // AddImmediate 32 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(kBillion));
+    __ AddImmediate(RAX, Immediate(static_cast<int32_t>(3 * kBillion)),
+                    Assembler::k32Bit);
+    __ AddImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ AddImmediate(RAX, Immediate(-kBillion), Assembler::k32Bit);
+    Label ok;
+    __ CompareImmediate(RAX, Immediate((4 * kBillion) & 0xffffffffll));
+    __ j(EQUAL, &ok);
+    __ int3();  // AddImmediate negative 32 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(kBillion));
+    __ SubImmediate(RAX, Immediate(43 * kBillion));
+    Label ok;
+    __ CompareImmediate(RAX, Immediate(-42 * kBillion));
+    __ j(EQUAL, &ok);
+    __ int3();  // AddImmediate negative 64 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(-kBillion));
+    __ SubImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ SubImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ SubImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    Label ok;
+    __ CompareImmediate(RAX, Immediate((-4 * kBillion) & 0xffffffffll));
+    __ j(EQUAL, &ok);
+    __ int3();  // SubImmediate 32 bit.
+    __ Bind(&ok);
+  }
+  {
+    __ LoadImmediate(RAX, Immediate(kBillion));
+    __ SubImmediate(RAX, Immediate((-3 * kBillion) & 0xffffffffll),
+                    Assembler::k32Bit);
+    __ SubImmediate(RAX, Immediate(kBillion), Assembler::k32Bit);
+    __ SubImmediate(RAX, Immediate(-kBillion), Assembler::k32Bit);
+    Label ok;
+    __ CompareImmediate(RAX, Immediate((4 * kBillion) & 0xffffffffll));
+    __ j(EQUAL, &ok);
+    __ int3();  // SubImmediate 32 bit.
+    __ Bind(&ok);
+  }
+  __ LoadImmediate(RAX, Immediate(42));
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(ImmediateMacros, test) {
+  typedef int (*ImmediateMacrosCode)();
+  int res = reinterpret_cast<ImmediateMacrosCode>(test->entry())();
+  EXPECT_EQ(42, res);
+  EXPECT_DISASSEMBLY(
+      "movl rax,0x2a\n"
+      "imulq rax,rax,0x........\n"
+      "movq r11,0x................\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x2a\n"
+      "imull rax,rax,0x........\n"
+      "movl r11,0x........\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x........\n"
+      "movq r11,0x................\n"
+      "addq rax,r11\n"
+      "movq r11,0x................\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x........\n"
+      "addl rax,0x........\n"
+      "addl rax,0x........\n"
+      "addl rax,0x........\n"
+      "movl r11,0x........\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x........\n"
+      "subl rax,0x........\n"
+      "addl rax,0x........\n"
+      "subl rax,0x........\n"
+      "movl r11,0x........\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x........\n"
+      "movq r11,0x................\n"
+      "subq rax,r11\n"
+      "movq r11,0x................\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movq rax,-0x........\n"
+      "subl rax,0x........\n"
+      "subl rax,0x........\n"
+      "subl rax,0x........\n"
+      "cmpq rax,0x........\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x........\n"
+      "subl rax,0x........\n"
+      "subl rax,0x........\n"
+      "addl rax,0x........\n"
+      "movl r11,0x........\n"
+      "cmpq rax,r11\n"
+      "jz 0x................\n"
+      "int3\n"
+      "movl rax,0x2a\n"
+      "ret\n");
+}
+
 // clang-format off
 #define ALU_TEST(NAME, WIDTH, INTRO, LHS, RHS, OUTRO)                          \
   ASSEMBLER_TEST_GENERATE(NAME, assembler) {                                   \
diff --git a/runtime/vm/compiler/assembler/disassembler_arm64.cc b/runtime/vm/compiler/assembler/disassembler_arm64.cc
index 06b9ad7..ad102433 100644
--- a/runtime/vm/compiler/assembler/disassembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/disassembler_arm64.cc
@@ -1061,8 +1061,12 @@
       break;
     case 2: {
       if ((instr->RnField() == R31) && (instr->IsShift()) &&
-          (instr->Imm16Field() == 0) && (instr->ShiftTypeField() == LSL)) {
-        Format(instr, "mov'sf 'rd, 'rm");
+          (instr->ShiftTypeField() == LSL)) {
+        if (instr->ShiftAmountField() == 0) {
+          Format(instr, "mov'sf 'rd, 'rm");
+        } else {
+          Format(instr, "lsl'sf 'rd, 'rm, 'imms");
+        }
       } else {
         Format(instr, "orr'sf 'rd, 'rn, 'shift_op");
       }
@@ -1134,25 +1138,50 @@
 }
 
 void ARM64Decoder::DecodeMiscDP3Source(Instr* instr) {
-  if ((instr->Bits(29, 2) == 0) && (instr->Bits(21, 3) == 0) &&
-      (instr->Bit(15) == 0)) {
-    if (instr->RaField() == R31) {
+  bool zero_operand = instr->RaField() == R31;
+  int32_t mask = B31 | B30 | B29 | B23 | B22 | B21 | B15 | MiscDP3SourceMask;
+  int32_t bits = instr->InstructionBits() & mask;
+
+  if (bits == MADD) {
+    if (zero_operand) {
       Format(instr, "mul'sf 'rd, 'rn, 'rm");
     } else {
       Format(instr, "madd'sf 'rd, 'rn, 'rm, 'ra");
     }
-  } else if ((instr->Bits(29, 2) == 0) && (instr->Bits(21, 3) == 0) &&
-             (instr->Bit(15) == 1)) {
-    Format(instr, "msub'sf 'rd, 'rn, 'rm, 'ra");
-  } else if ((instr->Bits(29, 2) == 0) && (instr->Bits(21, 3) == 2) &&
-             (instr->Bit(15) == 0)) {
+  } else if (bits == MSUB) {
+    if (zero_operand) {
+      Format(instr, "mneg'sf 'rd, 'rn, 'rm");
+    } else {
+      Format(instr, "msub'sf 'rd, 'rn, 'rm, 'ra");
+    }
+  } else if (bits == SMULH) {
     Format(instr, "smulh 'rd, 'rn, 'rm");
-  } else if ((instr->Bits(29, 2) == 0) && (instr->Bits(21, 3) == 6) &&
-             (instr->Bit(15) == 0)) {
+  } else if (bits == UMULH) {
     Format(instr, "umulh 'rd, 'rn, 'rm");
-  } else if ((instr->Bits(29, 3) == 4) && (instr->Bits(21, 3) == 5) &&
-             (instr->Bit(15) == 0)) {
-    Format(instr, "umaddl 'rd, 'rn, 'rm, 'ra");
+  } else if (bits == UMADDL) {
+    if (zero_operand) {
+      Format(instr, "umull 'rd, 'rn, 'rm");
+    } else {
+      Format(instr, "umaddl 'rd, 'rn, 'rm, 'ra");
+    }
+  } else if (bits == SMADDL) {
+    if (zero_operand) {
+      Format(instr, "smull 'rd, 'rn, 'rm");
+    } else {
+      Format(instr, "smaddl 'rd, 'rn, 'rm, 'ra");
+    }
+  } else if (bits == SMSUBL) {
+    if (zero_operand) {
+      Format(instr, "smnegl 'rd, 'rn, 'rm");
+    } else {
+      Format(instr, "smsubl 'rd, 'rn, 'rm, 'ra");
+    }
+  } else if (bits == UMSUBL) {
+    if (zero_operand) {
+      Format(instr, "umnegl 'rd, 'rn, 'rm");
+    } else {
+      Format(instr, "umsubl 'rd, 'rn, 'rm, 'ra");
+    }
   } else {
     Unknown(instr);
   }
diff --git a/runtime/vm/compiler/assembler/disassembler_x86.cc b/runtime/vm/compiler/assembler/disassembler_x86.cc
index bd9b2de..56b3878 100644
--- a/runtime/vm/compiler/assembler/disassembler_x86.cc
+++ b/runtime/vm/compiler/assembler/disassembler_x86.cc
@@ -1559,7 +1559,7 @@
       Print(",");
       current += PrintImmediate(current, BYTE_SIZE);
     }
-  } else if (opcode == 0xBA && (*current & 0xE0) == 0xE0) {
+  } else if (opcode == 0xBA && (*current & 0x60) == 0x60) {
     // bt? immediate instruction
     int r = (*current >> 3) & 7;
     static const char* const names[4] = {"bt", "bts", "btr", "btc"};
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index ca96978..5d30eda 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -1299,8 +1299,7 @@
 
           changed = true;
 
-          if (FLAG_trace_constant_propagation &&
-              FlowGraphPrinter::ShouldPrint(graph_->function())) {
+          if (FLAG_trace_constant_propagation && graph_->should_print()) {
             THR_Print("Eliminated branch in B%" Pd " common target B%" Pd "\n",
                       block->block_id(), join->block_id());
           }
@@ -1318,11 +1317,6 @@
 }
 
 void ConstantPropagator::Transform() {
-  if (FLAG_trace_constant_propagation &&
-      FlowGraphPrinter::ShouldPrint(graph_->function())) {
-    FlowGraphPrinter::PrintGraph("Before CP", graph_);
-  }
-
   // We will recompute dominators, block ordering, block ids, block last
   // instructions, previous pointers, predecessors, etc. after eliminating
   // unreachable code.  We do not maintain those properties during the
@@ -1331,8 +1325,7 @@
        b.Advance()) {
     BlockEntryInstr* block = b.Current();
     if (!reachable_->Contains(block->preorder_number())) {
-      if (FLAG_trace_constant_propagation &&
-          FlowGraphPrinter::ShouldPrint(graph_->function())) {
+      if (FLAG_trace_constant_propagation && graph_->should_print()) {
         THR_Print("Unreachable B%" Pd "\n", block->block_id());
       }
       // Remove all uses in unreachable blocks.
@@ -1401,8 +1394,7 @@
           !defn->IsConstant() && !defn->IsPushArgument() &&
           !defn->IsStoreIndexed() && !defn->IsStoreInstanceField() &&
           !defn->IsStoreStaticField()) {
-        if (FLAG_trace_constant_propagation &&
-            FlowGraphPrinter::ShouldPrint(graph_->function())) {
+        if (FLAG_trace_constant_propagation && graph_->should_print()) {
           THR_Print("Constant v%" Pd " = %s\n", defn->ssa_temp_index(),
                     defn->constant_value().ToCString());
         }
@@ -1463,11 +1455,6 @@
   graph_->MergeBlocks();
   GrowableArray<BitVector*> dominance_frontier;
   graph_->ComputeDominators(&dominance_frontier);
-
-  if (FLAG_trace_constant_propagation &&
-      FlowGraphPrinter::ShouldPrint(graph_->function())) {
-    FlowGraphPrinter::PrintGraph("After CP", graph_);
-  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index 516db37..febb84c 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -50,7 +50,8 @@
       deferred_prefixes_(parsed_function.deferred_prefixes()),
       await_token_positions_(NULL),
       captured_parameters_(new (zone()) BitVector(zone(), variable_count())),
-      inlining_id_(-1) {
+      inlining_id_(-1),
+      should_print_(FlowGraphPrinter::ShouldPrint(parsed_function.function())) {
   DiscoverBlocks();
 }
 
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index a98c65c..ac09be0 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -346,6 +346,8 @@
   // values that are dominated by a redefinition are renamed.
   void RenameUsesDominatedByRedefinitions();
 
+  bool should_print() const { return should_print_; }
+
  private:
   friend class IfConverter;
   friend class BranchSimplifier;
@@ -445,6 +447,7 @@
   BitVector* captured_parameters_;
 
   intptr_t inlining_id_;
+  bool should_print_;
 };
 
 class LivenessAnalysis : public ValueObject {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 91f5bcd..074df75 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -1831,7 +1831,8 @@
     }
     Label next_test;
     if (!complete || !is_last_check) {
-      bias = EmitTestAndCallCheckCid(is_last_check ? failed : &next_test,
+      bias = EmitTestAndCallCheckCid(assembler(),
+                                     is_last_check ? failed : &next_test,
                                      EmitTestCidRegister(), targets[i], bias,
                                      /*jump_on_miss =*/true);
     }
@@ -1871,7 +1872,8 @@
       for (intptr_t i = 0; i < ranges.length(); ++i) {
         const CidRange& range = ranges[i];
         if (!range.IsIllegalRange()) {
-          bias = EmitTestAndCallCheckCid(is_subtype, class_id_reg, range, bias,
+          bias = EmitTestAndCallCheckCid(assembler(), is_subtype, class_id_reg,
+                                         range, bias,
                                          /*jump_on_miss=*/false);
         }
       }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 54cdc63..b6daea0 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -622,6 +622,16 @@
   void RecordAfterCall(Instruction* instr, CallResult result);
 #endif
 
+  // Returns new class-id bias.
+  //
+  // TODO(kustermann): We should move this code out of the [FlowGraphCompiler]!
+  static int EmitTestAndCallCheckCid(Assembler* assembler,
+                                     Label* label,
+                                     Register class_id_reg,
+                                     const CidRange& range,
+                                     int bias,
+                                     bool jump_on_miss = true);
+
  private:
   friend class CheckStackOverflowSlowPath;  // For pending_deoptimization_env_.
   friend class CheckedSmiSlowPath;          // Same.
@@ -668,13 +678,6 @@
 
   void EmitTestAndCallLoadCid(Register class_id_reg);
 
-  // Returns new class-id bias.
-  int EmitTestAndCallCheckCid(Label* label,
-                              Register class_id_reg,
-                              const CidRange& range,
-                              int bias,
-                              bool jump_on_miss = true);
-
 // DBC handles type tests differently from all other architectures due
 // to its interpreted nature.
 #if !defined(TARGET_ARCH_DBC)
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 5a7e101..bdbf67e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -1182,7 +1182,11 @@
   __ LoadClassId(class_id_reg, R0);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+#undef __
+#define __ assembler->
+
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Assembler* assembler,
+                                               Label* label,
                                                Register class_id_reg,
                                                const CidRange& range,
                                                int bias,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 605f983..2609224 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -1137,7 +1137,11 @@
   __ LoadClassId(class_id_reg, R0);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+#undef __
+#define __ assembler->
+
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Assembler* assembler,
+                                               Label* label,
                                                Register class_id_reg,
                                                const CidRange& range,
                                                int bias,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 12a23c2..712ab2e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -1123,7 +1123,11 @@
   __ LoadClassId(class_id_reg, EAX);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+#undef __
+#define __ assembler->
+
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Assembler* assembler,
+                                               Label* label,
                                                Register class_id_reg,
                                                const CidRange& range,
                                                int bias,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 20fb90d..25fb8a7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -1099,7 +1099,11 @@
   __ LoadClassId(class_id_reg, RAX);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+#undef __
+#define __ assembler->
+
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Assembler* assembler,
+                                               Label* label,
                                                Register class_id_reg,
                                                const CidRange& range,
                                                int bias,
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index ef164ec..dcd56b5 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -46,9 +46,6 @@
 DECLARE_FLAG(bool, eliminate_type_checks);
 
 const CidRangeVector& HierarchyInfo::SubtypeRangesForClass(const Class& klass) {
-  ASSERT(!klass.IsGeneric());
-
-  Zone* zone = thread_->zone();
   ClassTable* table = thread_->isolate()->class_table();
   const intptr_t cid_count = table->NumCids();
   if (cid_subtype_ranges_ == NULL) {
@@ -57,59 +54,93 @@
 
   CidRangeVector& ranges = cid_subtype_ranges_[klass.id()];
   if (ranges.length() == 0) {
-    // The ranges haven't been computed yet, so let's compute them.
-
-    Class& cls = Class::Handle(zone);
-    Type& dst_type = Type::Handle(zone, Type::NewNonParameterizedType(klass));
-    AbstractType& cls_type = AbstractType::Handle(zone);
-
-    intptr_t start = -1;
-    for (intptr_t cid = kInstanceCid; cid < cid_count; ++cid) {
-      // Create local zone because deep hierarchies may allocate lots of handles
-      // within one iteration of this loop.
-      StackZone stack_zone(thread_);
-      HANDLESCOPE(thread_);
-
-      if (!table->HasValidClassAt(cid)) continue;
-      if (cid == kTypeArgumentsCid) continue;
-      if (cid == kVoidCid) continue;
-      if (cid == kDynamicCid) continue;
-      if (cid == kNullCid) continue;
-      cls = table->At(cid);
-      if (cls.is_abstract()) continue;
-      if (cls.is_patch()) continue;
-      if (cls.IsTopLevel()) continue;
-
-      cls_type = cls.RareType();
-      const bool is_subtype =
-          cls_type.IsSubtypeOf(dst_type, NULL, NULL, Heap::kNew);
-      if (start == -1 && is_subtype) {
-        start = cid;
-      } else if (start != -1 && !is_subtype) {
-        CidRange range(start, cid - 1);
-        ranges.Add(range);
-        start = -1;
-      }
-    }
-
-    if (start != -1) {
-      CidRange range(start, cid_count - 1);
-      ranges.Add(range);
-    }
-
-    if (start == -1 && ranges.length() == 0) {
-      // Not implemented by any concrete class.
-      CidRange range;
-      ASSERT(range.IsIllegalRange());
-      ranges.Add(range);
-    }
+    BuildRangesFor(table, &ranges, klass, /*use_subtype_test=*/true);
   }
   return ranges;
 }
 
-bool HierarchyInfo::InstanceOfHasClassRange(const AbstractType& type,
-                                            intptr_t* lower_limit,
-                                            intptr_t* upper_limit) {
+const CidRangeVector& HierarchyInfo::SubclassRangesForClass(
+    const Class& klass) {
+  ClassTable* table = thread_->isolate()->class_table();
+  const intptr_t cid_count = table->NumCids();
+  if (cid_subclass_ranges_ == NULL) {
+    cid_subclass_ranges_ = new CidRangeVector[cid_count];
+  }
+
+  CidRangeVector& ranges = cid_subclass_ranges_[klass.id()];
+  if (ranges.length() == 0) {
+    BuildRangesFor(table, &ranges, klass, /*use_subtype_test=*/false);
+  }
+  return ranges;
+}
+
+void HierarchyInfo::BuildRangesFor(ClassTable* table,
+                                   CidRangeVector* ranges,
+                                   const Class& klass,
+                                   bool use_subtype_test) {
+  Zone* zone = thread_->zone();
+  Class& cls = Class::Handle(zone);
+
+  // Only really used if `use_subtype_test == true`.
+  const Type& dst_type = Type::Handle(zone, Type::RawCast(klass.RareType()));
+  AbstractType& cls_type = AbstractType::Handle(zone);
+
+  const intptr_t cid_count = table->NumCids();
+
+  intptr_t start = -1;
+  for (intptr_t cid = kInstanceCid; cid < cid_count; ++cid) {
+    // Create local zone because deep hierarchies may allocate lots of handles
+    // within one iteration of this loop.
+    StackZone stack_zone(thread_);
+    HANDLESCOPE(thread_);
+
+    if (!table->HasValidClassAt(cid)) continue;
+    if (cid == kTypeArgumentsCid) continue;
+    if (cid == kVoidCid) continue;
+    if (cid == kDynamicCid) continue;
+    if (cid == kNullCid) continue;
+    cls = table->At(cid);
+    if (cls.is_abstract()) continue;
+    if (cls.is_patch()) continue;
+    if (cls.IsTopLevel()) continue;
+
+    // We are either interested in [CidRange]es of subclasses or subtypes.
+    bool test_succeded = false;
+    if (use_subtype_test) {
+      cls_type = cls.RareType();
+      test_succeded = cls_type.IsSubtypeOf(dst_type, NULL, NULL, Heap::kNew);
+    } else {
+      while (!cls.IsObjectClass()) {
+        if (cls.raw() == klass.raw()) {
+          test_succeded = true;
+          break;
+        }
+        cls = cls.SuperClass();
+      }
+    }
+
+    if (start == -1 && test_succeded) {
+      start = cid;
+    } else if (start != -1 && !test_succeded) {
+      CidRange range(start, cid - 1);
+      ranges->Add(range);
+      start = -1;
+    }
+  }
+
+  if (start != -1) {
+    CidRange range(start, cid_count - 1);
+    ranges->Add(range);
+  }
+
+  if (start == -1 && ranges->length() == 0) {
+    CidRange range;
+    ASSERT(range.IsIllegalRange());
+    ranges->Add(range);
+  }
+}
+
+bool HierarchyInfo::CanUseSubtypeRangeCheckFor(const AbstractType& type) {
   ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
 
   if (!type.IsInstantiated() || type.IsFunctionType() ||
@@ -117,17 +148,92 @@
     return false;
   }
 
-  // TODO(kustermann): Support also classes like 'class Foo extends Bar<Baz> {}'
   Zone* zone = thread_->zone();
   const Class& type_class = Class::Handle(zone, type.type_class());
-  if (type_class.NumTypeArguments() > 0) {
+
+  // We can use class id range checks only if we don't have to test type
+  // arguments.
+  //
+  // This is e.g. true for "String" but also for "List<dynamic>".  (A type for
+  // which the type arguments vector is filled with "dynamic" is known as a rare
+  // type)
+  if (type_class.IsGeneric()) {
+    // TODO(kustermann): We might want to consider extending this when the type
+    // arguments are not "dynamic" but instantiated-to-bounds.
+    const Type& rare_type =
+        Type::Handle(zone, Type::RawCast(type_class.RareType()));
+    if (!rare_type.Equals(type)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool HierarchyInfo::CanUseGenericSubtypeRangeCheckFor(
+    const AbstractType& type) {
+  ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
+
+  if (type.IsFunctionType() || type.IsDartFunctionType()) {
     return false;
   }
-  const CidRangeVector& ranges = SubtypeRangesForClass(type_class);
-  if (ranges.length() == 1) {
-    *lower_limit = ranges[0].cid_start;
-    *upper_limit = ranges[0].cid_end;
-    return true;
+
+  // NOTE: We do allow non-instantiated types here (in comparison to
+  // [CanUseSubtypeRangeCheckFor], since we handle type parameters in the type
+  // expression in some cases (see below).
+
+  Zone* zone = thread_->zone();
+  const Class& type_class = Class::Handle(zone, type.type_class());
+  const intptr_t num_type_parameters = type_class.NumTypeParameters();
+  const intptr_t num_type_arguments = type_class.NumTypeArguments();
+
+  // This function should only be called for generic classes.
+  ASSERT(type_class.NumTypeParameters() > 0 &&
+         type.arguments() != TypeArguments::null());
+
+  // If the type class is implemented the different implementations might have
+  // their type argument vector stored at different offsets and we can therefore
+  // not perform our optimized [CidRange]-based implementation.
+  //
+  // TODO(kustermann): If the class is implemented but all implementations
+  // store the instantator type argument vector at the same offset we can
+  // still do it!
+  if (type_class.is_implemented()) {
+    return false;
+  }
+
+  const TypeArguments& ta =
+      TypeArguments::Handle(zone, Type::Cast(type).arguments());
+  ASSERT(ta.Length() == num_type_arguments);
+
+  // The last [num_type_pararameters] entries in the [TypeArguments] vector [ta]
+  // are the values we have to check against.  Ensure we can handle all of them
+  // via [CidRange]-based checks or that it is a type parameter.
+  AbstractType& type_arg = AbstractType::Handle(zone);
+  for (intptr_t i = 0; i < num_type_parameters; ++i) {
+    type_arg = ta.TypeAt(num_type_arguments - num_type_parameters + i);
+    if (!CanUseSubtypeRangeCheckFor(type_arg) && !type_arg.IsTypeParameter()) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool HierarchyInfo::InstanceOfHasClassRange(const AbstractType& type,
+                                            intptr_t* lower_limit,
+                                            intptr_t* upper_limit) {
+  if (CanUseSubtypeRangeCheckFor(type)) {
+    const Class& type_class = Class::Handle(thread_->zone(), type.type_class());
+    const CidRangeVector& ranges = SubtypeRangesForClass(type_class);
+    if (ranges.length() == 1) {
+      const CidRange& range = ranges[0];
+      if (!range.IsIllegalRange()) {
+        *lower_limit = range.cid_start;
+        *upper_limit = range.cid_end;
+        return true;
+      }
+    }
   }
   return false;
 }
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 3a95a1a..556d1f4 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -350,7 +350,10 @@
 class HierarchyInfo : public StackResource {
  public:
   explicit HierarchyInfo(Thread* thread)
-      : StackResource(thread), thread_(thread), cid_subtype_ranges_(NULL) {
+      : StackResource(thread),
+        thread_(thread),
+        cid_subtype_ranges_(NULL),
+        cid_subclass_ranges_(NULL) {
     thread->set_hierarchy_info(this);
   }
 
@@ -359,17 +362,45 @@
 
     delete[] cid_subtype_ranges_;
     cid_subtype_ranges_ = NULL;
+
+    delete[] cid_subclass_ranges_;
+    cid_subclass_ranges_ = NULL;
   }
 
   const CidRangeVector& SubtypeRangesForClass(const Class& klass);
+  const CidRangeVector& SubclassRangesForClass(const Class& klass);
 
   bool InstanceOfHasClassRange(const AbstractType& type,
                                intptr_t* lower_limit,
                                intptr_t* upper_limit);
 
+  // Returns `true` if a simple [CidRange]-based subtype-check can be used to
+  // determine if a given instance's type is a subtype of [type].
+  //
+  // This is the case for [type]s without type arguments or where the type
+  // arguments are all dynamic (known as "rare type").
+  bool CanUseSubtypeRangeCheckFor(const AbstractType& type);
+
+  // Returns `true` if a combination of [CidRange]-based checks can be used to
+  // determine if a given instance's type is a subtype of [type].
+  //
+  // This is the case for [type]s with type arguments where we are able to do a
+  // [CidRange]-based subclass-check against the class and [CidRange]-based
+  // subtype-checks against the type arguments.
+  //
+  // This method should only be called if [CanUseSubtypeRangecheckFor] returned
+  // false.
+  bool CanUseGenericSubtypeRangeCheckFor(const AbstractType& type);
+
  private:
+  void BuildRangesFor(ClassTable* table,
+                      CidRangeVector* ranges,
+                      const Class& klass,
+                      bool use_subtype_test);
+
   Thread* thread_;
   CidRangeVector* cid_subtype_ranges_;
+  CidRangeVector* cid_subclass_ranges_;
 };
 
 // An embedded container with N elements of type T.  Used (with partial
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index a17f9ea..e9815df 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -36,6 +36,8 @@
   }
 
   char* save_ptr;  // Needed for strtok_r.
+  const char* scrubbed_name =
+      String::Handle(function.QualifiedScrubbedName()).ToCString();
   const char* function_name = function.ToFullyQualifiedCString();
   intptr_t function_name_len = strlen(function_name);
 
@@ -45,7 +47,8 @@
   char* token = strtok_r(filter_buffer, ",", &save_ptr);
   bool found = false;
   while (token != NULL) {
-    if (strstr(function_name, token) != NULL) {
+    if ((strstr(function_name, token) != NULL) ||
+        (strstr(scrubbed_name, token) != NULL)) {
       found = true;
       break;
     }
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index e3153f3..e137fad 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2091,11 +2091,6 @@
   return true;
 }
 
-static bool ShouldTraceInlining(FlowGraph* flow_graph) {
-  const Function& top = flow_graph->parsed_function().function();
-  return FLAG_trace_inlining && FlowGraphPrinter::ShouldPrint(top);
-}
-
 FlowGraphInliner::FlowGraphInliner(
     FlowGraph* flow_graph,
     GrowableArray<const Function*>* inline_id_to_function,
@@ -2107,7 +2102,7 @@
       inline_id_to_function_(inline_id_to_function),
       inline_id_to_token_pos_(inline_id_to_token_pos),
       caller_inline_id_(caller_inline_id),
-      trace_inlining_(ShouldTraceInlining(flow_graph)),
+      trace_inlining_(FLAG_trace_inlining && flow_graph->should_print()),
       speculative_policy_(speculative_policy),
       precompiler_(precompiler) {}
 
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 865982a..689b89c 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -679,9 +679,6 @@
 }
 
 void RangeAnalysis::InferRanges() {
-  if (FLAG_trace_range_analysis) {
-    FlowGraphPrinter::PrintGraph("Range Analysis (BEFORE)", flow_graph_);
-  }
   Zone* zone = flow_graph_->zone();
   // Initialize bitvector for quick filtering of int values.
   BitVector* set =
@@ -719,19 +716,11 @@
   // Widening simply maps growing bounds to the respective range bound.
   Iterate(WIDEN, kMaxInt32);
 
-  if (FLAG_trace_range_analysis) {
-    FlowGraphPrinter::PrintGraph("Range Analysis (WIDEN)", flow_graph_);
-  }
-
   // Perform fix-point iteration of range inference applying narrowing
   // to phis to compute more accurate range.
   // Narrowing only improves those boundaries that were widened up to
   // range boundary and leaves other boundaries intact.
   Iterate(NARROW, kMaxInt32);
-
-  if (FLAG_trace_range_analysis) {
-    FlowGraphPrinter::PrintGraph("Range Analysis (AFTER)", flow_graph_);
-  }
 }
 
 void RangeAnalysis::AssignRangesRecursively(Definition* defn) {
@@ -1446,10 +1435,6 @@
         generalizer.TryGeneralize(check, array_length);
       }
     }
-
-    if (FLAG_trace_range_analysis) {
-      FlowGraphPrinter::PrintGraph("RangeAnalysis (ABCE)", flow_graph_);
-    }
   }
 }
 
@@ -1467,8 +1452,7 @@
           target->PredecessorAt(0)->last_instruction()->AsBranch();
       if (target == branch->true_successor()) {
         // True unreachable.
-        if (FLAG_trace_constant_propagation &&
-            FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
+        if (FLAG_trace_constant_propagation && flow_graph_->should_print()) {
           THR_Print("Range analysis: True unreachable (B%" Pd ")\n",
                     branch->true_successor()->block_id());
         }
@@ -1476,8 +1460,7 @@
       } else {
         ASSERT(target == branch->false_successor());
         // False unreachable.
-        if (FLAG_trace_constant_propagation &&
-            FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
+        if (FLAG_trace_constant_propagation && flow_graph_->should_print()) {
           THR_Print("Range analysis: False unreachable (B%" Pd ")\n",
                     branch->false_successor()->block_id());
         }
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index 41ad3f9..2623846 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -1432,9 +1432,6 @@
 
   static bool OptimizeGraph(FlowGraph* graph) {
     ASSERT(FLAG_load_cse);
-    if (FLAG_trace_load_optimization) {
-      FlowGraphPrinter::PrintGraph("Before LoadOptimizer", graph);
-    }
 
     // For now, bail out for large functions to avoid OOM situations.
     // TODO(fschneider): Fix the memory consumption issue.
@@ -1469,11 +1466,6 @@
     }
     ForwardLoads();
     EmitPhis();
-
-    if (FLAG_trace_load_optimization) {
-      FlowGraphPrinter::PrintGraph("After LoadOptimizer", graph_);
-    }
-
     return forwarded_;
   }
 
@@ -2379,9 +2371,6 @@
 
   static void OptimizeGraph(FlowGraph* graph) {
     ASSERT(FLAG_load_cse);
-    if (FLAG_trace_load_optimization) {
-      FlowGraphPrinter::PrintGraph("Before StoreOptimizer", graph);
-    }
 
     // For now, bail out for large functions to avoid OOM situations.
     // TODO(fschneider): Fix the memory consumption issue.
@@ -2406,9 +2395,6 @@
       Dump();
     }
     EliminateDeadStores();
-    if (FLAG_trace_load_optimization) {
-      FlowGraphPrinter::PrintGraph("After StoreOptimizer", graph_);
-    }
   }
 
   bool CanEliminateStore(Instruction* instr) {
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index cb60f6a3..76cf248 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -76,11 +76,6 @@
 }
 
 void FlowGraphTypePropagator::Propagate() {
-  if (FLAG_support_il_printer && FLAG_trace_type_propagation &&
-      FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
-    FlowGraphPrinter::PrintGraph("Before type propagation", flow_graph_);
-  }
-
   // Walk the dominator tree and propagate reaching types to all Values.
   // Collect all phis for a fixed point iteration.
   PropagateRecursive(flow_graph_->graph_entry());
@@ -101,13 +96,13 @@
   while (!worklist_.is_empty()) {
     Definition* def = RemoveLastFromWorklist();
     if (FLAG_support_il_printer && FLAG_trace_type_propagation &&
-        FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
+        flow_graph_->should_print()) {
       THR_Print("recomputing type of v%" Pd ": %s\n", def->ssa_temp_index(),
                 def->Type()->ToCString());
     }
     if (def->RecomputeType()) {
       if (FLAG_support_il_printer && FLAG_trace_type_propagation &&
-          FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
+          flow_graph_->should_print()) {
         THR_Print("  ... new type %s\n", def->Type()->ToCString());
       }
       for (Value::Iterator it(def->input_use_list()); !it.Done();
@@ -121,11 +116,6 @@
       }
     }
   }
-
-  if (FLAG_support_il_printer && FLAG_trace_type_propagation &&
-      FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
-    FlowGraphPrinter::PrintGraph("After type propagation", flow_graph_);
-  }
 }
 
 void FlowGraphTypePropagator::PropagateRecursive(BlockEntryInstr* block) {
@@ -233,7 +223,7 @@
   }
 
   if (FLAG_support_il_printer && FLAG_trace_type_propagation &&
-      FlowGraphPrinter::ShouldPrint(flow_graph_->function())) {
+      flow_graph_->should_print()) {
     THR_Print("reaching type to %s for v%" Pd " is %s\n",
               value->instruction()->ToCString(),
               value->definition()->ssa_temp_index(),
@@ -1260,7 +1250,7 @@
   if ((isolate->strong() && FLAG_use_strong_mode_types) ||
       (isolate->type_checks() &&
        (type().IsFunctionType() || type().HasResolvedTypeClass()))) {
-    const AbstractType* abstract_type = abstract_type = &type();
+    const AbstractType* abstract_type = &type();
     TraceStrongModeType(this, *abstract_type);
     compile_type_annotation = CompileType::FromAbstractType(*abstract_type);
   }
diff --git a/runtime/vm/compiler/compiler_pass.cc b/runtime/vm/compiler/compiler_pass.cc
new file mode 100644
index 0000000..6750314
--- /dev/null
+++ b/runtime/vm/compiler/compiler_pass.cc
@@ -0,0 +1,405 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "vm/compiler/compiler_pass.h"
+
+#ifndef DART_PRECOMPILED_RUNTIME
+
+#include "vm/compiler/backend/block_scheduler.h"
+#include "vm/compiler/backend/branch_optimizer.h"
+#include "vm/compiler/backend/constant_propagator.h"
+#include "vm/compiler/backend/il_printer.h"
+#include "vm/compiler/backend/inliner.h"
+#include "vm/compiler/backend/linearscan.h"
+#include "vm/compiler/backend/range_analysis.h"
+#include "vm/compiler/backend/redundancy_elimination.h"
+#include "vm/compiler/backend/type_propagator.h"
+#include "vm/compiler/call_specializer.h"
+#if defined(DART_PRECOMPILER)
+#include "vm/compiler/aot/aot_call_specializer.h"
+#endif
+#include "vm/timeline.h"
+
+#define COMPILER_PASS_REPEAT(Name, Body)                                       \
+  class CompilerPass_##Name : public CompilerPass {                            \
+   public:                                                                     \
+    CompilerPass_##Name() : CompilerPass(k##Name, #Name) {}                    \
+                                                                               \
+    static bool Register() { return true; }                                    \
+                                                                               \
+   protected:                                                                  \
+    virtual bool DoBody(CompilerPassState* state) const {                      \
+      FlowGraph* flow_graph = state->flow_graph;                               \
+      USE(flow_graph);                                                         \
+      Body;                                                                    \
+    }                                                                          \
+  };                                                                           \
+  static CompilerPass_##Name compiler_pass_##Name;
+
+#define COMPILER_PASS(Name, Body)                                              \
+  COMPILER_PASS_REPEAT(Name, {                                                 \
+    Body;                                                                      \
+    return false;                                                              \
+  })
+
+namespace dart {
+
+CompilerPass* CompilerPass::passes_[CompilerPass::kNumPasses] = {NULL};
+
+DEFINE_OPTION_HANDLER(CompilerPass::ParseFilters,
+                      compiler_passes,
+                      "List of comma separated compilation passes flags. "
+                      "Use -Name to disable a pass, Name to print IL after it. "
+                      "Do --compiler-passes=help for more information.");
+
+static const char* kCompilerPassesUsage =
+    "=== How to use --compiler-passes flag\n"
+    "\n"
+    "Pass the list of comma separated compiler pass filter flags.\n"
+    "\n"
+    "For the given pass Name the following flags are supported:\n"
+    "\n"
+    "     -Name          disable the pass\n"
+    "     ]Name or Name  print IL after the pass\n"
+    "     [Name          print IL before the pass\n"
+    "     *Name          print IL before and after the pass\n"
+    "     *              print IL after each pass.\n"
+    "\n"
+    " The flag can be followed by '+' which makes it sticky, e.g. Inlining+\n"
+    " would cause IL to be printed after all passes that follow inlining and\n"
+    " are not disabled.\n"
+    "\n"
+    "List of compiler passes:\n";
+
+void CompilerPass::ParseFilters(const char* filter) {
+  if (filter == NULL || *filter == 0) {
+    return;
+  }
+
+  if (strcmp(filter, "help") == 0) {
+    OS::PrintErr("%s", kCompilerPassesUsage);
+    for (intptr_t i = 0; i < kNumPasses; i++) {
+      if (passes_[i] != NULL) {
+        OS::PrintErr("  %s\n", passes_[i]->name());
+      }
+    }
+    return;
+  }
+
+  for (const char *start = filter, *end = filter; *end != 0;
+       start = (end + 1)) {
+    // Search forward until the separator ',' or the end of filter is reached.
+    end = start;
+    while (*end != ',' && *end != '\0') {
+      end++;
+    }
+    if (start == end) {
+      OS::PrintErr("Ignoring empty compiler pass flag\n");
+      continue;
+    }
+
+    uint8_t flags = 0;
+    if (*start == '-') {
+      flags = kDisabled;
+    } else if (*start == ']') {
+      flags = kTraceAfter;
+    } else if (*start == '[') {
+      flags = kTraceBefore;
+    } else if (*start == '*') {
+      flags = kTraceBeforeOrAfter;
+    }
+    if (flags == 0) {
+      flags |= kTraceAfter;
+    } else {
+      start++;  // Skip the modifier
+    }
+
+    size_t suffix = 0;
+    if (end[-1] == '+') {
+      if (start == (end - 1)) {
+        OS::PrintErr("Sticky modifier '+' should follow pass name\n");
+        continue;
+      }
+      flags |= kSticky;
+      suffix = 1;
+    }
+
+    size_t length = (end - start) - suffix;
+    if (length != 0) {
+      char* pass_name = Utils::StrNDup(start, length);
+      CompilerPass* pass = FindPassByName(pass_name);
+      if (pass != NULL) {
+        pass->flags_ |= flags;
+      } else {
+        OS::PrintErr("Unknown compiler pass: %s\n", pass_name);
+      }
+      free(pass_name);
+    } else if (flags == kTraceBeforeOrAfter) {
+      for (intptr_t i = 0; i < kNumPasses; i++) {
+        if (passes_[i] != NULL) {
+          passes_[i]->flags_ = kTraceAfter;
+        }
+      }
+    }
+  }
+}
+
+void CompilerPass::Run(CompilerPassState* state) const {
+  if (IsFlagSet(kDisabled)) {
+    return;
+  }
+
+  if ((flags() & kSticky) != 0) {
+    state->sticky_flags |= flags();
+  }
+
+  const intptr_t kMaxRounds = 2;
+  Thread* thread = state->thread;
+  bool repeat = true;
+  for (intptr_t round = 1; round <= kMaxRounds && repeat; round++) {
+    if (round > 1) {
+      Get(kCanonicalize)->Run(state);
+    }
+
+    PrintGraph(state, kTraceBefore, round);
+    {
+      NOT_IN_PRODUCT(
+          TimelineDurationScope tds2(thread, state->compiler_timeline, name()));
+      repeat = DoBody(state);
+      DEBUG_ASSERT(state->flow_graph->VerifyUseLists());
+      thread->CheckForSafepoint();
+    }
+    PrintGraph(state, kTraceAfter, round);
+  }
+}
+
+void CompilerPass::PrintGraph(CompilerPassState* state,
+                              Flag mask,
+                              intptr_t round) const {
+  const intptr_t current_flags = flags() | state->sticky_flags;
+  FlowGraph* flow_graph = state->flow_graph;
+
+  if (flow_graph->should_print() && ((current_flags & mask) != 0)) {
+    Zone* zone = state->thread->zone();
+    const char* when = mask == kTraceBefore ? "Before" : "After";
+    const char* phase =
+        round == 1
+            ? zone->PrintToString("%s %s", when, name())
+            : zone->PrintToString("%s %s (round %" Pd ")", when, name(), round);
+
+    FlowGraphPrinter::PrintGraph(phase, flow_graph);
+  }
+}
+
+#define INVOKE_PASS(Name)                                                      \
+  CompilerPass::Get(CompilerPass::k##Name)->Run(pass_state);
+
+void CompilerPass::RunPipeline(PipelineMode mode,
+                               CompilerPassState* pass_state) {
+  INVOKE_PASS(ComputeSSA);
+#if defined(DART_PRECOMPILER)
+  if (mode == kAOT) {
+    INVOKE_PASS(ApplyClassIds);
+    INVOKE_PASS(TypePropagation);
+  }
+#endif
+  INVOKE_PASS(ApplyICData);
+  INVOKE_PASS(TryOptimizePatterns);
+  INVOKE_PASS(SetOuterInliningId);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(ApplyClassIds);
+  INVOKE_PASS(Inlining);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(ApplyClassIds);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(Canonicalize);
+  INVOKE_PASS(BranchSimplify);
+  INVOKE_PASS(IfConvert);
+  INVOKE_PASS(Canonicalize);
+  INVOKE_PASS(ConstantPropagation);
+  INVOKE_PASS(OptimisticallySpecializeSmiPhis);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(WidenSmiToInt32);
+  INVOKE_PASS(SelectRepresentations);
+  INVOKE_PASS(CSE);
+  INVOKE_PASS(LICM);
+  INVOKE_PASS(TryOptimizePatterns);
+  INVOKE_PASS(DSE);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(RangeAnalysis);
+  INVOKE_PASS(OptimizeBranches);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(TryCatchOptimization);
+  INVOKE_PASS(EliminateEnvironments);
+  INVOKE_PASS(EliminateDeadPhis);
+  INVOKE_PASS(Canonicalize);
+  INVOKE_PASS(AllocationSinking_Sink);
+  INVOKE_PASS(EliminateDeadPhis);
+  INVOKE_PASS(TypePropagation);
+  INVOKE_PASS(SelectRepresentations);
+  INVOKE_PASS(Canonicalize);
+  INVOKE_PASS(EliminateStackOverflowChecks);
+  INVOKE_PASS(Canonicalize);
+  INVOKE_PASS(AllocationSinking_DetachMaterializations);
+#if defined(DART_PRECOMPILER)
+  if (mode == kAOT) {
+    INVOKE_PASS(ReplaceArrayBoundChecksForAOT);
+  }
+#endif
+  INVOKE_PASS(FinalizeGraph);
+  INVOKE_PASS(AllocateRegisters);
+  if (mode == kJIT) {
+    INVOKE_PASS(ReorderBlocks);
+  }
+}
+
+COMPILER_PASS(ComputeSSA, {
+  CSTAT_TIMER_SCOPE(state->thread, ssa_timer);
+  // Transform to SSA (virtual register 0 and no inlining arguments).
+  flow_graph->ComputeSSA(0, NULL);
+});
+
+COMPILER_PASS(ApplyICData, { state->call_specializer->ApplyICData(); });
+
+COMPILER_PASS(TryOptimizePatterns, { flow_graph->TryOptimizePatterns(); });
+
+COMPILER_PASS(SetOuterInliningId,
+              { FlowGraphInliner::SetInliningId(flow_graph, 0); });
+
+COMPILER_PASS(Inlining, {
+  CSTAT_TIMER_SCOPE(state->thread, graphinliner_timer);
+  FlowGraphInliner inliner(
+      flow_graph, &state->inline_id_to_function, &state->inline_id_to_token_pos,
+      &state->caller_inline_id, state->speculative_policy, state->precompiler);
+  state->inlining_depth = inliner.Inline();
+});
+
+COMPILER_PASS(TypePropagation,
+              { FlowGraphTypePropagator::Propagate(flow_graph); });
+
+COMPILER_PASS(ApplyClassIds, { state->call_specializer->ApplyClassIds(); });
+
+COMPILER_PASS(EliminateStackOverflowChecks, {
+  if (!flow_graph->IsCompiledForOsr()) {
+    CheckStackOverflowElimination::EliminateStackOverflow(flow_graph);
+  }
+});
+
+COMPILER_PASS(Canonicalize, {
+  // Do optimizations that depend on the propagated type information.
+  if (flow_graph->Canonicalize()) {
+    flow_graph->Canonicalize();
+  }
+});
+
+COMPILER_PASS(BranchSimplify, { BranchSimplifier::Simplify(flow_graph); });
+
+COMPILER_PASS(IfConvert, { IfConverter::Simplify(flow_graph); });
+
+COMPILER_PASS_REPEAT(ConstantPropagation, {
+  ConstantPropagator::Optimize(flow_graph);
+  return true;
+});
+
+// Optimistically convert loop phis that have a single non-smi input
+// coming from the loop pre-header into smi-phis.
+COMPILER_PASS(OptimisticallySpecializeSmiPhis, {
+  LICM licm(flow_graph);
+  licm.OptimisticallySpecializeSmiPhis();
+});
+
+COMPILER_PASS(WidenSmiToInt32, {
+  // Where beneficial convert Smi operations into Int32 operations.
+  // Only meanigful for 32bit platforms right now.
+  flow_graph->WidenSmiToInt32();
+});
+
+COMPILER_PASS(SelectRepresentations, {
+  // Unbox doubles. Performed after constant propagation to minimize
+  // interference from phis merging double values and tagged
+  // values coming from dead paths.
+  flow_graph->SelectRepresentations();
+});
+
+COMPILER_PASS_REPEAT(CSE, { return DominatorBasedCSE::Optimize(flow_graph); });
+
+COMPILER_PASS(LICM, {
+  flow_graph->RenameUsesDominatedByRedefinitions();
+  DEBUG_ASSERT(flow_graph->VerifyRedefinitions());
+  LICM licm(flow_graph);
+  licm.Optimize();
+  flow_graph->RemoveRedefinitions();
+});
+
+COMPILER_PASS(DSE, { DeadStoreElimination::Optimize(flow_graph); });
+
+COMPILER_PASS(RangeAnalysis, {
+  // We have to perform range analysis after LICM because it
+  // optimistically moves CheckSmi through phis into loop preheaders
+  // making some phis smi.
+  RangeAnalysis range_analysis(flow_graph);
+  range_analysis.Analyze();
+});
+
+COMPILER_PASS(OptimizeBranches, {
+  // Constant propagation can use information from range analysis to
+  // find unreachable branch targets and eliminate branches that have
+  // the same true- and false-target.
+  ConstantPropagator::OptimizeBranches(flow_graph);
+});
+
+COMPILER_PASS(TryCatchOptimization,
+              { TryCatchAnalyzer::Optimize(flow_graph); });
+
+COMPILER_PASS(EliminateEnvironments, { flow_graph->EliminateEnvironments(); });
+
+COMPILER_PASS(EliminateDeadPhis,
+              { DeadCodeElimination::EliminateDeadPhis(flow_graph); });
+
+COMPILER_PASS(AllocationSinking_Sink, {
+  // TODO(vegorov): Support allocation sinking with try-catch.
+  if (flow_graph->graph_entry()->SuccessorCount() == 1) {
+    state->sinking = new AllocationSinking(flow_graph);
+    state->sinking->Optimize();
+  }
+});
+
+COMPILER_PASS(AllocationSinking_DetachMaterializations, {
+  if (state->sinking != NULL) {
+    // Remove all MaterializeObject instructions inserted by allocation
+    // sinking from the flow graph and let them float on the side
+    // referenced only from environments. Register allocator will consider
+    // them as part of a deoptimization environment.
+    state->sinking->DetachMaterializations();
+  }
+});
+
+COMPILER_PASS(AllocateRegisters, {
+  // Perform register allocation on the SSA graph.
+  FlowGraphAllocator allocator(*flow_graph);
+  allocator.AllocateRegisters();
+});
+
+COMPILER_PASS(ReorderBlocks, {
+  if (state->reorder_blocks) {
+    state->block_scheduler->ReorderBlocks();
+  }
+});
+
+COMPILER_PASS(FinalizeGraph, {
+  // Compute and store graph informations (call & instruction counts)
+  // to be later used by the inliner.
+  FlowGraphInliner::CollectGraphInfo(flow_graph, true);
+  flow_graph->function().set_inlining_depth(state->inlining_depth);
+  flow_graph->RemoveRedefinitions();
+});
+
+#if defined(DART_PRECOMPILER)
+COMPILER_PASS(ReplaceArrayBoundChecksForAOT,
+              { AotCallSpecializer::ReplaceArrayBoundChecks(flow_graph); })
+#endif
+
+}  // namespace dart
+
+#endif  // DART_PRECOMPILED_RUNTIME
diff --git a/runtime/vm/compiler/compiler_pass.h b/runtime/vm/compiler/compiler_pass.h
new file mode 100644
index 0000000..4c31527
--- /dev/null
+++ b/runtime/vm/compiler/compiler_pass.h
@@ -0,0 +1,170 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_COMPILER_COMPILER_PASS_H_
+#define RUNTIME_VM_COMPILER_COMPILER_PASS_H_
+
+#ifndef DART_PRECOMPILED_RUNTIME
+
+#include "vm/growable_array.h"
+#include "vm/token_position.h"
+#include "vm/zone.h"
+
+namespace dart {
+
+#define COMPILER_PASS_LIST(V)                                                  \
+  V(AllocateRegisters)                                                         \
+  V(AllocationSinking_DetachMaterializations)                                  \
+  V(AllocationSinking_Sink)                                                    \
+  V(ApplyClassIds)                                                             \
+  V(ApplyICData)                                                               \
+  V(BranchSimplify)                                                            \
+  V(CSE)                                                                       \
+  V(Canonicalize)                                                              \
+  V(ComputeSSA)                                                                \
+  V(ConstantPropagation)                                                       \
+  V(DSE)                                                                       \
+  V(EliminateDeadPhis)                                                         \
+  V(EliminateEnvironments)                                                     \
+  V(EliminateStackOverflowChecks)                                              \
+  V(FinalizeGraph)                                                             \
+  V(IfConvert)                                                                 \
+  V(Inlining)                                                                  \
+  V(LICM)                                                                      \
+  V(OptimisticallySpecializeSmiPhis)                                           \
+  V(OptimizeBranches)                                                          \
+  V(RangeAnalysis)                                                             \
+  V(ReorderBlocks)                                                             \
+  V(ReplaceArrayBoundChecksForAOT)                                             \
+  V(SelectRepresentations)                                                     \
+  V(SetOuterInliningId)                                                        \
+  V(TryCatchOptimization)                                                      \
+  V(TryOptimizePatterns)                                                       \
+  V(TypePropagation)                                                           \
+  V(WidenSmiToInt32)
+
+class AllocationSinking;
+class BlockScheduler;
+class CallSpecializer;
+class FlowGraph;
+class Function;
+class Precompiler;
+class SpeculativeInliningPolicy;
+
+struct CompilerPassState {
+  CompilerPassState(Thread* thread,
+                    FlowGraph* flow_graph,
+                    SpeculativeInliningPolicy* speculative_policy,
+                    Precompiler* precompiler = NULL)
+      : thread(thread),
+        flow_graph(flow_graph),
+        precompiler(precompiler),
+        inlining_depth(0),
+        sinking(NULL),
+#ifndef PRODUCT
+        compiler_timeline(NULL),
+#endif
+        call_specializer(NULL),
+        speculative_policy(speculative_policy),
+        reorder_blocks(false),
+        block_scheduler(NULL),
+        sticky_flags(0) {
+  }
+
+  Thread* const thread;
+  FlowGraph* const flow_graph;
+  Precompiler* const precompiler;
+  int inlining_depth;
+  AllocationSinking* sinking;
+
+  NOT_IN_PRODUCT(TimelineStream* compiler_timeline);
+
+  // Maps inline_id_to_function[inline_id] -> function. Top scope
+  // function has inline_id 0. The map is populated by the inliner.
+  GrowableArray<const Function*> inline_id_to_function;
+  // Token position where inlining occured.
+  GrowableArray<TokenPosition> inline_id_to_token_pos;
+  // For a given inlining-id(index) specifies the caller's inlining-id.
+  GrowableArray<intptr_t> caller_inline_id;
+
+  CallSpecializer* call_specializer;
+
+  SpeculativeInliningPolicy* speculative_policy;
+
+  bool reorder_blocks;
+  BlockScheduler* block_scheduler;
+
+  intptr_t sticky_flags;
+};
+
+class CompilerPass {
+ public:
+  enum Id {
+#define DEF(name) k##name,
+    COMPILER_PASS_LIST(DEF)
+#undef DEF
+  };
+
+#define ADD_ONE(name) +1
+  static const intptr_t kNumPasses = 0 COMPILER_PASS_LIST(ADD_ONE);
+#undef ADD_ONE
+
+  CompilerPass(Id id, const char* name) : name_(name), flags_(0) {
+    ASSERT(passes_[id] == NULL);
+    passes_[id] = this;
+  }
+  virtual ~CompilerPass() {}
+
+  enum Flag {
+    kDisabled = 1 << 0,
+    kTraceBefore = 1 << 1,
+    kTraceAfter = 1 << 2,
+    kSticky = 1 << 3,
+    kTraceBeforeOrAfter = kTraceBefore | kTraceAfter,
+  };
+
+  void Run(CompilerPassState* state) const;
+
+  intptr_t flags() const { return flags_; }
+  const char* name() const { return name_; }
+
+  bool IsFlagSet(Flag flag) const { return (flags() & flag) != 0; }
+
+  static CompilerPass* Get(Id id) { return passes_[id]; }
+
+  static void ParseFilters(const char* filter);
+
+  enum PipelineMode { kJIT, kAOT };
+
+  static void RunPipeline(PipelineMode mode, CompilerPassState* state);
+
+ protected:
+  // This function executes the pass. If it returns true then
+  // we will run Canonicalize on the graph and execute the pass
+  // again.
+  virtual bool DoBody(CompilerPassState* state) const = 0;
+
+ private:
+  static CompilerPass* FindPassByName(const char* name) {
+    for (intptr_t i = 0; i < kNumPasses; i++) {
+      if ((passes_[i] != NULL) && (strcmp(passes_[i]->name_, name) == 0)) {
+        return passes_[i];
+      }
+    }
+    return NULL;
+  }
+
+  void PrintGraph(CompilerPassState* state, Flag mask, intptr_t round) const;
+
+  static CompilerPass* passes_[];
+
+  const char* name_;
+  intptr_t flags_;
+};
+
+}  // namespace dart
+
+#endif
+
+#endif  // RUNTIME_VM_COMPILER_COMPILER_PASS_H_
diff --git a/runtime/vm/compiler/compiler_sources.gni b/runtime/vm/compiler/compiler_sources.gni
index 3fc13ce..4b5a3ec 100644
--- a/runtime/vm/compiler/compiler_sources.gni
+++ b/runtime/vm/compiler/compiler_sources.gni
@@ -69,6 +69,8 @@
   "call_specializer.h",
   "cha.cc",
   "cha.h",
+  "compiler_pass.cc",
+  "compiler_pass.h",
   "frontend/flow_graph_builder.cc",
   "frontend/flow_graph_builder.h",
   "frontend/kernel_binary_flowgraph.cc",
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index c77b602..81113f6 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -22,6 +22,7 @@
 #include "vm/compiler/backend/redundancy_elimination.h"
 #include "vm/compiler/backend/type_propagator.h"
 #include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_pass.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/frontend/kernel_to_il.h"
 #include "vm/compiler/jit/jit_call_specializer.h"
@@ -47,28 +48,11 @@
 
 namespace dart {
 
-DEFINE_FLAG(bool,
-            allocation_sinking,
-            true,
-            "Attempt to sink temporary allocations to side exits");
-DEFINE_FLAG(bool,
-            common_subexpression_elimination,
-            true,
-            "Do common subexpression elimination.");
-DEFINE_FLAG(
-    bool,
-    constant_propagation,
-    true,
-    "Do conditional constant propagation/unreachable code elimination.");
 DEFINE_FLAG(
     int,
     max_deoptimization_counter_threshold,
     16,
     "How many times we allow deoptimization before we disallow optimization.");
-DEFINE_FLAG(bool,
-            loop_invariant_code_motion,
-            true,
-            "Do loop invariant code motion.");
 DEFINE_FLAG(charp, optimization_filter, NULL, "Optimize only named function");
 DEFINE_FLAG(bool, print_flow_graph, false, "Print the IR flow graph.");
 DEFINE_FLAG(bool,
@@ -80,7 +64,6 @@
             false,
             "Print the deopt-id to ICData map in optimizing compiler.");
 DEFINE_FLAG(bool, print_code_source_map, false, "Print code source map.");
-DEFINE_FLAG(bool, range_analysis, true, "Enable range analysis");
 DEFINE_FLAG(bool,
             stress_test_background_compilation,
             false,
@@ -99,7 +82,6 @@
             false,
             "Trace only optimizing compiler operations.");
 DEFINE_FLAG(bool, trace_bailout, false, "Print bailout from ssa compiler.");
-DEFINE_FLAG(bool, use_inlining, true, "Enable call-site inlining");
 DEFINE_FLAG(bool,
             verify_compiler,
             false,
@@ -839,12 +821,8 @@
            (optimized() && FLAG_print_flow_graph_optimized)) &&
           FlowGraphPrinter::ShouldPrint(function);
 
-      if (print_flow_graph) {
-        if (osr_id() == Compiler::kNoOSRDeoptId) {
-          FlowGraphPrinter::PrintGraph("Before Optimizations", flow_graph);
-        } else {
-          FlowGraphPrinter::PrintGraph("For OSR", flow_graph);
-        }
+      if (print_flow_graph && !optimized()) {
+        FlowGraphPrinter::PrintGraph("Unoptimized Compilation", flow_graph);
       }
 
       BlockScheduler block_scheduler(flow_graph);
@@ -856,355 +834,38 @@
         block_scheduler.AssignEdgeWeights();
       }
 
-      if (optimized()) {
-        NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), compiler_timeline,
-                                                 "ComputeSSA"));
-        CSTAT_TIMER_SCOPE(thread(), ssa_timer);
-        // Transform to SSA (virtual register 0 and no inlining arguments).
-        flow_graph->ComputeSSA(0, NULL);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        if (print_flow_graph) {
-          FlowGraphPrinter::PrintGraph("After SSA", flow_graph);
-        }
-      }
+      CompilerPassState pass_state(thread(), flow_graph, &speculative_policy);
+      NOT_IN_PRODUCT(pass_state.compiler_timeline = compiler_timeline);
+      pass_state.block_scheduler = &block_scheduler;
+      pass_state.reorder_blocks = reorder_blocks;
 
-      // Maps inline_id_to_function[inline_id] -> function. Top scope
-      // function has inline_id 0. The map is populated by the inliner.
-      GrowableArray<const Function*> inline_id_to_function;
-      // Token position where inlining occured.
-      GrowableArray<TokenPosition> inline_id_to_token_pos;
-      // For a given inlining-id(index) specifies the caller's inlining-id.
-      GrowableArray<intptr_t> caller_inline_id;
-      // Collect all instance fields that are loaded in the graph and
-      // have non-generic type feedback attached to them that can
-      // potentially affect optimizations.
       if (optimized()) {
         NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), compiler_timeline,
                                                  "OptimizationPasses"));
-        inline_id_to_function.Add(&function);
+        CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer);
+
+        pass_state.inline_id_to_function.Add(&function);
         // We do not add the token position now because we don't know the
         // position of the inlined call until later. A side effect of this
         // is that the length of |inline_id_to_function| is always larger
         // than the length of |inline_id_to_token_pos| by one.
         // Top scope function has no caller (-1). We do this because we expect
         // all token positions to be at an inlined call.
-        caller_inline_id.Add(-1);
-        CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer);
+        pass_state.caller_inline_id.Add(-1);
 
         JitCallSpecializer call_specializer(flow_graph, &speculative_policy);
+        pass_state.call_specializer = &call_specializer;
 
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), compiler_timeline,
-                                                   "ApplyICData"));
-          call_specializer.ApplyICData();
-          thread()->CheckForSafepoint();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        // Optimize (a << b) & c patterns, merge operations.
-        // Run early in order to have more opportunity to optimize left shifts.
-        flow_graph->TryOptimizePatterns();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        FlowGraphInliner::SetInliningId(flow_graph, 0);
-
-        int inlining_depth = 0;
-
-        // Inlining (mutates the flow graph)
-        if (FLAG_use_inlining) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "Inlining"));
-          CSTAT_TIMER_SCOPE(thread(), graphinliner_timer);
-          // Propagate types to create more inlining opportunities.
-          FlowGraphTypePropagator::Propagate(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          // Use propagated class-ids to create more inlining opportunities.
-          call_specializer.ApplyClassIds();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          FlowGraphInliner inliner(flow_graph, &inline_id_to_function,
-                                   &inline_id_to_token_pos, &caller_inline_id,
-                                   &speculative_policy,
-                                   /*precompiler=*/NULL);
-          inlining_depth = inliner.Inline();
-          // Use lists are maintained and validated by the inliner.
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          thread()->CheckForSafepoint();
-        }
-
-        // Propagate types and eliminate more type tests.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "ApplyClassIds"));
-          // Use propagated class-ids to optimize further.
-          call_specializer.ApplyClassIds();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Propagate types for potentially newly added instructions by
-        // ApplyClassIds(). Must occur before canonicalization.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        // Do optimizations that depend on the propagated type information.
-        if (flow_graph->Canonicalize()) {
-          // Invoke Canonicalize twice in order to fully canonicalize patterns
-          // like "if (a & const == 0) { }".
-          flow_graph->Canonicalize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "BranchSimplifier"));
-          BranchSimplifier::Simplify(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          IfConverter::Simplify(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (FLAG_constant_propagation) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "ConstantPropagation");
-                         ConstantPropagator::Optimize(flow_graph));
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          // A canonicalization pass to remove e.g. smi checks on smi constants.
-          flow_graph->Canonicalize();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          // Canonicalization introduced more opportunities for constant
-          // propagation.
-          ConstantPropagator::Optimize(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          thread()->CheckForSafepoint();
-        }
-
-        // Optimistically convert loop phis that have a single non-smi input
-        // coming from the loop pre-header into smi-phis.
-        if (FLAG_loop_invariant_code_motion) {
-          LICM licm(flow_graph);
-          licm.OptimisticallySpecializeSmiPhis();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Propagate types and eliminate even more type tests.
-        // Recompute types after constant propagation to infer more precise
-        // types for uses that were previously reached by now eliminated phis.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "SelectRepresentations"));
-          // Where beneficial convert Smi operations into Int32 operations.
-          // Only meanigful for 32bit platforms right now.
-          flow_graph->WidenSmiToInt32();
-
-          // Unbox doubles. Performed after constant propagation to minimize
-          // interference from phis merging double values and tagged
-          // values coming from dead paths.
-          flow_graph->SelectRepresentations();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(
-              thread(), compiler_timeline, "CommonSubexpressionElinination"));
-
-          if (FLAG_common_subexpression_elimination) {
-            if (DominatorBasedCSE::Optimize(flow_graph)) {
-              DEBUG_ASSERT(flow_graph->VerifyUseLists());
-              flow_graph->Canonicalize();
-              // Do another round of CSE to take secondary effects into account:
-              // e.g. when eliminating dependent loads (a.x[0] + a.x[0])
-              // TODO(fschneider): Change to a one-pass optimization pass.
-              if (DominatorBasedCSE::Optimize(flow_graph)) {
-                flow_graph->Canonicalize();
-              }
-              DEBUG_ASSERT(flow_graph->VerifyUseLists());
-            }
-          }
-
-          // Run loop-invariant code motion right after load elimination since
-          // it depends on the numbering of loads from the previous
-          // load-elimination.
-          if (FLAG_loop_invariant_code_motion) {
-            flow_graph->RenameUsesDominatedByRedefinitions();
-            DEBUG_ASSERT(flow_graph->VerifyRedefinitions());
-            LICM licm(flow_graph);
-            licm.Optimize();
-            DEBUG_ASSERT(flow_graph->VerifyUseLists());
-          }
-          flow_graph->RemoveRedefinitions();
-          thread()->CheckForSafepoint();
-        }
-
-        // Optimize (a << b) & c patterns, merge operations.
-        // Run after CSE in order to have more opportunity to merge
-        // instructions that have same inputs.
-        flow_graph->TryOptimizePatterns();
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "DeadStoreElimination"));
-          DeadStoreElimination::Optimize(flow_graph);
-        }
-
-        if (FLAG_range_analysis) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "RangeAnalysis"));
-          // Propagate types after store-load-forwarding. Some phis may have
-          // become smi phis that can be processed by range analysis.
-          FlowGraphTypePropagator::Propagate(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-          // We have to perform range analysis after LICM because it
-          // optimistically moves CheckSmi through phis into loop preheaders
-          // making some phis smi.
-          RangeAnalysis range_analysis(flow_graph);
-          range_analysis.Analyze();
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (FLAG_constant_propagation) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(
-              thread(), compiler_timeline,
-              "ConstantPropagator::OptimizeBranches"));
-          // Constant propagation can use information from range analysis to
-          // find unreachable branch targets and eliminate branches that have
-          // the same true- and false-target.
-          ConstantPropagator::OptimizeBranches(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        // Recompute types after code movement was done to ensure correct
-        // reaching types for hoisted values.
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(
-              thread(), compiler_timeline, "TryCatchAnalyzer::Optimize"));
-          // Optimize try-blocks.
-          TryCatchAnalyzer::Optimize(flow_graph);
-        }
-
-        // Detach environments from the instructions that can't deoptimize.
-        // Do it before we attempt to perform allocation sinking to minimize
-        // amount of materializations it has to perform.
-        flow_graph->EliminateEnvironments();
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "EliminateDeadPhis"));
-          DeadCodeElimination::EliminateDeadPhis(flow_graph);
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (flow_graph->Canonicalize()) {
-          flow_graph->Canonicalize();
-        }
-
-        // Attempt to sink allocations of temporary non-escaping objects to
-        // the deoptimization path.
-        AllocationSinking* sinking = NULL;
-        if (FLAG_allocation_sinking &&
-            (flow_graph->graph_entry()->SuccessorCount() == 1)) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(
-              thread(), compiler_timeline, "AllocationSinking::Optimize"));
-          // TODO(fschneider): Support allocation sinking with try-catch.
-          sinking = new AllocationSinking(flow_graph);
-          sinking->Optimize();
-          thread()->CheckForSafepoint();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        DeadCodeElimination::EliminateDeadPhis(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        FlowGraphTypePropagator::Propagate(flow_graph);
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "SelectRepresentations"));
-          // Ensure that all phis inserted by optimization passes have
-          // consistent representations.
-          flow_graph->SelectRepresentations();
-        }
-
-        if (flow_graph->Canonicalize()) {
-          // To fully remove redundant boxing (e.g. BoxDouble used only in
-          // environments and UnboxDouble instructions) instruction we
-          // first need to replace all their uses and then fold them away.
-          // For now we just repeat Canonicalize twice to do that.
-          // TODO(vegorov): implement a separate representation folding pass.
-          flow_graph->Canonicalize();
-        }
-        DEBUG_ASSERT(flow_graph->VerifyUseLists());
-
-        if (!flow_graph->IsCompiledForOsr()) {
-          CheckStackOverflowElimination::EliminateStackOverflow(flow_graph);
-
-          if (flow_graph->Canonicalize()) {
-            // To fully remove redundant boxing (e.g. BoxDouble used only in
-            // environments and UnboxDouble instructions) instruction we
-            // first need to replace all their uses and then fold them away.
-            // For now we just repeat Canonicalize twice to do that.
-            // TODO(vegorov): implement a separate representation folding pass.
-            flow_graph->Canonicalize();
-          }
-          DEBUG_ASSERT(flow_graph->VerifyUseLists());
-        }
-
-        if (sinking != NULL) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(
-              thread(), compiler_timeline,
-              "AllocationSinking::DetachMaterializations"));
-          // Remove all MaterializeObject instructions inserted by allocation
-          // sinking from the flow graph and let them float on the side
-          // referenced only from environments. Register allocator will consider
-          // them as part of a deoptimization environment.
-          sinking->DetachMaterializations();
-        }
-
-        // Compute and store graph informations (call & instruction counts)
-        // to be later used by the inliner.
-        FlowGraphInliner::CollectGraphInfo(flow_graph, true);
-        function.set_inlining_depth(inlining_depth);
-
-        flow_graph->RemoveRedefinitions();
-        {
-          NOT_IN_PRODUCT(TimelineDurationScope tds2(thread(), compiler_timeline,
-                                                    "AllocateRegisters"));
-          // Perform register allocation on the SSA graph.
-          FlowGraphAllocator allocator(*flow_graph);
-          allocator.AllocateRegisters();
-          thread()->CheckForSafepoint();
-        }
-
-        if (reorder_blocks) {
-          NOT_IN_PRODUCT(TimelineDurationScope tds(
-              thread(), compiler_timeline, "BlockScheduler::ReorderBlocks"));
-          block_scheduler.ReorderBlocks();
-        }
-
-        if (print_flow_graph) {
-          FlowGraphPrinter::PrintGraph("After Optimizations", flow_graph);
-        }
+        CompilerPass::RunPipeline(CompilerPass::kJIT, &pass_state);
       }
 
-      ASSERT(inline_id_to_function.length() == caller_inline_id.length());
+      ASSERT(pass_state.inline_id_to_function.length() ==
+             pass_state.caller_inline_id.length());
       Assembler assembler(use_far_branches);
       FlowGraphCompiler graph_compiler(
           &assembler, flow_graph, *parsed_function(), optimized(),
-          &speculative_policy, inline_id_to_function, inline_id_to_token_pos,
-          caller_inline_id);
+          &speculative_policy, pass_state.inline_id_to_function,
+          pass_state.inline_id_to_token_pos, pass_state.caller_inline_id);
       {
         CSTAT_TIMER_SCOPE(thread(), graphcompiler_timer);
         NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), compiler_timeline,
@@ -1236,12 +897,6 @@
             *result =
                 FinalizeCompilation(&assembler, &graph_compiler, flow_graph);
           }
-          // TODO(srdjan): Enable this and remove the one from
-          // 'BackgroundCompiler::CompileOptimized' once cause of time-outs
-          // is resolved.
-          // if (isolate()->heap()->NeedsGarbageCollection()) {
-          //   isolate()->heap()->CollectAllGarbage();
-          // }
         }
       }
       // Exit the loop and the function with the correct result value.
diff --git a/runtime/vm/compiler/method_recognizer.h b/runtime/vm/compiler/method_recognizer.h
index 67ae5b3..23686a3 100644
--- a/runtime/vm/compiler/method_recognizer.h
+++ b/runtime/vm/compiler/method_recognizer.h
@@ -146,14 +146,15 @@
   V(_Smi, ~, Smi_bitNegate, Smi, 0x67299f4f)                                   \
   V(_Smi, get:bitLength, Smi_bitLength, Smi, 0x25b3cb0a)                       \
   V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, Smi, 0x562d5047)                  \
-  V(_Bigint, _lsh, Bigint_lsh, Dynamic, 0x7b99f80e)                            \
-  V(_Bigint, _rsh, Bigint_rsh, Dynamic, 0x5262b3a1)                            \
-  V(_Bigint, _absAdd, Bigint_absAdd, Dynamic, 0x07cad968)                      \
-  V(_Bigint, _absSub, Bigint_absSub, Dynamic, 0x1bf1bb4c)                      \
-  V(_Bigint, _mulAdd, Bigint_mulAdd, Dynamic, 0x229759b7)                      \
-  V(_Bigint, _sqrAdd, Bigint_sqrAdd, Dynamic, 0x5212b81f)                      \
-  V(_Bigint, _estQuotientDigit, Bigint_estQuotientDigit, Dynamic, 0x4dd342fe)  \
-  V(_Montgomery, _mulMod, Montgomery_mulMod, Dynamic, 0x17a515ac)              \
+  V(_BigIntImpl, _lsh, Bigint_lsh, Dynamic, 0x6cd9b291)                        \
+  V(_BigIntImpl, _rsh, Bigint_rsh, Dynamic, 0x1ac17d4d)                        \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, Dynamic, 0x5bf14238)                  \
+  V(_BigIntImpl, _absSub, Bigint_absSub, Dynamic, 0x1de5bd32)                  \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, Smi, 0x6f277966)                      \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, Smi, 0x68e4c8ea)                      \
+  V(_BigIntImpl, _estimateQuotientDigit, Bigint_estQuotientDigit, Smi,         \
+    0x35456d91)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, Smi, 0x0f7b0375)   \
   V(_Double, >, Double_greaterThan, Bool, 0x4f1375a3)                          \
   V(_Double, >=, Double_greaterEqualThan, Bool, 0x4260c184)                    \
   V(_Double, <, Double_lessThan, Bool, 0x365d1eba)                             \
@@ -460,14 +461,14 @@
   V(::, sin, MathSin, 0x6b7bd98c)                                              \
   V(::, sqrt, MathSqrt, 0x70482cf3)                                            \
   V(::, tan, MathTan, 0x3bcd772a)                                              \
-  V(_Bigint, _lsh, Bigint_lsh, 0x7b99f80e)                                     \
-  V(_Bigint, _rsh, Bigint_rsh, 0x5262b3a1)                                     \
-  V(_Bigint, _absAdd, Bigint_absAdd, 0x07cad968)                               \
-  V(_Bigint, _absSub, Bigint_absSub, 0x1bf1bb4c)                               \
-  V(_Bigint, _mulAdd, Bigint_mulAdd, 0x229759b7)                               \
-  V(_Bigint, _sqrAdd, Bigint_sqrAdd, 0x5212b81f)                               \
-  V(_Bigint, _estQuotientDigit, Bigint_estQuotientDigit, 0x4dd342fe)           \
-  V(_Montgomery, _mulMod, Montgomery_mulMod, 0x17a515ac)                       \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0x6cd9b291)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0x1ac17d4d)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x5bf14238)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0x1de5bd32)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x6f277966)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x68e4c8ea)                           \
+  V(_BigIntImpl, _estimateQuotientDigit, Bigint_estQuotientDigit, 0x35456d91)  \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x0f7b0375)        \
   V(_Double, >, Double_greaterThan, 0x4f1375a3)                                \
   V(_Double, >=, Double_greaterEqualThan, 0x4260c184)                          \
   V(_Double, <, Double_lessThan, 0x365d1eba)                                   \
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 1665a3a..829e3d9 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -525,7 +525,10 @@
   MSUB = MiscDP3SourceFixed | B15,
   SMULH = MiscDP3SourceFixed | B31 | B22,
   UMULH = MiscDP3SourceFixed | B31 | B23 | B22,
+  SMADDL = MiscDP3SourceFixed | B31 | B21,
   UMADDL = MiscDP3SourceFixed | B31 | B23 | B21,
+  SMSUBL = MiscDP3SourceFixed | B31 | B21 | B15,
+  UMSUBL = MiscDP3SourceFixed | B31 | B23 | B21 | B15,
 };
 
 // C3.5.10
diff --git a/runtime/vm/flags.cc b/runtime/vm/flags.cc
index 998d322..dbee5f1 100644
--- a/runtime/vm/flags.cc
+++ b/runtime/vm/flags.cc
@@ -80,12 +80,28 @@
 
 class Flag {
  public:
-  enum FlagType { kBoolean, kInteger, kUint64, kString, kFunc, kNumFlagTypes };
+  enum FlagType {
+    kBoolean,
+    kInteger,
+    kUint64,
+    kString,
+    kFlagHandler,
+    kOptionHandler,
+    kNumFlagTypes
+  };
 
   Flag(const char* name, const char* comment, void* addr, FlagType type)
       : name_(name), comment_(comment), addr_(addr), type_(type) {}
   Flag(const char* name, const char* comment, FlagHandler handler)
-      : name_(name), comment_(comment), handler_(handler), type_(kFunc) {}
+      : name_(name),
+        comment_(comment),
+        flag_handler_(handler),
+        type_(kFlagHandler) {}
+  Flag(const char* name, const char* comment, OptionHandler handler)
+      : name_(name),
+        comment_(comment),
+        option_handler_(handler),
+        type_(kOptionHandler) {}
 
   void Print() {
     if (IsUnrecognized()) {
@@ -114,7 +130,8 @@
         }
         break;
       }
-      case kFunc: {
+      case kOptionHandler:
+      case kFlagHandler: {
         OS::Print("%s: (%s)\n", name_, comment_);
         break;
       }
@@ -136,7 +153,8 @@
     int* int_ptr_;
     uint64_t* uint64_ptr_;
     charp* charp_ptr_;
-    FlagHandler handler_;
+    FlagHandler flag_handler_;
+    OptionHandler option_handler_;
   };
   FlagType type_;
   bool changed_;
@@ -226,9 +244,18 @@
   return default_value;
 }
 
-bool Flags::Register_func(FlagHandler handler,
-                          const char* name,
-                          const char* comment) {
+bool Flags::RegisterFlagHandler(FlagHandler handler,
+                                const char* name,
+                                const char* comment) {
+  ASSERT(Lookup(name) == NULL);
+  Flag* flag = new Flag(name, comment, handler);
+  AddFlag(flag);
+  return false;
+}
+
+bool Flags::RegisterOptionHandler(OptionHandler handler,
+                                  const char* name,
+                                  const char* comment) {
   ASSERT(Lookup(name) == NULL);
   Flag* flag = new Flag(name, comment, handler);
   AddFlag(flag);
@@ -291,16 +318,20 @@
       }
       break;
     }
-    case Flag::kFunc: {
+    case Flag::kFlagHandler: {
       if (strcmp(argument, "true") == 0) {
-        (flag->handler_)(true);
+        (flag->flag_handler_)(true);
       } else if (strcmp(argument, "false") == 0) {
-        (flag->handler_)(false);
+        (flag->flag_handler_)(false);
       } else {
         return false;
       }
       break;
     }
+    case Flag::kOptionHandler: {
+      (flag->option_handler_)(argument);
+      break;
+    }
     default: {
       UNREACHABLE();
       return false;
@@ -453,7 +484,8 @@
   if (!FLAG_support_service) {
     return;
   }
-  if (flag->IsUnrecognized() || flag->type_ == Flag::kFunc) {
+  if (flag->IsUnrecognized() || flag->type_ == Flag::kFlagHandler ||
+      flag->type_ == Flag::kOptionHandler) {
     return;
   }
   JSONObject jsflag(jsarr);
diff --git a/runtime/vm/flags.h b/runtime/vm/flags.h
index 2b31c35..a83e2e0 100644
--- a/runtime/vm/flags.h
+++ b/runtime/vm/flags.h
@@ -18,11 +18,15 @@
       Flags::Register_##type(&FLAG_##name, #name, default_value, comment);
 
 #define DEFINE_FLAG_HANDLER(handler, name, comment)                            \
-  bool DUMMY_##name = Flags::Register_func(handler, #name, comment);
+  bool DUMMY_##name = Flags::RegisterFlagHandler(handler, #name, comment);
+
+#define DEFINE_OPTION_HANDLER(handler, name, comment)                          \
+  bool DUMMY_##name = Flags::RegisterOptionHandler(handler, #name, comment);
 
 namespace dart {
 
 typedef void (*FlagHandler)(bool value);
+typedef void (*OptionHandler)(const char* value);
 
 // Forward declarations.
 class Flag;
@@ -51,9 +55,13 @@
                                     const char* default_value,
                                     const char* comment);
 
-  static bool Register_func(FlagHandler handler,
-                            const char* name,
-                            const char* comment);
+  static bool RegisterFlagHandler(FlagHandler handler,
+                                  const char* name,
+                                  const char* comment);
+
+  static bool RegisterOptionHandler(OptionHandler handler,
+                                    const char* name,
+                                    const char* comment);
 
   static bool ProcessCommandLineFlags(int argc, const char** argv);
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 707af78..e03dcb1 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -17543,16 +17543,19 @@
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
 
-  // Since void is a keyword, we never have to canonicalize the void type after
-  // it is canonicalized once by the vm isolate. The parser does the mapping.
-  ASSERT((type_class_id() != kVoidCid) || (isolate == Dart::vm_isolate()));
+  if ((type_class_id() == kVoidCid) && (isolate != Dart::vm_isolate())) {
+    ASSERT(Object::void_type().IsCanonical());
+    return Object::void_type().raw();
+  }
 
-  // Since dynamic is not a keyword, the parser builds a type that requires
-  // canonicalization.
   if ((type_class_id() == kDynamicCid) && (isolate != Dart::vm_isolate())) {
     ASSERT(Object::dynamic_type().IsCanonical());
     return Object::dynamic_type().raw();
   }
+  if ((type_class_id() == kVectorCid) && (isolate != Dart::vm_isolate())) {
+    ASSERT(Object::vector_type().IsCanonical());
+    return Object::vector_type().raw();
+  }
 
   const Class& cls = Class::Handle(zone, type_class());
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index a03522c..4f1f085 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -6289,6 +6289,9 @@
   virtual bool IsMalformedOrMalbounded() const {
     return AbstractType::Handle(type()).IsMalformedOrMalbounded();
   }
+  virtual RawLanguageError* error() const {
+    return AbstractType::Handle(type()).error();
+  }
   virtual bool IsResolved() const { return true; }
   virtual bool HasResolvedTypeClass() const {
     return (type() != AbstractType::null()) &&
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index a97c62c..4c9495a 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -2573,14 +2573,22 @@
     const uint64_t alu_out = static_cast<uint64_t>(res >> 64);
 #endif  // HOST_OS_WINDOWS
     set_register(instr, rd, alu_out, R31IsZR);
-  } else if ((instr->Bits(29, 3) == 4) && (instr->Bits(21, 3) == 5) &&
-             (instr->Bit(15) == 0)) {
-    // Format(instr, "umaddl 'rd, 'rn, 'rm, 'ra");
-    const uint64_t rn_val = static_cast<uint32_t>(get_wregister(rn, R31IsZR));
-    const uint64_t rm_val = static_cast<uint32_t>(get_wregister(rm, R31IsZR));
-    const uint64_t ra_val = get_register(ra, R31IsZR);
-    const uint64_t alu_out = ra_val + (rn_val * rm_val);
-    set_register(instr, rd, alu_out, R31IsZR);
+  } else if ((instr->Bits(29, 3) == 4) && (instr->Bit(15) == 0)) {
+    if (instr->Bits(21, 3) == 5) {
+      // Format(instr, "umaddl 'rd, 'rn, 'rm, 'ra");
+      const uint64_t rn_val = static_cast<uint32_t>(get_wregister(rn, R31IsZR));
+      const uint64_t rm_val = static_cast<uint32_t>(get_wregister(rm, R31IsZR));
+      const uint64_t ra_val = get_register(ra, R31IsZR);
+      const uint64_t alu_out = ra_val + (rn_val * rm_val);
+      set_register(instr, rd, alu_out, R31IsZR);
+    } else {
+      // Format(instr, "smaddl 'rd, 'rn, 'rm, 'ra");
+      const int64_t rn_val = static_cast<int32_t>(get_wregister(rn, R31IsZR));
+      const int64_t rm_val = static_cast<int32_t>(get_wregister(rm, R31IsZR));
+      const int64_t ra_val = get_register(ra, R31IsZR);
+      const int64_t alu_out = ra_val + (rn_val * rm_val);
+      set_register(instr, rd, alu_out, R31IsZR);
+    }
   } else {
     UnimplementedInstruction(instr);
   }
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 981b1dc..239b06a7 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -661,19 +661,53 @@
 }
 
 bool Thread::CanLoadFromThread(const Object& object) {
+  // In order to allow us to use assembler helper routines with non-[Code]
+  // objects *before* stubs are initialized, we only loop ver the stubs if the
+  // [object] is in fact a [Code] object.
+  if (object.IsCode()) {
 #define CHECK_OBJECT(type_name, member_name, expr, default_init_value)         \
-  if (object.raw() == expr) return true;
-  CACHED_VM_OBJECTS_LIST(CHECK_OBJECT)
+  if (object.raw() == expr) {                                                  \
+    return true;                                                               \
+  }
+    CACHED_VM_STUBS_LIST(CHECK_OBJECT)
+#undef CHECK_OBJECT
+  }
+
+  // For non [Code] objects we check if the object equals to any of the cached
+  // non-stub entries.
+#define CHECK_OBJECT(type_name, member_name, expr, default_init_value)         \
+  if (object.raw() == expr) {                                                  \
+    return true;                                                               \
+  }
+  CACHED_NON_VM_STUB_LIST(CHECK_OBJECT)
 #undef CHECK_OBJECT
   return false;
 }
 
 intptr_t Thread::OffsetFromThread(const Object& object) {
+  // In order to allow us to use assembler helper routines with non-[Code]
+  // objects *before* stubs are initialized, we only loop ver the stubs if the
+  // [object] is in fact a [Code] object.
+  if (object.IsCode()) {
 #define COMPUTE_OFFSET(type_name, member_name, expr, default_init_value)       \
   ASSERT((expr)->IsVMHeapObject());                                            \
-  if (object.raw() == expr) return Thread::member_name##offset();
-  CACHED_VM_OBJECTS_LIST(COMPUTE_OFFSET)
+  if (object.raw() == expr) {                                                  \
+    return Thread::member_name##offset();                                      \
+  }
+    CACHED_VM_STUBS_LIST(COMPUTE_OFFSET)
 #undef COMPUTE_OFFSET
+  }
+
+  // For non [Code] objects we check if the object equals to any of the cached
+  // non-stub entries.
+#define COMPUTE_OFFSET(type_name, member_name, expr, default_init_value)       \
+  ASSERT((expr)->IsVMHeapObject());                                            \
+  if (object.raw() == expr) {                                                  \
+    return Thread::member_name##offset();                                      \
+  }
+  CACHED_NON_VM_STUB_LIST(COMPUTE_OFFSET)
+#undef COMPUTE_OFFSET
+
   UNREACHABLE();
   return -1;
 }
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index ec32052..2c51ce0 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -101,12 +101,15 @@
 
 #endif
 
+#define CACHED_NON_VM_STUB_LIST(V)                                             \
+  V(RawObject*, object_null_, Object::null(), NULL)                            \
+  V(RawBool*, bool_true_, Object::bool_true().raw(), NULL)                     \
+  V(RawBool*, bool_false_, Object::bool_false().raw(), NULL)
+
 // List of VM-global objects/addresses cached in each Thread object.
 // Important: constant false must immediately follow constant true.
 #define CACHED_VM_OBJECTS_LIST(V)                                              \
-  V(RawObject*, object_null_, Object::null(), NULL)                            \
-  V(RawBool*, bool_true_, Object::bool_true().raw(), NULL)                     \
-  V(RawBool*, bool_false_, Object::bool_false().raw(), NULL)                   \
+  CACHED_NON_VM_STUB_LIST(V)                                                   \
   CACHED_VM_STUBS_LIST(V)
 
 // This assertion marks places which assume that boolean false immediate
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 1bff383..ed685d8 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -64,6 +64,7 @@
 #.........spec.sum
 #.........strong.sum
 #.........dart2js_platform.dill
+#.........dart2js_platform_strong.dill
 #.........vm_outline.dill
 #.........vm_outline_strong.dill
 #.........vm_platform.dill
@@ -547,9 +548,11 @@
   deps = [
     ":copy_libraries",
     "../utils/compiler:compile_dart2js_platform",
+    "../utils/compiler:compile_dart2js_platform_strong",
   ]
   sources = [
     "$root_out_dir/dart2js_platform.dill",
+    "$root_out_dir/dart2js_platform_strong.dill",
   ]
   outputs = [
     "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 1f58cc4..ed7134c 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -3074,6 +3074,54 @@
   }
 }
 
+/// Support class for generic function type instantiation (binding of types).
+///
+abstract class Instantiation extends Closure {
+  final Closure _genericClosure;
+  Instantiation(this._genericClosure) {
+    // TODO(sra): Copy some metadata used by Function.apply.
+  }
+
+  /// Returns a list of the bound types.
+  List get _types;
+
+  String toString() {
+    var types = "<${_types.join(', ')}>";
+    // TODO(sra): Refactor Closure formatting to place type arguments inside,
+    // e.g. "Closure 'map<String>' of Instance of 'JSArray<int>'".
+    return '$_genericClosure with $types';
+  }
+}
+
+/// Instantiation classes are subclasses of [Instantiation]. For now we have a
+/// few canned subclasses. Later we might generate the classes on demand.
+class Instantiation1<T1> extends Instantiation {
+  Instantiation1(Closure f) : super(f);
+  List get _types => [T1];
+}
+
+class Instantiation2<T1, T2> extends Instantiation {
+  Instantiation2(Closure f) : super(f);
+  List get _types => [T1, T2];
+}
+
+class Instantiation3<T1, T2, T3> extends Instantiation {
+  Instantiation3(Closure f) : super(f);
+  List get _types => [T1, T2, T3];
+}
+
+Instantiation instantiate1<U>(Closure f) {
+  return new Instantiation1<U>(f);
+}
+
+Instantiation instantiate2<U, V>(Closure f) {
+  return new Instantiation2<U, V>(f);
+}
+
+Instantiation instantiate3<U, V, W>(Closure f) {
+  return new Instantiation3<U, V, W>(f);
+}
+
 bool jsHasOwnProperty(var jsObject, String property) {
   return JS('bool', r'#.hasOwnProperty(#)', jsObject, property);
 }
diff --git a/sdk/lib/core/core.dart b/sdk/lib/core/core.dart
index bb46d6c..ca55d4a 100644
--- a/sdk/lib/core/core.dart
+++ b/sdk/lib/core/core.dart
@@ -101,7 +101,7 @@
  * and used by Map for its keys and values.
  *
  * For other kinds of collections, check out the
- * [dart:collection](#dart-collection) library.
+ * `dart:collection` library.
  *
  * ## Date and time
  *
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index 410b57d..8341360 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -38,7 +38,7 @@
  *     }
  *
  * The [List] and [Set] classes are both `Iterable`,
- * as are most classes in the [dart:collection](#dart-collection) library.
+ * as are most classes in the `dart:collection` library.
  *
  * Some [Iterable] collections can be modified.
  * Adding an element to a `List` or `Set` will change which elements it
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 82e2175..b3de731 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -10749,6 +10749,7 @@
   bool get supportsRegister => supportsRegisterElement;
 
   @DomName('Document.createElement')
+  @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
     return (typeExtension == null)
         ? _createElement_2(tagName)
@@ -42929,6 +42930,9 @@
       this;
   bool get isBroadcast => true;
 
+  // TODO(9757): Inlining should be smart and inline only when inlining would
+  // enable scalar replacement of an immediately allocated receiver.
+  @ForceInline()
   StreamSubscription<T> listen(void onData(T event),
       {Function onError, void onDone(), bool cancelOnError}) {
     return new _EventStreamSubscription<T>(
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 3f89cff..b1565cd 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -80,7 +80,7 @@
   /**
    * The [type] of the [InternetAddress] specified what IP protocol.
    */
-  InternetAddressType type;
+  InternetAddressType get type;
 
   /**
    * The numeric address of the host. For IPv4 addresses this is using
diff --git a/tests/compiler/dart2js/class_set_test.dart b/tests/compiler/dart2js/class_set_test.dart
index 6f446e6..cf71cf5 100644
--- a/tests/compiler/dart2js/class_set_test.dart
+++ b/tests/compiler/dart2js/class_set_test.dart
@@ -9,6 +9,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'type_test_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/util/enumset.dart';
@@ -21,13 +22,15 @@
     await testAll(CompileMode.memory);
     print('--test from kernel------------------------------------------------');
     await testAll(CompileMode.kernel);
+    print('--test from kernel (strong)---------------------------------------');
+    await testAll(CompileMode.kernel, strongMode: true);
   });
 }
 
-testAll(CompileMode compileMode) async {
+testAll(CompileMode compileMode, {bool strongMode: false}) async {
   await testIterators(compileMode);
   await testForEach(compileMode);
-  await testClosures(compileMode);
+  await testClosures(compileMode, strongMode);
 }
 
 testIterators(CompileMode compileMode) async {
@@ -587,30 +590,37 @@
       find: I, anySubtype: true, expectedResult: true);
 }
 
-testClosures(CompileMode compileMode) async {
+testClosures(CompileMode compileMode, bool strongMode) async {
   var env = await TypeEnvironment.create(r"""
       class A {
         call() => null;
       }
-      """, mainSource: r"""
+      """,
+      mainSource: r"""
       main() {
         new A();
         () {};
         local() {}
       }
-      """, compileMode: compileMode, testBackendWorld: true);
+      """,
+      compileMode: compileMode,
+      options: strongMode ? [Flags.strongMode] : [],
+      testBackendWorld: true);
   ClosedWorld world = env.closedWorld;
 
   ClassEntity functionClass = world.commonElements.functionClass;
   ClassEntity closureClass = world.commonElements.closureClass;
   ClassEntity A = env.getClass("A");
 
-  checkIsFunction(ClassEntity cls) {
-    Expect.isTrue(world.isSubtypeOf(cls, functionClass),
-        "Expected $cls to be a subtype of $functionClass.");
+  checkIsFunction(ClassEntity cls, {bool expected: true}) {
+    Expect.equals(
+        expected,
+        world.isSubtypeOf(cls, functionClass),
+        "Expected $cls ${expected ? '' : 'not '}to be a subtype "
+        "of $functionClass.");
   }
 
-  checkIsFunction(A);
+  checkIsFunction(A, expected: !strongMode);
 
   world.forEachStrictSubtypeOf(closureClass, checkIsFunction);
 }
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 39af62a..0f13e20 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -91,6 +91,7 @@
 codegen/value_range_test: Pass, Slow
 codegen/value_range_kernel_test: Pass, Slow
 end_to_end/exit_code_test: Pass, Slow
+generic_methods/world_test: RuntimeError
 jsinterop/declaration_test: Slow, Pass
 jsinterop/interop_anonymous_unreachable_test: Pass, Slow
 jsinterop/world_test: Pass, Slow
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 23dfb6f..253b3da 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -440,7 +440,9 @@
   args = args.toList();
   bool verbose = args.remove('-v');
   bool shouldContinue = args.remove('-c');
+  bool testAfterFailures = args.remove('-a');
   bool continued = false;
+  bool hasFailures = false;
 
   var relativeDir = dataDir.uri.path.replaceAll(Uri.base.path, '');
   print('Data dir: ${relativeDir}');
@@ -521,7 +523,10 @@
           verbose: verbose,
           forUserLibrariesOnly: forUserLibrariesOnly,
           globalIds: annotations.globalData.keys);
-      await checkCode(code, annotations, compiledData1);
+      if (await checkCode(code, annotations, compiledData1,
+          fatalErrors: !testAfterFailures)) {
+        hasFailures = true;
+      }
     }
     if (skipForKernel.contains(name)) {
       print('--skipped for kernel--------------------------------------------');
@@ -535,19 +540,24 @@
           verbose: verbose,
           forUserLibrariesOnly: forUserLibrariesOnly,
           globalIds: annotations.globalData.keys);
-      await checkCode(code, annotations, compiledData2,
-          filterActualData: filterActualData);
+      if (await checkCode(code, annotations, compiledData2,
+          filterActualData: filterActualData,
+          fatalErrors: !testAfterFailures)) {
+        hasFailures = true;
+      }
     }
   }
+  Expect.isFalse(hasFailures, 'Errors found.');
 }
 
 final Set<String> userFiles = new Set<String>();
 
 /// Checks [compiledData] against the expected data in [expectedMap] derived
 /// from [code].
-Future checkCode(Map<Uri, AnnotatedCode> code,
+Future<bool> checkCode(Map<Uri, AnnotatedCode> code,
     MemberAnnotations<IdValue> expectedMaps, CompiledData compiledData,
-    {bool filterActualData(IdValue expected, ActualData actualData)}) async {
+    {bool filterActualData(IdValue expected, ActualData actualData),
+    bool fatalErrors: true}) async {
   IdData data = new IdData(code, expectedMaps, compiledData);
   bool hasFailure = false;
 
@@ -641,9 +651,10 @@
     print("Ids not found: ${missingIds}.");
     hasFailure = true;
   }
-  if (hasFailure) {
+  if (hasFailure && fatalErrors) {
     Expect.fail('Errors found.');
   }
+  return hasFailure;
 }
 
 /// Compute a [Spannable] from an [id] in the library [mainUri].
diff --git a/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart b/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
index 5f4a8e0..e10862d 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_dart2js_test.dart
@@ -37,30 +37,6 @@
   "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.",
-  ],
   "sdk/lib/_internal/js_runtime/lib/js_array.dart": const [
     "Method type variables do not have a runtime value.",
   ],
diff --git a/tests/compiler/dart2js/old_frontend/mock_libraries.dart b/tests/compiler/dart2js/old_frontend/mock_libraries.dart
index fae6bca..3544485 100644
--- a/tests/compiler/dart2js/old_frontend/mock_libraries.dart
+++ b/tests/compiler/dart2js/old_frontend/mock_libraries.dart
@@ -218,6 +218,9 @@
   'getTypeArgumentByIndex': 'getTypeArgumentByIndex(target, index) {}',
   'GeneralConstantMap': 'class GeneralConstantMap {}',
   'iae': 'iae(x) { throw x; } ioore(x) { throw x; }',
+  'Instantiation1': 'class Instantiation1<T1> extends Closure {}',
+  'Instantiation2': 'class Instantiation2<T1,T2> extends Closure {}',
+  'Instantiation3': 'class Instantiation3<T1,T2,T3> extends Closure {}',
   'interceptedTypeCast': 'interceptedTypeCast(value, property) {}',
   'interceptedTypeCheck': 'interceptedTypeCheck(value, property) {}',
   'intTypeCast': 'intTypeCast(value) {}',
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is2.dart b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
index 508466d..2cfc7ac 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_is2.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
@@ -8,6 +8,7 @@
 /*class: A:implicit=[List<A<C2>>,List<A<C>>]*/
 class A<T> {}
 
+/*kernel.class: A1:implicit=[A1]*/
 class A1 implements A<C1> {}
 
 /*class: B:direct,explicit=[B.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/list_to_set.dart b/tests/compiler/dart2js/rti/data/list_to_set.dart
index f858a43..611e7df 100644
--- a/tests/compiler/dart2js/rti/data/list_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/list_to_set.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /*ast.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin,SubListIterable],explicit=[List],implicit=[List.E],indirect,needsArgs*/
-/*kernel.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin],explicit=[List],implicit=[List.E],indirect,needsArgs*/
+/*kernel.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin,makeListFixedLength],explicit=[List,List.E,List<JSArray.E>,List<makeListFixedLength.T>],implicit=[List.E],indirect,needsArgs*/
 /*ast.class: global#JSArray:deps=[List],explicit=[JSArray],implicit=[JSArray.E],indirect,needsArgs*/
-/*kernel.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[JSArray],implicit=[JSArray.E],indirect,needsArgs*/
+/*kernel.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[JSArray,List<JSArray.E>],implicit=[JSArray.E],indirect,needsArgs*/
 
 main() {
   var c = new Class<int>();
diff --git a/tests/compiler/dart2js/rti/data/map_literal.dart b/tests/compiler/dart2js/rti/data/map_literal.dart
index 1643414..0ca8b19 100644
--- a/tests/compiler/dart2js/rti/data/map_literal.dart
+++ b/tests/compiler/dart2js/rti/data/map_literal.dart
@@ -2,10 +2,14 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: global#Map:*/
-/*class: global#LinkedHashMap:deps=[Map]*/
-/*class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
-/*class: global#double:explicit=[double]*/
+/*ast.class: global#Map:*/
+/*kernel.class: global#Map:indirect,needsArgs*/
+/*ast.class: global#LinkedHashMap:deps=[Map]*/
+/*kernel.class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],indirect,needsArgs*/
+/*ast.class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
+/*kernel.class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],implicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],needsArgs*/
+/*ast.class: global#double:explicit=[double]*/
+/*kernel.class: global#double:explicit=[double],implicit=[double]*/
 /*class: global#JSDouble:*/
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/map_to_set.dart b/tests/compiler/dart2js/rti/data/map_to_set.dart
index 4cfda0e..a0c6503 100644
--- a/tests/compiler/dart2js/rti/data/map_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/map_to_set.dart
@@ -2,10 +2,14 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: global#Map:deps=[Class],needsArgs*/
-/*class: global#LinkedHashMap:deps=[Map],needsArgs*/
-/*class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
-/*class: global#double:explicit=[double]*/
+/*ast.class: global#Map:deps=[Class],needsArgs*/
+/*kernel.class: global#Map:deps=[Class],indirect,needsArgs*/
+/*ast.class: global#LinkedHashMap:deps=[Map],needsArgs*/
+/*kernel.class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],indirect,needsArgs*/
+/*ast.class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
+/*kernel.class: global#JsLinkedHashMap:deps=[LinkedHashMap],explicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],implicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],indirect,needsArgs*/
+/*ast.class: global#double:explicit=[double]*/
+/*kernel.class: global#double:explicit=[double],implicit=[double]*/
 /*class: global#JSDouble:*/
 
 main() {
@@ -15,7 +19,8 @@
   set is Set<String>;
 }
 
-/*class: Class:needsArgs*/
+/*ast.class: Class:needsArgs*/
+/*kernel.class: Class:implicit=[Class.S,Class.T],indirect,needsArgs*/
 class Class<T, S> {
   m() {
     return <T, S>{};
diff --git a/tests/compiler/dart2js/rti/emission/call.dart b/tests/compiler/dart2js/rti/emission/call.dart
index 41faae4..82ebfee 100644
--- a/tests/compiler/dart2js/rti/emission/call.dart
+++ b/tests/compiler/dart2js/rti/emission/call.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[$isFunction],instance*/
+/*class: A:checks=[$isFunction],functionType,instance*/
 class A {
   call() {}
 }
diff --git a/tests/compiler/dart2js/rti/emission/call_strong.dart b/tests/compiler/dart2js/rti/emission/call_strong.dart
new file mode 100644
index 0000000..51f2ee76
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/call_strong.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.
+
+import 'package:expect/expect.dart';
+import 'package:meta/dart2js.dart';
+
+/*class: A:checks=[],instance*/
+class A {
+  call() {}
+}
+
+@noInline
+test(o) => o is Function;
+
+main() {
+  Expect.isFalse(test(new A()));
+  Expect.isFalse(test(null));
+}
diff --git a/tests/compiler/dart2js/rti/emission/closure_function.dart b/tests/compiler/dart2js/rti/emission/closure_function.dart
index 9604fba..2b51d64 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function.dart
@@ -8,6 +8,6 @@
 test(o) => o is Function;
 
 main() {
-  test(/*checks=[],instance*/ () {});
+  test(/*checks=[],functionType,instance*/ () {});
   test(null);
 }
diff --git a/tests/compiler/dart2js/rti/emission/closure_function_type.dart b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
index f8560ed..22ffd4f 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function_type.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
@@ -8,6 +8,6 @@
 test(o) => o is Function();
 
 main() {
-  test(/*checks=[],instance*/ () {});
-  test(/*checks=[],instance*/ (a) {});
+  test(/*checks=[],functionType,instance*/ () {});
+  test(/*checks=[],functionType,instance*/ (a) {});
 }
diff --git a/tests/compiler/dart2js/rti/emission/function_type_argument.dart b/tests/compiler/dart2js/rti/emission/function_type_argument.dart
new file mode 100644
index 0000000..97ce3ce
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/function_type_argument.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+import 'package:meta/dart2js.dart';
+
+/*class: C:checks=[],functionType,instance,typeArgument*/
+class C {
+  call(int i) {}
+}
+
+/*class: D:checks=[],functionType,instance,typeArgument*/
+class D {
+  call(double i) {}
+}
+
+@noInline
+test1(o) => o is Function(int);
+
+@noInline
+test2(o) => o is List<Function(int)>;
+
+main() {
+  Expect.isTrue(test1(new C()));
+  Expect.isFalse(test1(new D()));
+  Expect.isTrue(test2(<C>[]));
+  Expect.isFalse(test2(<D>[]));
+}
diff --git a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
index 3291f16..c10ef59 100644
--- a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
@@ -45,46 +45,51 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect
-      .isTrue(/*checks=[],instance*/ ({D a, B b, C c, A d}) {} is classesFunc);
-  Expect
-      .isTrue(/*checks=[],instance*/ ({A a, A b, A c, A d}) {} is classesFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/ ({D a, B b, C c, A d}) {}
+      is classesFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/ ({A a, A b, A c, A d}) {}
+      is classesFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
+      /*checks=[],functionType,instance*/ ({D a, A1 b, A1 c, A1 d}) {}
+          is classesFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
-  Expect
-      .isTrue(/*checks=[],instance*/ ({D a, D b, D c, D d}) {} is classesFunc);
+      /*checks=[],functionType,instance*/ ({D a, A2 b, A2 c, A2 d}) {}
+          is classesFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/ ({D a, D b, D c, D d}) {}
+      is classesFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ ({var a, var b, var c, var d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[],instance*/ (
+      /*checks=[],functionType,instance*/ ({var a, var b, var c, var d}) {}
+          is classesFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/ (
       {Object a, Object b, Object c, Object d}) {} is classesFunc);
 
-  Expect.isTrue(/*checks=[],instance*/ (
+  Expect.isTrue(/*checks=[],functionType,instance*/ (
       {Map<num, num> m,
       List<List<A1>> l,
       G<A, A1, A1, A1> g}) {} is genericsFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ (
+      /*checks=[],functionType,instance*/ (
           {Map<int, int> m,
           List<List<D>> l,
           G<D, D, D, D> g}) {} is genericsFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ ({var m, var l, var g}) {} is genericsFunc);
+      /*checks=[],functionType,instance*/ ({var m, var l, var g}) {}
+          is genericsFunc);
   Expect.isTrue(
-      /*checks=[],instance*/ ({Object m, Object l, Object g}) {}
+      /*checks=[],functionType,instance*/ ({Object m, Object l, Object g}) {}
           is genericsFunc);
 
   Expect.isTrue(
-      /*checks=[],instance*/ ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
-  Expect.isTrue(/*checks=[],instance*/ (
+      /*checks=[],functionType,instance*/ ({A x, G y, mixFunc z, var v}) {}
+          is dynamicFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/ (
       {int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
-  Expect.isTrue(/*checks=[],instance*/ (
+  Expect.isTrue(/*checks=[],functionType,instance*/ (
       {okWithClassesFunc_1 f1,
       okWithGenericsFunc_1 f2,
       okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue(/*checks=[],instance*/ (
+  Expect.isTrue(/*checks=[],functionType,instance*/ (
       {okWithClassesFunc_2 f1,
       okWithGenericsFunc_2 f2,
       okWithDynamicFunc_2 f3}) {} is funcFunc);
diff --git a/tests/compiler/dart2js/rti/rti_emission_test.dart b/tests/compiler/dart2js/rti/rti_emission_test.dart
index cb3a0a4..f7b516b 100644
--- a/tests/compiler/dart2js/rti/rti_emission_test.dart
+++ b/tests/compiler/dart2js/rti/rti_emission_test.dart
@@ -5,7 +5,6 @@
 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/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
@@ -32,9 +31,6 @@
         computeClassDataFromAst: computeAstRtiClassEmission,
         computeClassDataFromKernel: computeKernelRtiClassEmission,
         args: args,
-        options: [
-          Flags.strongMode
-        ],
         skipForKernel: [
           // TODO(johnniwinther): Fix this. It triggers a crash in the ssa
           // builder.
@@ -49,6 +45,7 @@
   static const String checkedInstance = 'checkedInstance';
   static const String typeArgument = 'typeArgument';
   static const String checkedTypeArgument = 'checkedTypeArgument';
+  static const String functionType = 'functionType';
 }
 
 void computeAstRtiMemberEmission(
@@ -85,6 +82,9 @@
       for (StubMethod stub in cls.isChecks) {
         features.addElement(Tags.isChecks, stub.name.key);
       }
+      if (cls.functionTypeIndex != null) {
+        features.add(Tags.functionType);
+      }
     }
     ClassUse classUse = checksBuilder.classUseMapForTesting[element];
     if (classUse != null) {
diff --git a/tests/compiler/dart2js/subtype_test.dart b/tests/compiler/dart2js/subtype_test.dart
index 7d938fc..8053400 100644
--- a/tests/compiler/dart2js/subtype_test.dart
+++ b/tests/compiler/dart2js/subtype_test.dart
@@ -6,6 +6,7 @@
 
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/elements/resolution_types.dart';
@@ -18,19 +19,21 @@
     await runTests(CompileMode.memory);
     print('--test from kernel------------------------------------------------');
     await runTests(CompileMode.kernel);
+    print('--test from kernel (strong)---------------------------------------');
+    await runTests(CompileMode.kernel, strongMode: true);
   });
 }
 
-Future runTests(CompileMode compileMode) async {
-  await testInterfaceSubtype(compileMode);
-  await testCallableSubtype(compileMode);
-  await testFunctionSubtyping(compileMode);
-  await testTypedefSubtyping(compileMode);
-  await testFunctionSubtypingOptional(compileMode);
-  await testTypedefSubtypingOptional(compileMode);
-  await testFunctionSubtypingNamed(compileMode);
-  await testTypedefSubtypingNamed(compileMode);
-  await testTypeVariableSubtype(compileMode);
+Future runTests(CompileMode compileMode, {bool strongMode: false}) async {
+  await testCallableSubtype(compileMode, strongMode);
+  await testInterfaceSubtype(compileMode, strongMode);
+  await testFunctionSubtyping(compileMode, strongMode);
+  await testTypedefSubtyping(compileMode, strongMode);
+  await testFunctionSubtypingOptional(compileMode, strongMode);
+  await testTypedefSubtypingOptional(compileMode, strongMode);
+  await testFunctionSubtypingNamed(compileMode, strongMode);
+  await testTypedefSubtypingNamed(compileMode, strongMode);
+  await testTypeVariableSubtype(compileMode, strongMode);
 }
 
 void testTypes(TypeEnvironment env, DartType subtype, DartType supertype,
@@ -51,14 +54,16 @@
   testTypes(env, subtype, supertype, expectSubtype, expectMoreSpecific);
 }
 
-Future testInterfaceSubtype(CompileMode compileMode) async {
+Future testInterfaceSubtype(CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment.create(r"""
       class A<T> {}
       class B<T1, T2> extends A<T1> {}
       // TODO(johnniwinther): Inheritance with different type arguments is
       // currently not supported by the implementation.
       class C<T1, T2> extends B<T2, T1> /*implements A<A<T1>>*/ {}
-      """, compileMode: compileMode).then((env) {
+      """,
+      compileMode: compileMode,
+      options: strongMode ? [Flags.strongMode] : []).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
@@ -292,7 +297,7 @@
   });
 }
 
-Future testCallableSubtype(CompileMode compileMode) async {
+Future testCallableSubtype(CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment.create(r"""
       class U {}
       class V extends U {}
@@ -306,7 +311,9 @@
         int m4(V v, U u) => null;
         void m5(V v, int i) => null;
       }
-      """, compileMode: compileMode).then((env) {
+      """,
+      compileMode: compileMode,
+      options: strongMode ? [Flags.strongMode] : []).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
@@ -322,14 +329,14 @@
     DartType m4 = env.getMemberType('m4', classA);
     DartType m5 = env.getMemberType('m5', classA);
 
-    expect(true, A, function);
-    expect(true, A, call);
+    expect(!strongMode, A, function);
+    expect(!strongMode, A, call);
     expect(true, call, m1);
-    expect(true, A, m1);
-    expect(true, A, m2, expectMoreSpecific: false);
+    expect(!strongMode, A, m1);
+    expect(!strongMode, A, m2, expectMoreSpecific: false);
     expect(false, A, m3);
     expect(false, A, m4);
-    expect(true, A, m5);
+    expect(!strongMode, A, m5);
   });
 }
 
@@ -353,15 +360,19 @@
       'void', 'inline_void__int', '(void Function(int i) f)'),
 ];
 
-Future testFunctionSubtyping(CompileMode compileMode) async {
+Future testFunctionSubtyping(CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
-      .create(createMethods(functionTypesData), compileMode: compileMode)
+      .create(createMethods(functionTypesData),
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingHelper);
 }
 
-Future testTypedefSubtyping(CompileMode compileMode) async {
+Future testTypedefSubtyping(CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
-      .create(createTypedefs(functionTypesData), compileMode: compileMode)
+      .create(createTypedefs(functionTypesData),
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingHelper);
 }
 
@@ -437,17 +448,21 @@
   const FunctionTypeData('void', 'void___Object_int', '([Object o, int i])'),
 ];
 
-Future testFunctionSubtypingOptional(CompileMode compileMode) async {
+Future testFunctionSubtypingOptional(
+    CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
       .create(createMethods(optionalFunctionTypesData),
-          compileMode: compileMode)
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingOptionalHelper);
 }
 
-Future testTypedefSubtypingOptional(CompileMode compileMode) async {
+Future testTypedefSubtypingOptional(
+    CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
       .create(createTypedefs(optionalFunctionTypesData),
-          compileMode: compileMode)
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingOptionalHelper);
 }
 
@@ -511,15 +526,21 @@
   const FunctionTypeData('void', 'void___c_int', '({int c})'),
 ];
 
-Future testFunctionSubtypingNamed(CompileMode compileMode) async {
+Future testFunctionSubtypingNamed(
+    CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
-      .create(createMethods(namedFunctionTypesData), compileMode: compileMode)
+      .create(createMethods(namedFunctionTypesData),
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingNamedHelper);
 }
 
-Future testTypedefSubtypingNamed(CompileMode compileMode) async {
+Future testTypedefSubtypingNamed(
+    CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment
-      .create(createTypedefs(namedFunctionTypesData), compileMode: compileMode)
+      .create(createTypedefs(namedFunctionTypesData),
+          compileMode: compileMode,
+          options: strongMode ? [Flags.strongMode] : [])
       .then(functionSubtypingNamedHelper);
 }
 
@@ -559,7 +580,7 @@
   expect(true, 'void___a_int_b_int_c_int', 'void___c_int');
 }
 
-Future testTypeVariableSubtype(CompileMode compileMode) async {
+Future testTypeVariableSubtype(CompileMode compileMode, bool strongMode) async {
   await TypeEnvironment.create(r"""
       class A<T> {}
       class B<T extends Object> {}
@@ -571,7 +592,9 @@
       class H<T extends S, S extends T> {}
       class I<T extends S, S extends U, U extends T> {}
       class J<T extends S, S extends U, U extends S> {}
-      """, compileMode: compileMode).then((env) {
+      """,
+      compileMode: compileMode,
+      options: strongMode ? [Flags.strongMode] : []).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
diff --git a/tests/compiler/dart2js/subtypeset_test.dart b/tests/compiler/dart2js/subtypeset_test.dart
index 9a43016..d5038c6 100644
--- a/tests/compiler/dart2js/subtypeset_test.dart
+++ b/tests/compiler/dart2js/subtypeset_test.dart
@@ -9,6 +9,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'type_test_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/world.dart';
@@ -19,10 +20,12 @@
     await runTests(CompileMode.memory);
     print('--test from kernel------------------------------------------------');
     await runTests(CompileMode.kernel);
+    print('--test from kernel (strong)---------------------------------------');
+    await runTests(CompileMode.kernel, strongMode: true);
   });
 }
 
-runTests(CompileMode compileMode) async {
+runTests(CompileMode compileMode, {bool strongMode: false}) async {
   var env = await TypeEnvironment.create(r"""
       ///        A
       ///       / \
@@ -41,7 +44,8 @@
       class G extends C {}
       class H implements C {}
       class I implements H {}
-      """, mainSource: r"""
+      """,
+      mainSource: r"""
       main() {
         new A().call;
         new C();
@@ -50,7 +54,9 @@
         new F();
         new G();
       }
-      """, compileMode: compileMode);
+      """,
+      compileMode: compileMode,
+      options: strongMode ? [Flags.strongMode] : []);
   ClosedWorld world = env.closedWorld;
 
   ClassEntity A = env.getElement("A");
@@ -62,16 +68,28 @@
   ClassEntity G = env.getElement("G");
   ClassEntity H = env.getElement("H");
   ClassEntity I = env.getElement("I");
+  ClassEntity Function_ = env.getElement("Function");
 
-  void checkClass(ClassEntity cls, List<ClassEntity> subtypes) {
+  void checkClass(ClassEntity cls, List<ClassEntity> expectedSubtypes,
+      {bool checkSubset: false}) {
     ClassSet node = world.getClassSet(cls);
-    print('$cls:\n${node}');
-    Expect.setEquals(
-        subtypes,
-        node.subtypes().toList(),
-        "Unexpected subtypes of ${cls.name}:\n"
-        "Expected: $subtypes\n"
-        "Found   : ${node.subtypes().toList()}");
+    Set<ClassEntity> actualSubtypes = node.subtypes().toSet();
+    if (checkSubset) {
+      for (ClassEntity subtype in expectedSubtypes) {
+        Expect.isTrue(
+            actualSubtypes.contains(subtype),
+            "Unexpected subtype ${subtype} of ${cls.name}:\n"
+            "Expected: $expectedSubtypes\n"
+            "Found   : $actualSubtypes");
+      }
+    } else {
+      Expect.setEquals(
+          expectedSubtypes,
+          actualSubtypes,
+          "Unexpected subtypes of ${cls.name}:\n"
+          "Expected: $expectedSubtypes\n"
+          "Found   : $actualSubtypes");
+    }
   }
 
   checkClass(A, [A, C, E, F, G, B, D, H, I]);
@@ -83,4 +101,6 @@
   checkClass(G, [G]);
   checkClass(H, [H, I]);
   checkClass(I, [I]);
+  checkClass(Function_, strongMode ? [] : [A, B, C, D, E, F, G],
+      checkSubset: true);
 }
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index ffe01f1..b254385 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -27,11 +27,6 @@
 dummy_compiler_test: Skip # Issue 28649
 recursive_import_test: Skip # Issue 28649
 
-[ $compiler == dart2js && !$strong ]
-generic_method_dynamic_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
-generic_method_static_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
-local_signature_test: RuntimeError # Test against function type variables is only supported in strong mode.
-
 [ $compiler == dart2js && $mode == debug ]
 operator_test: Skip
 string_interpolation_test: Skip
@@ -68,20 +63,36 @@
 variable_type_test/01: Fail, OK
 variable_type_test/03: Fail, OK
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && $fasta ]
 21666_test: RuntimeError
-closure_capture2_test: RuntimeError
 closure_type_reflection2_test: RuntimeError
 closure_type_reflection_test: RuntimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
+deferred/default_arg_is_tearoff_test: RuntimeError
+deferred/deferred_class_test: RuntimeError
+deferred/deferred_constant2_test: RuntimeError
+deferred/deferred_constant3_test: RuntimeError
+deferred/deferred_constant4_test: RuntimeError
+deferred/deferred_function_test: RuntimeError
+deferred/deferred_metadata_test: RuntimeError
 deferred/deferred_mirrors1_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/deferred_overlapping_test: RuntimeError
+deferred/interface_type_variable_test: RuntimeError
+deferred/load_in_correct_order_test: RuntimeError
+deferred/multiple_default_arg_test: RuntimeError
 deferred/reflect_multiple_annotations_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/shared_constant_test: RuntimeError
+deferred/uninstantiated_type_variable_test: RuntimeError
+deferred_custom_loader_test: RuntimeError
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
-dummy_compiler_test: CompileTimeError
+deferred_inheritance_test: RuntimeError
+deferred_split_test: RuntimeError
+dummy_compiler_test: Crash
 invalid_annotation2_test/none: RuntimeError
+local_signature_test: Crash
 minus_zero_test/01: MissingCompileTimeError
 mirror_invalid_field_access2_test: RuntimeError
 mirror_invalid_field_access3_test: RuntimeError
@@ -99,15 +110,16 @@
 mirrors_declarations_filtering_test: RuntimeError
 mirrors_used_metatargets_test: RuntimeError
 mirrors_used_native_test: RuntimeError
-mirrors_used_warning2_test: RuntimeError
-mirrors_used_warning_test/minif: RuntimeError
-mirrors_used_warning_test/none: RuntimeError
+mirrors_used_warning2_test: Crash
+mirrors_used_warning_test/minif: Crash
+mirrors_used_warning_test/none: Crash
 private_symbol_literal_test/01: MissingCompileTimeError
 private_symbol_literal_test/02: MissingCompileTimeError
 private_symbol_literal_test/03: MissingCompileTimeError
 private_symbol_literal_test/04: MissingCompileTimeError
 private_symbol_literal_test/05: MissingCompileTimeError
 private_symbol_literal_test/06: MissingCompileTimeError
+recursive_import_test: Crash
 reflect_native_types_test: RuntimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
@@ -119,126 +131,6 @@
 deferred_fail_and_retry_worker_test: SkipByDesign # Uses eval to simulate failed loading.
 js_interop_test: RuntimeError # Issue 31082
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
-23056_test: Pass
-closure_capture2_test: RuntimeError
-constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred/reflect_multiple_annotations_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
-mirror_enqueuer_regression_test: Pass
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-regress/4562_test/none: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-21666_test: RuntimeError
-23264_test: RuntimeError
-closure_capture2_test: RuntimeError
-closure_type_reflection2_test: RuntimeError
-closure_type_reflection_test: RuntimeError
-constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: RuntimeError
-deferred/deferred_mirrors2_test: RuntimeError
-deferred/reflect_multiple_annotations_test: RuntimeError
-deferred/reflect_multiple_default_arg_test: RuntimeError
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
-inference_nsm_mirrors_test: RuntimeError
-invalid_annotation2_test/none: RuntimeError
-mirror_invalid_field_access2_test: RuntimeError
-mirror_invalid_field_access3_test: RuntimeError
-mirror_invalid_field_access4_test: RuntimeError
-mirror_invalid_field_access_test: RuntimeError
-mirror_invalid_invoke2_test: RuntimeError
-mirror_invalid_invoke3_test: RuntimeError
-mirror_invalid_invoke_test: RuntimeError
-mirror_printer_test/01: RuntimeError
-mirror_printer_test/none: RuntimeError
-mirror_test: RuntimeError
-mirror_type_inference_field2_test: RuntimeError
-mirror_type_inference_field_test: RuntimeError
-mirror_type_inference_function_test: RuntimeError
-mirrors_declarations_filtering_test: RuntimeError
-mirrors_used_closure_test: SkipByDesign
-mirrors_used_metatargets_test: RuntimeError
-mirrors_used_native_test: RuntimeError
-mirrors_used_warning2_test: RuntimeError
-mirrors_used_warning_test/minif: RuntimeError
-mirrors_used_warning_test/none: RuntimeError
-no_such_method_mirrors_test: RuntimeError
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-reflect_native_types_test: RuntimeError
-regress/4562_test/none: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError # Issue 30902
-
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-21666_test: RuntimeError
-23264_test: RuntimeError
-closure_type_reflection2_test: RuntimeError
-closure_type_reflection_test: RuntimeError
-constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: RuntimeError
-deferred/deferred_mirrors2_test: RuntimeError
-deferred/reflect_multiple_annotations_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred/reflect_multiple_default_arg_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
-dummy_compiler_test: CompileTimeError
-inference_nsm_mirrors_test: RuntimeError
-invalid_annotation2_test/none: RuntimeError
-mirror_invalid_field_access2_test: RuntimeError
-mirror_invalid_field_access3_test: RuntimeError
-mirror_invalid_field_access4_test: RuntimeError
-mirror_invalid_field_access_test: RuntimeError
-mirror_invalid_invoke2_test: RuntimeError
-mirror_invalid_invoke3_test: RuntimeError
-mirror_invalid_invoke_test: RuntimeError
-mirror_printer_test/01: RuntimeError
-mirror_printer_test/none: RuntimeError
-mirror_test: RuntimeError
-mirror_type_inference_field2_test: RuntimeError
-mirror_type_inference_field_test: RuntimeError
-mirror_type_inference_function_test: RuntimeError
-mirrors_declarations_filtering_test: RuntimeError
-mirrors_used_closure_test: SkipByDesign
-mirrors_used_metatargets_test: RuntimeError
-mirrors_used_native_test: RuntimeError
-mirrors_used_warning2_test: RuntimeError
-mirrors_used_warning_test/none: RuntimeError
-no_such_method_mirrors_test: RuntimeError
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-reflect_native_types_test: RuntimeError
-regress/4562_test/none: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError # Issue 30902
-
-[ $compiler == dart2js && !$dart2js_with_kernel ]
-expose_this1_test: RuntimeError # Issue 31254
-expose_this2_test: RuntimeError # Issue 31254
-string_interpolation_dynamic_test: Fail # CRLF handling clarified, see Issue 23562
-string_interpolation_test: Fail # CRLF handling clarified, see Issue 23562
-
 [ $compiler == dart2js && $fast_startup ]
 21666_test: Fail # mirrors not supported
 23056_test: Fail # mirrors not supported
@@ -276,6 +168,91 @@
 no_such_method_mirrors_test: Fail # mirrors not supported
 reflect_native_types_test: Fail # mirrors not supported
 
+[ $compiler == dart2js && $fast_startup && $fasta ]
+23056_test: Pass
+closure_capture2_test: RuntimeError
+constant_javascript_semantics_test/01: MissingCompileTimeError
+deferred/deferred_mirrors1_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/reflect_multiple_annotations_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred_fail_and_retry_test: RuntimeError
+deferred_fail_and_retry_worker_test: Fail
+mirror_enqueuer_regression_test: Pass
+private_symbol_literal_test/01: MissingCompileTimeError
+private_symbol_literal_test/02: MissingCompileTimeError
+private_symbol_literal_test/03: MissingCompileTimeError
+private_symbol_literal_test/04: MissingCompileTimeError
+private_symbol_literal_test/05: MissingCompileTimeError
+private_symbol_literal_test/06: MissingCompileTimeError
+regress/4562_test/none: CompileTimeError
+type_constant_switch_test/01: MissingCompileTimeError
+unconditional_dartio_import_test: RuntimeError
+
+[ $compiler == dart2js && $fasta ]
+21666_test: RuntimeError
+23264_test: RuntimeError
+closure_capture2_test: RuntimeError
+closure_type_reflection2_test: RuntimeError
+closure_type_reflection_test: RuntimeError
+constant_javascript_semantics_test/01: MissingCompileTimeError
+deferred/deferred_mirrors1_test: SkipByDesign
+deferred/deferred_mirrors2_test: RuntimeError
+deferred/reflect_multiple_annotations_test: RuntimeError
+deferred/reflect_multiple_default_arg_test: RuntimeError
+deferred_fail_and_retry_test: RuntimeError
+deferred_fail_and_retry_worker_test: Fail
+inference_nsm_mirrors_test: SkipByDesign
+invalid_annotation2_test/none: RuntimeError
+mirror_invalid_field_access2_test: RuntimeError
+mirror_invalid_field_access3_test: RuntimeError
+mirror_invalid_field_access4_test: RuntimeError
+mirror_invalid_field_access_test: RuntimeError
+mirror_invalid_invoke2_test: RuntimeError
+mirror_invalid_invoke3_test: RuntimeError
+mirror_invalid_invoke_test: RuntimeError
+mirror_printer_test/01: RuntimeError
+mirror_printer_test/none: RuntimeError
+mirror_test: RuntimeError
+mirror_type_inference_field2_test: RuntimeError
+mirror_type_inference_field_test: RuntimeError
+mirror_type_inference_function_test: RuntimeError
+mirrors_declarations_filtering_test: RuntimeError
+mirrors_used_closure_test: SkipByDesign
+mirrors_used_metatargets_test: RuntimeError
+mirrors_used_native_test: RuntimeError
+mirrors_used_warning2_test: RuntimeError
+mirrors_used_warning_test/minif: RuntimeError
+mirrors_used_warning_test/none: RuntimeError
+no_such_method_mirrors_test: SkipByDesign
+private_symbol_literal_test/01: MissingCompileTimeError
+private_symbol_literal_test/02: MissingCompileTimeError
+private_symbol_literal_test/03: MissingCompileTimeError
+private_symbol_literal_test/04: MissingCompileTimeError
+private_symbol_literal_test/05: MissingCompileTimeError
+private_symbol_literal_test/06: MissingCompileTimeError
+reflect_native_types_test: RuntimeError
+regress/4562_test/none: CompileTimeError
+type_constant_switch_test/01: MissingCompileTimeError
+unconditional_dartio_import_test: RuntimeError # Issue 30902
+
+[ $compiler == dart2js && $fasta && $host_checked ]
+closure_capture2_test: RuntimeError
+deferred/reflect_multiple_annotations_test: RuntimeError
+deferred/reflect_multiple_default_arg_test: RuntimeError
+
+[ $compiler == dart2js && $fasta && $minified ]
+closure_capture2_test: Pass # Passes for the wrong reason
+deferred/reflect_multiple_annotations_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+deferred/reflect_multiple_default_arg_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+dummy_compiler_test: CompileTimeError
+
+[ $compiler == dart2js && !$fasta ]
+expose_this1_test: RuntimeError # Issue 31254
+expose_this2_test: RuntimeError # Issue 31254
+string_interpolation_dynamic_test: Fail # CRLF handling clarified, see Issue 23562
+string_interpolation_test: Fail # CRLF handling clarified, see Issue 23562
+
 [ $compiler == dart2js && $host_checked ]
 dummy_compiler_test: Skip # Issue 30773
 recursive_import_test: Skip # Issue 30773
@@ -293,6 +270,11 @@
 to_string_test: Fail # Issue 7179.
 typevariable_typedef_test: Fail, OK # Tests expected output of Type.toString().
 
+[ $compiler == dart2js && !$strong ]
+generic_method_dynamic_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
+generic_method_static_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
+local_signature_test: RuntimeError # Test against function type variables is only supported in strong mode.
+
 [ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari) ]
 isolate2_test/01: Fail # Issue 14458.
 
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index d3fcb95..573d775 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -2,83 +2,31 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
+[ $compiler == dart2js ]
+bound_closure_super_test: RuntimeError
+fake_thing_test: RuntimeError # Issue 13010
+mirror_intercepted_field_test: SkipByDesign # mirrors not supported
+native_mirror_test: SkipByDesign # mirrors not supported
+native_no_such_method_exception3_frog_test: SkipByDesign # mirrors not supported
+native_no_such_method_exception4_frog_test: SkipByDesign # mirrors not supported
+native_no_such_method_exception5_frog_test: SkipByDesign # mirrors not supported
+
 [ $browser ]
 *: Skip
 
-[ $compiler == dart2js && $runtime == d8 && $system == windows && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == d8 && $system == windows && !$fasta ]
 compute_this_script_test: Skip # Issue 17458
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
-bound_closure_super_test: RuntimeError
-fake_thing_test: RuntimeError
-mirror_intercepted_field_test: RuntimeError
+[ $compiler == dart2js && $fasta ]
 native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
 subclassing_constructor_1_test: RuntimeError
 subclassing_super_call_test: RuntimeError
 subclassing_super_field_1_test: RuntimeError
 subclassing_super_field_2_test: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
-bound_closure_super_test: RuntimeError
-fake_thing_test: RuntimeError
-mirror_intercepted_field_test: RuntimeError
-native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception3_frog_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
-optimization_hints_test: RuntimeError
-subclassing_constructor_1_test: RuntimeError
-subclassing_super_call_test: RuntimeError
-subclassing_super_field_1_test: RuntimeError
-subclassing_super_field_2_test: RuntimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-bound_closure_super_test: RuntimeError
+[ $compiler == dart2js && $fasta && $host_checked ]
 compute_this_script_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/types.dart': Failed assertion: line 63 pos 12: '!result.isEmpty': is not true.
-fake_thing_test: RuntimeError
-mirror_intercepted_field_test: RuntimeError
-native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception3_frog_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
-subclassing_constructor_1_test: RuntimeError
-subclassing_super_call_test: RuntimeError
-subclassing_super_field_1_test: RuntimeError
-subclassing_super_field_2_test: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-bound_closure_super_test: RuntimeError
-fake_thing_test: RuntimeError
-mirror_intercepted_field_test: RuntimeError
-native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception3_frog_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
-optimization_hints_test: RuntimeError
-subclassing_constructor_1_test: RuntimeError
-subclassing_super_call_test: RuntimeError
-subclassing_super_field_1_test: RuntimeError
-subclassing_super_field_2_test: RuntimeError
-
-[ $compiler == dart2js && !$dart2js_with_kernel ]
-bound_closure_super_test: Fail
-fake_thing_test: Fail # Issue 13010
-native_no_such_method_exception4_frog_test: CompileTimeError # Issue 9631
-native_no_such_method_exception5_frog_test: CompileTimeError # Issue 9631
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $fast_startup ]
-mirror_intercepted_field_test: Fail # mirrors not supported
-native_mirror_test: Fail # mirrors not supported
-native_no_such_method_exception3_frog_test: Fail # mirrors not supported
-native_no_such_method_exception4_frog_test: Fail # mirrors not supported
-native_no_such_method_exception5_frog_test: Fail # mirrors not supported
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $minified ]
-optimization_hints_test: Fail, OK # Test relies on unminified names.
+[ $compiler == dart2js && $minified ]
+optimization_hints_test: RuntimeError, OK # Test relies on unminified names.
 
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 3996278..bf64735 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -6,6 +6,7 @@
 *: Skip
 
 [ $compiler == dart2js ]
+error_stack_trace1_test: RuntimeError # Issue 12399
 regexp/pcre_test: Pass, Slow # Issue 21593
 
 [ $compiler == precompiler ]
@@ -102,14 +103,7 @@
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
-apply3_test: RuntimeError
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-compare_to2_test: RuntimeError
-double_parse_test/01: RuntimeError
-error_stack_trace1_test: RuntimeError # Issue 12399
+[ $compiler == dart2js && $checked && $fasta ]
 from_environment_const_type_test/02: MissingCompileTimeError
 from_environment_const_type_test/03: MissingCompileTimeError
 from_environment_const_type_test/04: MissingCompileTimeError
@@ -128,17 +122,12 @@
 from_environment_const_type_undefined_test/06: MissingCompileTimeError
 from_environment_const_type_undefined_test/07: MissingCompileTimeError
 from_environment_const_type_undefined_test/08: MissingCompileTimeError
-hash_set_test/01: RuntimeError
-int_parse_radix_test/01: RuntimeError
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-map_test: Crash # tests/corelib/map_test.dart:866:7: Internal problem: Unhandled Null in installDefaultConstructor.
-nan_infinity_test/01: RuntimeError
-string_base_vm_test: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
+[ $compiler == dart2js && $fast_startup ]
+apply3_test: Fail # mirrors not supported
+
+[ $compiler == dart2js && $fasta ]
+apply3_test: RuntimeError # mirrors not supported
 big_integer_arith_vm_test/add: RuntimeError
 big_integer_arith_vm_test/div: RuntimeError
 big_integer_arith_vm_test/gcd: RuntimeError
@@ -152,72 +141,40 @@
 big_integer_arith_vm_test/shift: RuntimeError
 big_integer_arith_vm_test/sub: RuntimeError
 big_integer_arith_vm_test/trunDiv: RuntimeError
+big_integer_parsed_arith_vm_test: RuntimeError
+big_integer_parsed_div_rem_vm_test: RuntimeError
+big_integer_parsed_mul_div_vm_test: RuntimeError
 bit_twiddling_bigint_test: RuntimeError
+compare_to2_test: RuntimeError
+double_parse_test/01: RuntimeError
+hash_set_test/01: RuntimeError
 int_modulo_arith_test/bignum: RuntimeError
 int_modulo_arith_test/modPow: RuntimeError
+int_parse_radix_test/01: RuntimeError
 int_parse_radix_test/02: RuntimeError
 integer_to_radix_string_test: RuntimeError
 integer_to_string_test/01: RuntimeError
+iterable_return_type_test/01: RuntimeError
+iterable_return_type_test/02: RuntimeError
+iterable_to_list_test/01: RuntimeError
+nan_infinity_test/01: RuntimeError
 regress_r21715_test: RuntimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-compare_to2_test: RuntimeError
-double_parse_test/01: RuntimeError
-hash_set_test/01: RuntimeError
-int_parse_radix_test/01: RuntimeError
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-map_test: Crash # tests/corelib/map_test.dart:866:7: Internal problem: Unhandled Null in installDefaultConstructor.
-nan_infinity_test/01: RuntimeError
 string_base_vm_test: RuntimeError
 symbol_reserved_word_test/03: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && $fasta && $host_checked ]
 apply3_test: RuntimeError
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-compare_to2_test: RuntimeError
-double_parse_test/01: RuntimeError
-error_stack_trace1_test: RuntimeError # Issue 12399
-hash_set_test/01: RuntimeError
-int_parse_radix_test/01: RuntimeError
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-nan_infinity_test/01: RuntimeError
-string_base_vm_test: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && $fasta && $minified ]
 apply3_test: RuntimeError
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-compare_to2_test: RuntimeError
-double_parse_test/01: RuntimeError
-error_stack_trace1_test: RuntimeError
-hash_set_test/01: RuntimeError
-int_parse_radix_test/01: RuntimeError
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-nan_infinity_test/01: RuntimeError
-string_base_vm_test: RuntimeError
 symbol_operator_test/03: RuntimeError # Issue 27394
 symbol_operator_test/none: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
 
-[ $compiler == dart2js && !$dart2js_with_kernel ]
+[ $compiler == dart2js && !$fasta ]
 big_integer_*: Skip # VM specific test.
 bit_twiddling_bigint_test: RuntimeError # Requires bigint support.
 compare_to2_test: RuntimeError, OK # Requires bigint support.
 double_parse_test/01: Pass, Fail # JS implementations disagree on U+0085 being whitespace.
-error_stack_trace1_test: RuntimeError # Issue 12399
 hash_set_test/01: RuntimeError # Issue 11551
 int_modulo_arith_test/bignum: RuntimeError # No bigints.
 int_modulo_arith_test/modPow: RuntimeError # No bigints.
@@ -239,9 +196,6 @@
 symbol_reserved_word_test/07: MissingCompileTimeError
 symbol_reserved_word_test/10: MissingCompileTimeError
 
-[ $compiler == dart2js && $fast_startup ]
-apply3_test: Fail # mirrors not supported
-
 [ $compiler != dart2js && $fasta ]
 big_integer_arith_vm_test/add: CompileTimeError
 big_integer_arith_vm_test/div: CompileTimeError
diff --git a/tests/corelib_2/apply_test.dart b/tests/corelib_2/apply_test.dart
index 2540d9a..9a3e94b 100644
--- a/tests/corelib_2/apply_test.dart
+++ b/tests/corelib_2/apply_test.dart
@@ -42,6 +42,8 @@
     Expect.equals(res, Function.apply(func, list, new Map<Symbol, dynamic>()));
   }
 
+  testListTyped(res, Function func, list) => testList(res, func, list);
+
   test(res, func, list, map) {
     map = symbolMapToStringMap(map);
     Expect.equals(res, Function.apply(func, list, map));
@@ -71,6 +73,8 @@
         [17, 25]
       ]));
 
-  // Test that apply works on callable objects.
-  testList(42, new Callable(), [13, 29]);
+  // Test that apply works on callable objects when it is passed to a method
+  // that expects Function (and not dynamic).
+  Expect.throws(() => testList(42, new Callable(), [13, 29])); //# 01: ok
+  testListTyped(42, new Callable(), [13, 29]); //# 02: ok
 }
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 5384ab4..92a3bee 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -9,7 +9,10 @@
 num_sign_test: Crash, Pass # Issue 31768
 
 [ $compiler == dart2js ]
+date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
+int_parse_radix_test/badTypes: RuntimeError # wrong exception returned
 iterable_where_type_test: RuntimeError # issue 31718
+list_unmodifiable_test: Pass, RuntimeError # Issue 28712
 
 [ $compiler != dartdevc ]
 error_stack_trace_test/static: MissingCompileTimeError
@@ -132,32 +135,12 @@
 list_as_map_test: Pass, Slow # TODO(kasperl): Please triage.
 string_trimlr_test/unicode63: RuntimeError # Uses Unicode 6.2.0 or earlier.
 
-[ $compiler == dart2js && $runtime == d8 && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == d8 ]
 uri_base_test: RuntimeError # D8 uses a custom uri scheme for Uri.base
 
-[ $compiler == dart2js && $runtime == drt && $csp && !$dart2js_with_kernel && $minified ]
-core_runtime_types_test: Pass, Fail # Issue 27913
-
 [ $compiler == dart2js && $runtime != none ]
 regexp/pcre_test: Pass, Slow # Issue 21593
 
-[ $compiler == dart2js && $runtime != none && !$checked && !$dart2js_with_kernel ]
-growable_list_test: RuntimeError # Concurrent modifications test always runs
-null_nosuchmethod_test: RuntimeError # Like many tests, fails if type checks are skipped.
-splay_tree_from_iterable_test: RuntimeError
-string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
-
-[ $compiler == dart2js && $runtime != none && !$dart2js_with_kernel ]
-error_stack_trace1_test: RuntimeError # Issue 12399
-int_parse_radix_test/01: RuntimeError
-int_parse_radix_test/02: RuntimeError
-integer_to_string_test/01: RuntimeError
-iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
-list_concurrent_modify_test: RuntimeError # dart2js does not fully implement these
-list_test/*: RuntimeError # dart2js doesn't implement strong mode covariance checks
-nan_infinity_test/01: RuntimeError
-symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
-
 [ $compiler == dart2js && $runtime == safari ]
 regexp/lookahead_test: RuntimeError
 regexp/no-extensions_test: RuntimeError
@@ -166,7 +149,7 @@
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]
+[ $compiler == dart2js && $checked && $fasta && $strong ]
 apply3_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 from_environment_const_type_test/02: MissingCompileTimeError
@@ -187,38 +170,46 @@
 from_environment_const_type_undefined_test/06: MissingCompileTimeError
 from_environment_const_type_undefined_test/07: MissingCompileTimeError
 from_environment_const_type_undefined_test/08: MissingCompileTimeError
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
+iterable_return_type_test/01: RuntimeError # Issue 20085
+iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
 iterable_to_list_test/01: Crash # Wrong number of template arguments, given 2, expected 1
 iterable_to_list_test/none: Crash # Wrong number of template arguments, given 2, expected 1
 list_replace_range_test: RuntimeError # Issue 32010
 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/corelib_2/map_test.dart:903:7: Internal problem: Unhandled Null in installDefaultConstructor.
-symbol_reserved_word_test/03: RuntimeError
+symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
-int_from_environment_test: Pass # Issue 31762
-int_parse_radix_test/none: Pass # Issue 31762
+[ $compiler == dart2js && $fast_startup ]
+apply3_test: Fail # mirrors not supported
+dynamic_nosuchmethod_test: Fail # mirrors not supported
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
+[ $compiler == dart2js && $fast_startup && $fasta && $strong ]
+iterable_return_type_test/01: RuntimeError # Issue 20085
+iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
 iterable_to_list_test/01: Crash # Wrong number of template arguments, given 2, expected 1
 iterable_to_list_test/none: Crash # Wrong number of template arguments, given 2, expected 1
 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/corelib_2/map_test.dart:903:7: Internal problem: Unhandled Null in installDefaultConstructor.
-symbol_reserved_word_test/03: RuntimeError
+symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
-apply3_test: RuntimeError
+[ $compiler == dart2js && $fasta ]
+int_from_environment_test: Pass # Issue 31762
+int_parse_radix_test/none: Pass # Issue 31762
+
+[ $compiler == dart2js && $fasta && $host_checked && $strong ]
+apply2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+apply3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+apply_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+bigint_test: RuntimeError
 cast_test: RuntimeError
-collection_removes_test: RuntimeError
+core_runtime_types_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+date_time11_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
-growable_list_test: RuntimeError
+growable_list_test: RuntimeError # Concurrent modifications test always runs
 int_parse_radix_test/01: RuntimeError
 int_parse_radix_test/02: RuntimeError
 integer_to_radix_string_test/01: RuntimeError
@@ -227,32 +218,58 @@
 integer_to_string_test/01: RuntimeError
 iterable_empty_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
 iterable_fold_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
+iterable_followed_by_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 iterable_reduce_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-list_concurrent_modify_test: RuntimeError
-list_insert_all_test: RuntimeError
-list_replace_range_test: RuntimeError
-list_set_all_test: RuntimeError
-list_test/01: RuntimeError
-list_test/none: RuntimeError
+iterable_return_type_test/01: RuntimeError # Issue 20085
+iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
+iterable_to_list_test/01: RuntimeError # Issue 26501
+iterable_where_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+linked_hash_map_from_iterables_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+list_concurrent_modify_test: RuntimeError # dart2js does not fully implement these
+list_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+list_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+list_unmodifiable_test: RuntimeError
+main_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+map_from_iterables_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+map_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 nan_infinity_test/01: RuntimeError
 queue_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
+reg_exp_all_matches_test: RuntimeError
+reg_exp_start_end_test: RuntimeError
+regexp/capture_test: RuntimeError
+regexp/ecma-regex-examples_test: RuntimeError
+regexp/global_test: RuntimeError
+regexp/indexof_test: RuntimeError
+regexp/lastindex_test: RuntimeError
+regexp/non-capturing-groups_test: RuntimeError
+regexp/parentheses_test: RuntimeError
+regexp/pcre-test-4_test: RuntimeError
+regexp/regexp_kde_test: RuntimeError
+regexp/regexp_test: RuntimeError
+regexp/regress-regexp-codeflush_test: RuntimeError
+regexp/standalones_test: RuntimeError
+set_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 splay_tree_from_iterable_test: RuntimeError
 stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
+string_from_list_test: RuntimeError
+string_fromcharcodes_test: RuntimeError
 string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-string_split_test/checkedstore: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
+string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
+string_split_test/none: RuntimeError
+string_test: RuntimeError
+symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 uri_base_test: RuntimeError
+uri_parameters_all_test: RuntimeError
+uri_query_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+uri_test: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
+[ $compiler == dart2js && $fasta && $minified && $strong ]
 apply3_test: RuntimeError
+bigint_test: RuntimeError
 cast_test: RuntimeError
-collection_removes_test: RuntimeError
 dynamic_nosuchmethod_test: RuntimeError
-error_stack_trace1_test: RuntimeError
-growable_list_test: RuntimeError
+error_stack_trace1_test: RuntimeError # Issue 12399
+growable_list_test: RuntimeError # Concurrent modifications test always runs
 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).
 int_parse_radix_test/01: RuntimeError
 int_parse_radix_test/02: RuntimeError
@@ -262,63 +279,55 @@
 integer_to_string_test/01: RuntimeError
 iterable_empty_test: RuntimeError
 iterable_fold_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
+iterable_followed_by_test: RuntimeError
 iterable_reduce_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_to_list_test/01: RuntimeError
-list_concurrent_modify_test: RuntimeError
-list_insert_all_test: RuntimeError
-list_replace_range_test: RuntimeError # Issue 32010
-list_set_all_test: RuntimeError # Issue 32010
-list_test/01: RuntimeError
-list_test/none: RuntimeError
-nan_infinity_test/01: RuntimeError
-queue_test: RuntimeError
-splay_tree_from_iterable_test: RuntimeError
-stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-string_split_test/checkedstore: RuntimeError
-symbol_operator_test/03: RuntimeError
-symbol_operator_test/none: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
-uri_base_test: RuntimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && $strong ]
-map_unmodifiable_cast_test: Crash
-null_nosuchmethod_test: RuntimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && !$strong ]
-*: SkipByDesign
-
-[ $compiler == dart2js && !$dart2js_with_kernel ]
-date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
-from_environment_const_type_undefined_test/09: MissingCompileTimeError
-from_environment_const_type_undefined_test/11: MissingCompileTimeError
-from_environment_const_type_undefined_test/12: MissingCompileTimeError
-from_environment_const_type_undefined_test/13: MissingCompileTimeError
-from_environment_const_type_undefined_test/14: MissingCompileTimeError
-from_environment_const_type_undefined_test/16: MissingCompileTimeError
-hash_set_test/01: RuntimeError # Issue 11551
-int_parse_radix_bad_handler_test: MissingCompileTimeError
-integer_to_radix_string_test: RuntimeError # Issue 29921
-iterable_element_at_test/static: MissingCompileTimeError
-iterable_mapping_test/01: MissingCompileTimeError
 iterable_return_type_test/01: RuntimeError # Issue 20085
 iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
 iterable_to_list_test/01: RuntimeError # Issue 26501
-list_unmodifiable_test: Pass, RuntimeError # Issue 28712
-map_keys2_test: RuntimeError # needs Dart 2 is checks
-string_base_vm_static_test: MissingCompileTimeError
-string_static_test: MissingCompileTimeError
+list_concurrent_modify_test: RuntimeError # dart2js does not fully implement these
+list_test/01: RuntimeError
+list_test/none: RuntimeError
+list_unmodifiable_test: RuntimeError
+nan_infinity_test/01: RuntimeError
+queue_test: RuntimeError
+reg_exp_all_matches_test: RuntimeError
+reg_exp_start_end_test: RuntimeError
+regexp/capture_test: RuntimeError
+regexp/ecma-regex-examples_test: RuntimeError
+regexp/global_test: RuntimeError
+regexp/indexof_test: RuntimeError
+regexp/lastindex_test: RuntimeError
+regexp/non-capturing-groups_test: RuntimeError
+regexp/parentheses_test: RuntimeError
+regexp/pcre-test-4_test: RuntimeError
+regexp/regexp_kde_test: RuntimeError
+regexp/regexp_test: RuntimeError
+regexp/regress-regexp-codeflush_test: RuntimeError
+regexp/standalones_test: RuntimeError
+splay_tree_from_iterable_test: RuntimeError
+stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
+string_from_list_test: RuntimeError
+string_fromcharcodes_test: RuntimeError
+string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
+string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
+string_split_test/none: RuntimeError
+string_test: RuntimeError
+symbol_operator_test/03: RuntimeError
+symbol_operator_test/none: RuntimeError
+symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
+uri_base_test: RuntimeError
+uri_parameters_all_test: RuntimeError
+uri_test: RuntimeError
 
-# Dart2JS does not support strong mode without the new front end, though it
-# does support checked mode which is partly compatible.
-[ $compiler == dart2js && !$dart2js_with_kernel && $strong ]
+[ $compiler == dart2js && $fasta && $strong ]
+map_unmodifiable_cast_test: Crash
+null_nosuchmethod_test: RuntimeError # Fails if type checks are skipped.
+
+[ $compiler == dart2js && $fasta && !$strong ]
 *: SkipByDesign
 
-[ $compiler == dart2js && $fast_startup ]
-apply3_test: Fail # mirrors not supported
-dynamic_nosuchmethod_test: Fail # mirrors not supported
+[ $compiler == dart2js && !$fasta ]
+*: SkipByDesign
 
 [ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp ]
 iterable_element_at_test/static: MissingCompileTimeError
@@ -356,7 +365,6 @@
 # ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
 apply3_test: RuntimeError
-apply_test: RuntimeError, OK
 iterable_fold_test/02: RuntimeError
 iterable_reduce_test/01: CompileTimeError # Issue 31533
 iterable_reduce_test/none: RuntimeError
@@ -367,17 +375,7 @@
 symbol_test/none: RuntimeError # Issues 11669 and 31936 - throwing const constructors.
 unicode_test: RuntimeError # Issue 18061: German double S.
 
-# ===== dartkp + dart_precompiled + debug status lines =====
-[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
-null_nosuchmethod_test/01: Crash # dartbug.com/32377
-null_nosuchmethod_test/none: Crash # dartbug.com/32377
-
-# ===== dartkp + dart_precompiled status lines =====
-[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
-null_nosuchmethod_test: Crash
-
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
-apply_test: RuntimeError, OK
 iterable_fold_test/02: RuntimeError
 iterable_reduce_test/01: CompileTimeError # Issue 31533
 iterable_reduce_test/none: RuntimeError
@@ -403,6 +401,27 @@
 from_environment_const_type_undefined_test/16: MissingCompileTimeError
 string_base_vm_static_test: MissingCompileTimeError
 
+[ $compiler == none && $runtime == vm && !$checked && !$fasta ]
+from_environment_const_type_test/02: MissingCompileTimeError
+from_environment_const_type_test/03: MissingCompileTimeError
+from_environment_const_type_test/04: MissingCompileTimeError
+from_environment_const_type_test/06: MissingCompileTimeError
+from_environment_const_type_test/07: MissingCompileTimeError
+from_environment_const_type_test/08: MissingCompileTimeError
+from_environment_const_type_test/09: MissingCompileTimeError
+from_environment_const_type_test/11: MissingCompileTimeError
+from_environment_const_type_test/12: MissingCompileTimeError
+from_environment_const_type_test/13: MissingCompileTimeError
+from_environment_const_type_test/14: MissingCompileTimeError
+from_environment_const_type_test/16: MissingCompileTimeError
+from_environment_const_type_undefined_test/02: MissingCompileTimeError
+from_environment_const_type_undefined_test/03: MissingCompileTimeError
+from_environment_const_type_undefined_test/04: MissingCompileTimeError
+from_environment_const_type_undefined_test/06: MissingCompileTimeError
+from_environment_const_type_undefined_test/07: MissingCompileTimeError
+from_environment_const_type_undefined_test/08: MissingCompileTimeError
+iterable_generate_test/01: RuntimeError
+
 [ $compiler == none && ($runtime == flutter || $runtime == vm) ]
 iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
 
@@ -428,7 +447,7 @@
 double_floor_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
 double_round_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
 double_truncate_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-hash_set_test/01: RuntimeError # Issue 11551
+hash_set_test/01: RuntimeError # non JS number semantics - Issue 11551
 int_modulo_arith_test/modPow: RuntimeError # Issue 29921
 int_parse_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
 integer_arith_vm_test/modPow: RuntimeError # Issues 10245, 30170
@@ -439,6 +458,7 @@
 typed_data_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
 
 [ $runtime != none && ($compiler == dartdevc || $compiler == dartdevk) ]
+apply_test/01: RuntimeError # Issue 32157
 apply2_test: RuntimeError # Issue 29921
 apply3_test: RuntimeError # Issue 29921
 bigint_test: Pass, Slow
@@ -507,27 +527,6 @@
 symbol_test/none: RuntimeError # Issue 29921
 typed_data_with_limited_ints_test: Skip # dartdevc doesn't know about --limit-ints-to-64-bits
 
-[ !$checked && !$dart2js_with_kernel && ($compiler == dart2js || $compiler == none && $runtime == vm) ]
-from_environment_const_type_test/02: MissingCompileTimeError
-from_environment_const_type_test/03: MissingCompileTimeError
-from_environment_const_type_test/04: MissingCompileTimeError
-from_environment_const_type_test/06: MissingCompileTimeError
-from_environment_const_type_test/07: MissingCompileTimeError
-from_environment_const_type_test/08: MissingCompileTimeError
-from_environment_const_type_test/09: MissingCompileTimeError
-from_environment_const_type_test/11: MissingCompileTimeError
-from_environment_const_type_test/12: MissingCompileTimeError
-from_environment_const_type_test/13: MissingCompileTimeError
-from_environment_const_type_test/14: MissingCompileTimeError
-from_environment_const_type_test/16: MissingCompileTimeError
-from_environment_const_type_undefined_test/02: MissingCompileTimeError
-from_environment_const_type_undefined_test/03: MissingCompileTimeError
-from_environment_const_type_undefined_test/04: MissingCompileTimeError
-from_environment_const_type_undefined_test/06: MissingCompileTimeError
-from_environment_const_type_undefined_test/07: MissingCompileTimeError
-from_environment_const_type_undefined_test/08: MissingCompileTimeError
-iterable_generate_test/01: RuntimeError
-
 [ !$checked && !$strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
@@ -599,20 +598,17 @@
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
 int_parse_radix_bad_handler_test: MissingCompileTimeError
 symbol_operator_test/03: Fail # Issue 11669
+symbol_reserved_word_test/02: CompileTimeError # Issue 20191
+symbol_reserved_word_test/04: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
 symbol_reserved_word_test/06: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
+symbol_reserved_word_test/07: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
 symbol_reserved_word_test/09: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
+symbol_reserved_word_test/10: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
 symbol_reserved_word_test/12: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
 symbol_test/01: Fail, Pass # Issue 11669
 symbol_test/none: Fail # Issue 11669
 unicode_test: Fail # Issue 6706
 
-# void should be a valid symbol.
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler || $compiler == dart2js && !$dart2js_with_kernel ]
-symbol_reserved_word_test/02: CompileTimeError # Issue 20191
-symbol_reserved_word_test/04: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
-symbol_reserved_word_test/07: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
-symbol_reserved_word_test/10: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
-
 [ $compiler == app_jit || $compiler == precompiler ]
 from_environment_const_type_test/02: MissingCompileTimeError
 from_environment_const_type_test/03: MissingCompileTimeError
@@ -651,7 +647,7 @@
 apply3_test: SkipByDesign
 dynamic_nosuchmethod_test: SkipByDesign
 
-[ $compiler == precompiler || $compiler == dart2js && !$checked || $runtime == vm && !$checked && !$strong ]
+[ $compiler == precompiler || $runtime == vm && !$checked && !$strong ]
 int_parse_radix_test/badTypes: RuntimeError # wrong exception returned
 
 [ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
@@ -670,3 +666,6 @@
 bigint_test: Pass, Crash # Issue 31660
 integer_parsed_mul_div_vm_test: Pass, Slow # Slow
 
+[ $compiler != dartk && $runtime == vm && $checked ]
+apply_test/01: RuntimeError
+
diff --git a/tests/html/html.status b/tests/html/html.status
index cfa3a87..ccc75f4 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -233,7 +233,7 @@
 [ $compiler == dart2js && $checked ]
 js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && $fasta ]
 canvasrenderingcontext2d_test/drawImage_image_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Timeout
@@ -317,7 +317,14 @@
 mirrors_js_typed_interop_test: SkipByDesign
 postmessage_structured_test: SkipByDesign
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
+[ $compiler == dart2js && $fast_startup ]
+custom/constructor_calls_created_synchronously_test: Fail # mirrors not supported
+custom/js_custom_test: Fail # mirrors not supported
+custom/mirrors_2_test: Fail # mirrors not supported
+custom/mirrors_test: Fail # mirrors not supported
+mirrors_js_typed_interop_test: Fail # mirrors not supported
+
+[ $compiler == dart2js && $fast_startup && $fasta ]
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_default_arg_test/none: RuntimeError
 js_typed_interop_test/object literal: RuntimeError
@@ -325,27 +332,20 @@
 js_typed_interop_test/static_method_tearoff_1: RuntimeError
 js_util_test/hasProperty: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && $fasta && $host_checked ]
 custom/mirrors_2_test: RuntimeError
 custom/mirrors_test: RuntimeError
 fileapi_test/entry: RuntimeError
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_test/static_method_tearoff_1: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && $fasta && $minified ]
 custom/mirrors_2_test: RuntimeError
 custom/mirrors_test: RuntimeError
 fileapi_test/entry: RuntimeError
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_test/static_method_tearoff_1: RuntimeError
 
-[ $compiler == dart2js && $fast_startup ]
-custom/constructor_calls_created_synchronously_test: Fail # mirrors not supported
-custom/js_custom_test: Fail # mirrors not supported
-custom/mirrors_2_test: Fail # mirrors not supported
-custom/mirrors_test: Fail # mirrors not supported
-mirrors_js_typed_interop_test: Fail # mirrors not supported
-
 [ $compiler == dart2js && $minified ]
 canvas_pixel_array_type_alias_test/types2_runtimeTypeName: Fail, OK # Issue 12605
 
diff --git a/tests/language/deferred_optimized_test.dart b/tests/language/deferred_optimized_test.dart
index d39d84e..e2de2bf 100644
--- a/tests/language/deferred_optimized_test.dart
+++ b/tests/language/deferred_optimized_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--optimization-counter-threshold=10 --no-use-inlining --no-background-compilation
+// VMOptions=--optimization-counter-threshold=10 --compiler-passes=-Inlining --no-background-compilation
 
 // Declares foo that returns 42.
 import "deferred_constraints_lib2.dart" deferred as lib;
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 271a2ed..5e33574 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -7,6 +7,9 @@
 
 # VM specific tests that should not be run by dart2js.
 [ $compiler == dart2js ]
+full_stacktrace1_test: Pass, RuntimeError # Issue 12698
+full_stacktrace2_test: Pass, RuntimeError # Issue 12698
+full_stacktrace3_test: Pass, RuntimeError # Issue 12698
 local_function_test: RuntimeError # Issue 31879
 vm/*: Skip # Issue 12699
 
@@ -25,7 +28,7 @@
 [ $compiler == dart2js && $runtime == ff ]
 round_test: Pass, Fail, OK # Fixed in ff 35. Common JavaScript engine Math.round bug.
 
-[ $compiler == dart2js && $runtime == jsshell && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == jsshell && !$fasta ]
 async_star_no_cancel2_test: RuntimeError # Need triage
 async_star_no_cancel_test: RuntimeError # Need triage
 async_star_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
@@ -35,7 +38,7 @@
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
-[ $compiler == dart2js && $runtime == none && $dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == none && $fasta ]
 *: Fail, Pass, Crash # TODO(sigmund): we should have no crashes when migration completes
 
 [ $compiler == dart2js && $runtime == safari ]
@@ -48,37 +51,25 @@
 conditional_import_string_test: Fail # Issue 30615
 conditional_import_test: Fail # Issue 30615
 
-[ $compiler == dart2js && $browser && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $browser && !$fasta ]
 config_import_test: Fail # Test flag is not passed to the compiler.
 library_env_test/has_io_support: RuntimeError # Issue 27398
 library_env_test/has_no_io_support: Pass # Issue 27398
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && $fasta ]
 assertion_initializer_const_function_test/01: RuntimeError
-assertion_initializer_test: CompileTimeError
+assertion_initializer_test: RuntimeError
 assign_static_type_test/01: Fail
 assign_static_type_test/02: MissingCompileTimeError
+async_await_test: Crash # NoSuchMethodError: The getter 'parent' 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
-bad_override_test/03: MissingCompileTimeError
-bad_override_test/04: MissingCompileTimeError
-bad_override_test/05: MissingCompileTimeError
-bit_operations_test/01: RuntimeError
-bit_operations_test/02: RuntimeError
-bit_operations_test/03: RuntimeError
-bit_operations_test/04: RuntimeError
-bit_operations_test/none: RuntimeError
-branch_canonicalization_test: RuntimeError
-call_function_apply_test: RuntimeError
-call_nonexistent_constructor_test/01: RuntimeError
-canonical_const2_test: RuntimeError
-canonical_const3_test: CompileTimeError
-check_member_static_test/02: MissingCompileTimeError
-class_cycle_test/02: MissingCompileTimeError
-class_cycle_test/03: MissingCompileTimeError
-closure_in_field_test/01: RuntimeError
-closure_in_field_test/02: RuntimeError
+async_star_pause_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+async_star_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+await_for_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: RuntimeError
 closure_type_test/01: RuntimeError # Issue 12745
 closure_type_test/none: RuntimeError # Issue 12745
 compile_time_constant_checked2_test/01: MissingCompileTimeError
@@ -107,7 +98,6 @@
 compile_time_constant_checked_test/01: Fail
 compile_time_constant_checked_test/02: MissingCompileTimeError
 compile_time_constant_checked_test/03: Fail
-config_import_test: RuntimeError
 const_constructor2_test/13: MissingCompileTimeError
 const_constructor2_test/14: MissingCompileTimeError
 const_constructor2_test/15: MissingCompileTimeError
@@ -118,103 +108,163 @@
 const_constructor2_test/24: MissingCompileTimeError
 const_constructor3_test/02: MissingCompileTimeError
 const_constructor3_test/04: MissingCompileTimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
 const_init2_test/02: MissingCompileTimeError
-const_instance_field_test/01: MissingCompileTimeError
-const_map2_test/00: MissingCompileTimeError
-const_map3_test/00: MissingCompileTimeError
-const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
-constants_test/05: MissingCompileTimeError
-constructor2_test: RuntimeError
-constructor3_test: RuntimeError
-constructor5_test: RuntimeError
-constructor6_test: RuntimeError
-constructor_named_arguments_test/none: RuntimeError
-constructor_redirect1_negative_test: Crash # Issue 30856
-constructor_redirect2_negative_test: Crash # Issue 30856
-constructor_redirect2_test/01: MissingCompileTimeError
-constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
-cyclic_constructor_test/01: Crash # Issue 30856
-deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred_closurize_load_library_test: RuntimeError
+deferred_constant_list_test: RuntimeError
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_type_annotation_test/as_operation: RuntimeError
 deferred_constraints_type_annotation_test/catch_check: RuntimeError
 deferred_constraints_type_annotation_test/is_check: RuntimeError
-deferred_constraints_type_annotation_test/type_annotation1: Fail
-deferred_constraints_type_annotation_test/type_annotation_generic1: Fail
-deferred_constraints_type_annotation_test/type_annotation_generic4: Fail
-deferred_inheritance_constraints_test/extends: MissingCompileTimeError
-deferred_inheritance_constraints_test/implements: MissingCompileTimeError
-deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
+deferred_constraints_type_annotation_test/new: RuntimeError
+deferred_constraints_type_annotation_test/new_before_load: RuntimeError
+deferred_constraints_type_annotation_test/new_generic1: RuntimeError
+deferred_constraints_type_annotation_test/new_generic2: RuntimeError
+deferred_constraints_type_annotation_test/new_generic3: RuntimeError
+deferred_constraints_type_annotation_test/none: RuntimeError
+deferred_constraints_type_annotation_test/static_method: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic2: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic3: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_null: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_top_level: RuntimeError
+deferred_function_type_test: RuntimeError
+deferred_global_test: RuntimeError
+deferred_inlined_test: RuntimeError
 deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/01: MissingRuntimeError
-deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
-double_int_to_string_test: RuntimeError
-duplicate_export_negative_test: Fail
-duplicate_implements_test/01: MissingCompileTimeError
-duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/01: RuntimeError
-dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
-example_constructor_test: RuntimeError
-expect_test: RuntimeError
-external_test/10: MissingRuntimeError
-external_test/13: MissingRuntimeError
-external_test/20: MissingRuntimeError
-factory_redirection_test/07: MissingCompileTimeError
+deferred_load_inval_code_test: RuntimeError
+deferred_mixin_test: RuntimeError
+deferred_no_such_method_test: RuntimeError
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: RuntimeError
+deferred_regression_22995_test: RuntimeError
+deferred_regression_28678_test: RuntimeError
+deferred_shadow_load_library_test: RuntimeError
+deferred_shared_and_unshared_classes_test: RuntimeError
+deferred_static_seperate_test: RuntimeError
+deferred_type_dependency_test/as: RuntimeError
+deferred_type_dependency_test/is: RuntimeError
+deferred_type_dependency_test/none: RuntimeError
+deferred_type_dependency_test/type_annotation: RuntimeError
 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
-fauxverride_test/03: MissingCompileTimeError
-fauxverride_test/05: MissingCompileTimeError
-field_initialization_order_test: RuntimeError
-field_override3_test/00: MissingCompileTimeError
-field_override3_test/01: MissingCompileTimeError
-field_override3_test/02: MissingCompileTimeError
-field_override3_test/03: MissingCompileTimeError
-field_override4_test/02: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/02: MissingCompileTimeError
-final_field_initialization_order_test: RuntimeError
-full_stacktrace1_test: RuntimeError # Issue 12698
-full_stacktrace2_test: RuntimeError # Issue 12698
-full_stacktrace3_test: RuntimeError # Issue 12698
-generic_methods_type_expression_test/01: RuntimeError
-generic_methods_type_expression_test/03: RuntimeError
-generic_methods_type_expression_test/none: 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
-if_null_assignment_behavior_test/14: RuntimeError
-infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: RuntimeError
-integer_division_by_zero_test: RuntimeError
+function_type/function_type0_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type10_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type11_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type12_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type13_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type14_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type15_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type16_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type17_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type18_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type19_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type1_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type20_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type21_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type22_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type23_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type24_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type25_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type26_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type27_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type28_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type29_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type2_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type30_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type31_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type32_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type33_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type34_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type35_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type36_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type37_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type38_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type39_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type3_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type40_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type41_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type42_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type43_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type44_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type45_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type46_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type47_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type48_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type49_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type4_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type50_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type51_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type52_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type53_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type54_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type55_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type56_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type57_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type58_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type59_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type5_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type60_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type61_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type62_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type63_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type64_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type65_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type66_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type67_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type68_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type69_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type6_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type70_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type71_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type72_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type73_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type74_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type75_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type76_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type77_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type78_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type79_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type7_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type80_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type81_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type82_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type83_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type84_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type85_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type86_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type87_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type88_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type89_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type8_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type90_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type91_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type92_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type93_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type94_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type95_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type96_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type97_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type98_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type99_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+function_type/function_type9_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+generalized_void_syntax_test: RuntimeError
+generic_function_typedef2_test/04: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+generic_function_typedef_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+generic_functions_test: RuntimeError
+generic_local_functions_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+generic_methods_generic_function_parameter_test: Crash # NoSuchMethodError: The getter 'parent' was called on null.
+generic_methods_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
-invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_test: RuntimeError
-issue21079_test: RuntimeError
-left_shift_test: RuntimeError
-library_env_test/has_mirror_support: RuntimeError
-library_env_test/has_no_html_support: RuntimeError
-library_env_test/has_no_io_support: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
-list_literal4_test: RuntimeError
-main_not_a_function_test/01: CompileTimeError
 malbounded_instantiation_test/01: RuntimeError # Issue 12702
+malbounded_redirecting_factory2_test/02: Fail
+malbounded_redirecting_factory2_test/03: Fail
+malbounded_redirecting_factory2_test/04: Fail
 malbounded_type_cast2_test: RuntimeError # Issue 14121
 malbounded_type_cast_test: RuntimeError # Issue 14121
 malbounded_type_test2_test: RuntimeError # Issue 14121
@@ -223,187 +273,15 @@
 malformed2_test/00: RuntimeError
 malformed2_test/01: MissingCompileTimeError
 map_literal1_test/01: MissingCompileTimeError
-method_override5_test: RuntimeError
-method_override7_test/00: MissingCompileTimeError
-method_override7_test/01: MissingCompileTimeError
-method_override7_test/02: MissingCompileTimeError
-method_override8_test/00: MissingCompileTimeError
-method_override8_test/01: MissingCompileTimeError
-mint_arithmetic_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/01: MissingCompileTimeError
-mixin_illegal_superclass_test/02: MissingCompileTimeError
-mixin_illegal_superclass_test/03: MissingCompileTimeError
-mixin_illegal_superclass_test/04: MissingCompileTimeError
-mixin_illegal_superclass_test/05: MissingCompileTimeError
-mixin_illegal_superclass_test/06: MissingCompileTimeError
-mixin_illegal_superclass_test/07: MissingCompileTimeError
-mixin_illegal_superclass_test/08: MissingCompileTimeError
-mixin_illegal_superclass_test/09: MissingCompileTimeError
-mixin_illegal_superclass_test/10: MissingCompileTimeError
-mixin_illegal_superclass_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/12: MissingCompileTimeError
-mixin_illegal_superclass_test/13: MissingCompileTimeError
-mixin_illegal_superclass_test/14: MissingCompileTimeError
-mixin_illegal_superclass_test/15: MissingCompileTimeError
-mixin_illegal_superclass_test/16: MissingCompileTimeError
-mixin_illegal_superclass_test/17: MissingCompileTimeError
-mixin_illegal_superclass_test/18: MissingCompileTimeError
-mixin_illegal_superclass_test/19: MissingCompileTimeError
-mixin_illegal_superclass_test/20: MissingCompileTimeError
-mixin_illegal_superclass_test/21: MissingCompileTimeError
-mixin_illegal_superclass_test/22: MissingCompileTimeError
-mixin_illegal_superclass_test/23: MissingCompileTimeError
-mixin_illegal_superclass_test/24: MissingCompileTimeError
-mixin_illegal_superclass_test/25: MissingCompileTimeError
-mixin_illegal_superclass_test/26: MissingCompileTimeError
-mixin_illegal_superclass_test/27: MissingCompileTimeError
-mixin_illegal_superclass_test/28: MissingCompileTimeError
-mixin_illegal_superclass_test/29: MissingCompileTimeError
-mixin_illegal_superclass_test/30: MissingCompileTimeError
-mixin_issue10216_2_test: RuntimeError
-mixin_mixin4_test: RuntimeError
-mixin_mixin5_test: RuntimeError
-mixin_mixin6_test: RuntimeError
-mixin_mixin7_test: RuntimeError
-mixin_mixin_bound2_test: RuntimeError
-mixin_mixin_bound_test: RuntimeError
-mixin_mixin_test: RuntimeError
-mixin_of_mixin_test/01: CompileTimeError
-mixin_of_mixin_test/02: CompileTimeError
-mixin_of_mixin_test/03: CompileTimeError
-mixin_of_mixin_test/04: CompileTimeError
-mixin_of_mixin_test/05: CompileTimeError
-mixin_of_mixin_test/06: CompileTimeError
-mixin_of_mixin_test/07: CompileTimeError
-mixin_of_mixin_test/08: CompileTimeError
-mixin_of_mixin_test/09: CompileTimeError
-mixin_of_mixin_test/10: CompileTimeError
-mixin_of_mixin_test/11: CompileTimeError
-mixin_of_mixin_test/12: CompileTimeError
-mixin_of_mixin_test/13: CompileTimeError
-mixin_of_mixin_test/14: CompileTimeError
-mixin_of_mixin_test/15: CompileTimeError
-mixin_of_mixin_test/16: CompileTimeError
-mixin_of_mixin_test/17: CompileTimeError
-mixin_of_mixin_test/18: CompileTimeError
-mixin_of_mixin_test/19: CompileTimeError
-mixin_of_mixin_test/20: CompileTimeError
-mixin_of_mixin_test/21: CompileTimeError
-mixin_of_mixin_test/22: CompileTimeError
-mixin_of_mixin_test/none: CompileTimeError
-mixin_super_2_test: CompileTimeError
-mixin_super_bound2_test/01: CompileTimeError
-mixin_super_bound2_test/none: CompileTimeError
-mixin_super_constructor_named_test/01: MissingCompileTimeError
-mixin_super_constructor_positionals_test/01: MissingCompileTimeError
-mixin_super_test: CompileTimeError
-mixin_super_use_test: CompileTimeError
-mixin_superclass_test: CompileTimeError
-mixin_supertype_subclass2_test/01: CompileTimeError
-mixin_supertype_subclass2_test/02: CompileTimeError
-mixin_supertype_subclass2_test/03: CompileTimeError
-mixin_supertype_subclass2_test/04: CompileTimeError
-mixin_supertype_subclass2_test/05: CompileTimeError
-mixin_supertype_subclass2_test/none: CompileTimeError
-mixin_supertype_subclass3_test/01: CompileTimeError
-mixin_supertype_subclass3_test/02: CompileTimeError
-mixin_supertype_subclass3_test/03: CompileTimeError
-mixin_supertype_subclass3_test/04: CompileTimeError
-mixin_supertype_subclass3_test/05: CompileTimeError
-mixin_supertype_subclass3_test/none: CompileTimeError
-mixin_supertype_subclass4_test/01: CompileTimeError
-mixin_supertype_subclass4_test/02: CompileTimeError
-mixin_supertype_subclass4_test/03: CompileTimeError
-mixin_supertype_subclass4_test/04: CompileTimeError
-mixin_supertype_subclass4_test/05: CompileTimeError
-mixin_supertype_subclass4_test/none: CompileTimeError
-mixin_supertype_subclass_test/01: CompileTimeError
-mixin_supertype_subclass_test/02: CompileTimeError
-mixin_supertype_subclass_test/03: CompileTimeError
-mixin_supertype_subclass_test/04: CompileTimeError
-mixin_supertype_subclass_test/05: CompileTimeError
-mixin_supertype_subclass_test/none: CompileTimeError
-modulo_test: RuntimeError
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
-multiline_newline_test/06: MissingCompileTimeError
-multiline_newline_test/06r: MissingCompileTimeError
-named_constructor_test/01: MissingRuntimeError
-named_parameters_default_eq_test/02: MissingCompileTimeError
-nan_identical_test: RuntimeError
-no_main_test/01: CompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
-null_test/none: RuntimeError
-number_identity2_test: RuntimeError
-numbers_test: RuntimeError
-override_field_method1_negative_test: Fail
-override_field_method2_negative_test: Fail
-override_field_method4_negative_test: Fail
-override_field_method5_negative_test: Fail
-override_field_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/02: MissingCompileTimeError
-override_inheritance_mixed_test/03: MissingCompileTimeError
-override_inheritance_mixed_test/04: MissingCompileTimeError
-override_method_with_field_test/01: MissingCompileTimeError
-private_super_constructor_test/01: MissingCompileTimeError
-redirecting_constructor_initializer_test: RuntimeError
-redirecting_factory_default_values_test/01: MissingCompileTimeError
-redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: Fail
-redirecting_factory_long_test: RuntimeError
-redirecting_factory_reflection_test: RuntimeError
-regress_13494_test: RuntimeError
-regress_17382_test: RuntimeError
-regress_20394_test/01: MissingCompileTimeError
-regress_22936_test/01: RuntimeError
-regress_24283_test: RuntimeError
+redirecting_factory_malbounded_test/01: Fail
+regress_22443_test: RuntimeError
 regress_26133_test: RuntimeError # Issue 26429
-regress_27572_test: RuntimeError
-regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28217_test/01: MissingCompileTimeError
-regress_28217_test/none: MissingCompileTimeError
-regress_28255_test: RuntimeError
+regress_28278_test: RuntimeError
 regress_29405_test: RuntimeError # Issue 29422
-setter_override_test/00: MissingCompileTimeError
-setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError
-stacktrace_rethrow_error_test/none: RuntimeError
-stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
-stacktrace_rethrow_nonerror_test: RuntimeError
 stacktrace_test: RuntimeError
-static_getter_no_setter1_test/01: RuntimeError
-static_getter_no_setter2_test/01: RuntimeError
-static_getter_no_setter3_test/01: RuntimeError
 super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
-super_test: RuntimeError
-switch_bad_case_test/01: MissingCompileTimeError
-switch_bad_case_test/02: MissingCompileTimeError
-switch_case_test/00: MissingCompileTimeError
-switch_case_test/01: MissingCompileTimeError
-switch_case_test/02: MissingCompileTimeError
-syntax_test/none: CompileTimeError
-top_level_getter_no_setter1_test/01: RuntimeError
-top_level_getter_no_setter2_test/01: RuntimeError
-truncdiv_test: RuntimeError
-try_catch_test/01: MissingCompileTimeError
 type_check_const_function_typedef2_test/00: MissingCompileTimeError
 type_parameter_test/01: Crash # Internal Error: Unexpected type variable in static context.
 type_parameter_test/02: Crash # Internal Error: Unexpected type variable in static context.
@@ -418,7 +296,7 @@
 type_variable_bounds_test/02: Fail # Issue 12702
 type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
 
-[ $compiler == dart2js && $checked && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $checked && !$fasta ]
 async_return_types_test/nestedFuture: Fail # Issue 26429
 async_return_types_test/wrongTypeParameter: Fail # Issue 26429
 closure_type_test: Fail # Issue 12745
@@ -441,7 +319,7 @@
 type_variable_bounds3_test/00: Fail # Issue 12702
 type_variable_bounds_test/02: Fail # Issue 12702
 
-[ $compiler == dart2js && !$checked && !$dart2js_with_kernel ]
+[ $compiler == dart2js && !$checked ]
 assertion_test: RuntimeError
 generic_test: RuntimeError, OK
 issue13474_test: RuntimeError, OK
@@ -453,58 +331,25 @@
 positional_parameters_type_test/02: MissingRuntimeError, OK
 type_checks_in_factory_method_test: RuntimeError # Issue 12746
 
-[ $compiler == dart2js && !$checked && !$dart2js_with_kernel && $enable_asserts ]
-assertion_test: RuntimeError # Issue 12748
-
-[ $compiler == dart2js && !$checked && !$dart2js_with_kernel && $minified ]
-f_bounded_quantification5_test: Fail, OK # Issue 12605
-
 [ $compiler == dart2js && !$checked && $enable_asserts ]
 bool_check_test: RuntimeError # Issue 29647
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
+[ $compiler == dart2js && !$checked && $enable_asserts && !$fasta ]
+assertion_test: RuntimeError # Issue 12748
+
+[ $compiler == dart2js && !$checked && $fasta ]
+assertion_initializer_const_function_error_test/01: MissingCompileTimeError
+
+[ $compiler == dart2js && !$checked && !$fasta && $minified ]
+f_bounded_quantification5_test: Fail, OK # Issue 12605
+
+[ $compiler == dart2js && $fast_startup && $fasta ]
 arithmetic_canonicalization_test: RuntimeError
 assertion_initializer_const_error2_test/none: CompileTimeError
-assertion_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-bad_override_test/03: MissingCompileTimeError
-bad_override_test/04: MissingCompileTimeError
-bad_override_test/05: MissingCompileTimeError
-bit_operations_test/01: RuntimeError
-bit_operations_test/02: RuntimeError
-bit_operations_test/03: RuntimeError
-bit_operations_test/04: RuntimeError
-bit_operations_test/none: RuntimeError
-branch_canonicalization_test: RuntimeError
-call_function_apply_test: RuntimeError
-call_nonexistent_constructor_test/01: RuntimeError
-canonical_const2_test: RuntimeError
 canonical_const3_test: CompileTimeError
-check_member_static_test/02: MissingCompileTimeError
-class_cycle_test/02: MissingCompileTimeError
-class_cycle_test/03: MissingCompileTimeError
-closure_in_field_test/01: RuntimeError
-closure_in_field_test/02: RuntimeError
-config_import_test: RuntimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
-const_instance_field_test/01: MissingCompileTimeError
-const_map2_test/00: MissingCompileTimeError
-const_map3_test/00: MissingCompileTimeError
-const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
-constants_test/05: MissingCompileTimeError
-constructor2_test: RuntimeError
-constructor3_test: RuntimeError
-constructor5_test: RuntimeError
-constructor6_test: RuntimeError
-constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test: Crash # Stack Overflow
 constructor_redirect2_negative_test: Crash # Stack Overflow
 constructor_redirect2_test/01: MissingCompileTimeError
-constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 cyclic_constructor_test/01: Crash # Stack Overflow
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -512,124 +357,12 @@
 deferred_constraints_type_annotation_test/as_operation: RuntimeError
 deferred_constraints_type_annotation_test/catch_check: RuntimeError
 deferred_constraints_type_annotation_test/is_check: RuntimeError
-deferred_inheritance_constraints_test/extends: MissingCompileTimeError
-deferred_inheritance_constraints_test/implements: MissingCompileTimeError
-deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/01: MissingRuntimeError
-deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
-double_int_to_string_test: RuntimeError
-duplicate_export_negative_test: Fail
-duplicate_implements_test/01: MissingCompileTimeError
-duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/01: RuntimeError
-dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
-example_constructor_test: RuntimeError
-expect_test: RuntimeError
-external_test/10: MissingRuntimeError
-external_test/13: MissingRuntimeError
-external_test/20: MissingRuntimeError
-factory_redirection_test/07: MissingCompileTimeError
-fauxverride_test/03: MissingCompileTimeError
-fauxverride_test/05: MissingCompileTimeError
-field_increment_bailout_test: RuntimeError
-field_initialization_order_test: RuntimeError
-field_override3_test/00: MissingCompileTimeError
-field_override3_test/01: MissingCompileTimeError
-field_override3_test/02: MissingCompileTimeError
-field_override3_test/03: MissingCompileTimeError
-field_override4_test/02: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/02: MissingCompileTimeError
-final_field_initialization_order_test: RuntimeError
 generic_field_mixin4_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(M.T) in () for j:constructor(C3.).
 generic_field_mixin5_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(M.T) in () for j:constructor(C3.).
 generic_field_mixin_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(M.T) in () for j:constructor(C3.).
 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
-generic_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
-if_null_assignment_behavior_test/14: RuntimeError
-infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: RuntimeError
-integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
-invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_invoke_on2_test: RuntimeError
-invocation_mirror_invoke_on_test: RuntimeError
-invocation_mirror_test: RuntimeError
-issue13474_test: RuntimeError
-issue21079_test: RuntimeError
-left_shift_test: RuntimeError
-library_env_test/has_mirror_support: RuntimeError
-library_env_test/has_no_html_support: RuntimeError
-library_env_test/has_no_io_support: RuntimeError
-list_literal4_test: RuntimeError
-main_not_a_function_test/01: CompileTimeError
-many_overridden_no_such_method_test: RuntimeError
-map_literal4_test: RuntimeError
-method_override5_test: RuntimeError
-method_override7_test/00: MissingCompileTimeError
-method_override7_test/01: MissingCompileTimeError
-method_override7_test/02: MissingCompileTimeError
-method_override8_test/00: MissingCompileTimeError
-method_override8_test/01: MissingCompileTimeError
-mint_arithmetic_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/01: MissingCompileTimeError
-mixin_illegal_superclass_test/02: MissingCompileTimeError
-mixin_illegal_superclass_test/03: MissingCompileTimeError
-mixin_illegal_superclass_test/04: MissingCompileTimeError
-mixin_illegal_superclass_test/05: MissingCompileTimeError
-mixin_illegal_superclass_test/06: MissingCompileTimeError
-mixin_illegal_superclass_test/07: MissingCompileTimeError
-mixin_illegal_superclass_test/08: MissingCompileTimeError
-mixin_illegal_superclass_test/09: MissingCompileTimeError
-mixin_illegal_superclass_test/10: MissingCompileTimeError
-mixin_illegal_superclass_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/12: MissingCompileTimeError
-mixin_illegal_superclass_test/13: MissingCompileTimeError
-mixin_illegal_superclass_test/14: MissingCompileTimeError
-mixin_illegal_superclass_test/15: MissingCompileTimeError
-mixin_illegal_superclass_test/16: MissingCompileTimeError
-mixin_illegal_superclass_test/17: MissingCompileTimeError
-mixin_illegal_superclass_test/18: MissingCompileTimeError
-mixin_illegal_superclass_test/19: MissingCompileTimeError
-mixin_illegal_superclass_test/20: MissingCompileTimeError
-mixin_illegal_superclass_test/21: MissingCompileTimeError
-mixin_illegal_superclass_test/22: MissingCompileTimeError
-mixin_illegal_superclass_test/23: MissingCompileTimeError
-mixin_illegal_superclass_test/24: MissingCompileTimeError
-mixin_illegal_superclass_test/25: MissingCompileTimeError
-mixin_illegal_superclass_test/26: MissingCompileTimeError
-mixin_illegal_superclass_test/27: MissingCompileTimeError
-mixin_illegal_superclass_test/28: MissingCompileTimeError
-mixin_illegal_superclass_test/29: MissingCompileTimeError
-mixin_illegal_superclass_test/30: MissingCompileTimeError
 mixin_issue10216_2_test: RuntimeError
 mixin_mixin4_test: RuntimeError
 mixin_mixin5_test: RuntimeError
@@ -638,136 +371,49 @@
 mixin_mixin_bound2_test: RuntimeError
 mixin_mixin_bound_test: RuntimeError
 mixin_mixin_test: RuntimeError
-mixin_of_mixin_test/01: CompileTimeError
-mixin_of_mixin_test/02: CompileTimeError
-mixin_of_mixin_test/03: CompileTimeError
-mixin_of_mixin_test/04: CompileTimeError
-mixin_of_mixin_test/05: CompileTimeError
-mixin_of_mixin_test/06: CompileTimeError
-mixin_of_mixin_test/07: CompileTimeError
-mixin_of_mixin_test/08: CompileTimeError
-mixin_of_mixin_test/09: CompileTimeError
-mixin_of_mixin_test/10: CompileTimeError
-mixin_of_mixin_test/11: CompileTimeError
-mixin_of_mixin_test/12: CompileTimeError
-mixin_of_mixin_test/13: CompileTimeError
-mixin_of_mixin_test/14: CompileTimeError
-mixin_of_mixin_test/15: CompileTimeError
-mixin_of_mixin_test/16: CompileTimeError
-mixin_of_mixin_test/17: CompileTimeError
-mixin_of_mixin_test/18: CompileTimeError
-mixin_of_mixin_test/19: CompileTimeError
-mixin_of_mixin_test/20: CompileTimeError
-mixin_of_mixin_test/21: CompileTimeError
-mixin_of_mixin_test/22: CompileTimeError
-mixin_of_mixin_test/none: CompileTimeError
-mixin_super_2_test: CompileTimeError
-mixin_super_bound2_test/01: CompileTimeError
-mixin_super_bound2_test/none: CompileTimeError
-mixin_super_constructor_named_test/01: MissingCompileTimeError
-mixin_super_constructor_positionals_test/01: MissingCompileTimeError
-mixin_super_test: CompileTimeError
-mixin_super_use_test: CompileTimeError
-mixin_superclass_test: CompileTimeError
-mixin_supertype_subclass2_test/01: CompileTimeError
-mixin_supertype_subclass2_test/02: CompileTimeError
-mixin_supertype_subclass2_test/03: CompileTimeError
-mixin_supertype_subclass2_test/04: CompileTimeError
-mixin_supertype_subclass2_test/05: CompileTimeError
-mixin_supertype_subclass2_test/none: CompileTimeError
-mixin_supertype_subclass3_test/01: CompileTimeError
-mixin_supertype_subclass3_test/02: CompileTimeError
-mixin_supertype_subclass3_test/03: CompileTimeError
-mixin_supertype_subclass3_test/04: CompileTimeError
-mixin_supertype_subclass3_test/05: CompileTimeError
-mixin_supertype_subclass3_test/none: CompileTimeError
-mixin_supertype_subclass4_test/01: CompileTimeError
-mixin_supertype_subclass4_test/02: CompileTimeError
-mixin_supertype_subclass4_test/03: CompileTimeError
-mixin_supertype_subclass4_test/04: CompileTimeError
-mixin_supertype_subclass4_test/05: CompileTimeError
-mixin_supertype_subclass4_test/none: CompileTimeError
-mixin_supertype_subclass_test/01: CompileTimeError
-mixin_supertype_subclass_test/02: CompileTimeError
-mixin_supertype_subclass_test/03: CompileTimeError
-mixin_supertype_subclass_test/04: CompileTimeError
-mixin_supertype_subclass_test/05: CompileTimeError
-mixin_supertype_subclass_test/none: CompileTimeError
-modulo_test: RuntimeError
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
-multiline_newline_test/06: MissingCompileTimeError
-multiline_newline_test/06r: MissingCompileTimeError
-named_constructor_test/01: MissingRuntimeError
-named_parameters_default_eq_test/02: MissingCompileTimeError
-named_parameters_type_test/01: MissingRuntimeError
-named_parameters_type_test/02: MissingRuntimeError
-named_parameters_type_test/03: MissingRuntimeError
-nan_identical_test: RuntimeError
-no_main_test/01: CompileTimeError
-no_such_method_test: RuntimeError
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
-null_test/none: RuntimeError
-number_identity2_test: RuntimeError
-numbers_test: RuntimeError
-overridden_no_such_method_test: RuntimeError
-override_field_method1_negative_test: Fail
-override_field_method2_negative_test: Fail
-override_field_method4_negative_test: Fail
-override_field_method5_negative_test: Fail
-override_field_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/02: MissingCompileTimeError
-override_inheritance_mixed_test/03: MissingCompileTimeError
-override_inheritance_mixed_test/04: MissingCompileTimeError
-override_method_with_field_test/01: MissingCompileTimeError
-positional_parameters_type_test/01: MissingRuntimeError
-positional_parameters_type_test/02: MissingRuntimeError
-private_super_constructor_test/01: MissingCompileTimeError
-redirecting_constructor_initializer_test: RuntimeError
-redirecting_factory_default_values_test/01: MissingCompileTimeError
-redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
-redirecting_factory_reflection_test: RuntimeError
-regress_13494_test: RuntimeError
-regress_17382_test: RuntimeError
-regress_20394_test/01: MissingCompileTimeError
-regress_22936_test/01: RuntimeError
-regress_24283_test: RuntimeError
-regress_27572_test: RuntimeError
-regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28217_test/01: MissingCompileTimeError
-regress_28217_test/none: MissingCompileTimeError
-regress_28255_test: RuntimeError
-setter_override_test/00: MissingCompileTimeError
-setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError
 stacktrace_test: RuntimeError
-static_getter_no_setter1_test/01: RuntimeError
-static_getter_no_setter2_test/01: RuntimeError
-static_getter_no_setter3_test/01: RuntimeError
 super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
-super_test: RuntimeError
-switch_bad_case_test/01: MissingCompileTimeError
-switch_bad_case_test/02: MissingCompileTimeError
-switch_case_test/00: MissingCompileTimeError
-switch_case_test/01: MissingCompileTimeError
-switch_case_test/02: MissingCompileTimeError
-syntax_test/none: CompileTimeError
-top_level_getter_no_setter1_test/01: RuntimeError
-top_level_getter_no_setter2_test/01: RuntimeError
-truncdiv_test: RuntimeError
-try_catch_test/01: MissingCompileTimeError
-type_checks_in_factory_method_test: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-assertion_test: RuntimeError
+[ $compiler == dart2js && $fast_startup && !$fasta ]
+assertion_initializer_const_error2_test/*: Crash
+assertion_initializer_const_error2_test/cc10: CompileTimeError # Issue #31321
+assertion_initializer_const_error2_test/cc11: CompileTimeError # Issue #31321
+assertion_initializer_const_error2_test/none: Pass
+assertion_initializer_const_function_error_test/01: Crash
+assertion_initializer_const_function_test/01: CompileTimeError
+const_evaluation_test/*: Fail # mirrors not supported
+deferred_constraints_constants_test: Pass # mirrors not supported, passes for the wrong reason
+deferred_constraints_constants_test/none: Fail # mirrors not supported
+deferred_constraints_constants_test/reference_after_load: Fail # mirrors not supported
+enum_mirror_test: Fail # mirrors not supported
+field_increment_bailout_test: Fail # mirrors not supported
+instance_creation_in_function_annotation_test: Fail # mirrors not supported
+invocation_mirror2_test: Fail # mirrors not supported
+invocation_mirror_invoke_on2_test: Fail # mirrors not supported
+invocation_mirror_invoke_on_test: Fail # mirrors not supported
+issue21079_test: Fail # mirrors not supported
+library_env_test/has_mirror_support: Fail # mirrors not supported
+library_env_test/has_no_mirror_support: Pass # fails for the wrong reason.
+many_overridden_no_such_method_test: Fail # mirrors not supported
+no_such_method_test: Fail # mirrors not supported
+null_test/0*: Pass # mirrors not supported, fails for the wrong reason
+null_test/none: Fail # mirrors not supported
+overridden_no_such_method_test: Fail # mirrors not supported
+redirecting_factory_reflection_test: Fail # mirrors not supported
+regress_13462_0_test: Fail # mirrors not supported
+regress_13462_1_test: Fail # mirrors not supported
+regress_18535_test: Fail # mirrors not supported
+regress_28255_test: Fail # mirrors not supported
+super_call4_test: Fail # mirrors not supported
+super_getter_setter_test: Fail # mirrors not supported
+vm/reflect_core_vm_test: Fail # mirrors not supported
+
+[ $compiler == dart2js && $fasta ]
 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_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
@@ -777,7 +423,6 @@
 bit_operations_test/04: RuntimeError
 bit_operations_test/none: RuntimeError
 branch_canonicalization_test: RuntimeError
-branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 call_function_apply_test: RuntimeError
 call_nonexistent_constructor_test/01: RuntimeError
 call_type_literal_test/01: RuntimeError
@@ -790,7 +435,6 @@
 class_literal_test/07: RuntimeError
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
-closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
@@ -847,14 +491,9 @@
 final_attempt_reinitialization_test/01: MissingCompileTimeError
 final_attempt_reinitialization_test/02: MissingCompileTimeError
 final_field_initialization_order_test: RuntimeError
-full_stacktrace1_test: RuntimeError
-full_stacktrace2_test: RuntimeError
-full_stacktrace3_test: RuntimeError
-generic_methods_generic_function_parameter_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_methods_type_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_type_expression_test/03: 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/none: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_test: RuntimeError
+generic_methods_type_expression_test/01: RuntimeError
+generic_methods_type_expression_test/03: RuntimeError
+generic_methods_type_expression_test/none: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
@@ -865,12 +504,11 @@
 instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
-invocation_mirror2_test: RuntimeError
-invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_invoke_on2_test: RuntimeError
-invocation_mirror_invoke_on_test: RuntimeError
-invocation_mirror_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 2521 pos 14: 'arguments.named.isEmpty': is not true.
-issue13474_test: RuntimeError
+invocation_mirror2_test: RuntimeError # mirrors not supported
+invocation_mirror_empty_arguments_test: RuntimeError # mirrors not supported
+invocation_mirror_invoke_on2_test: RuntimeError # mirrors not supported
+invocation_mirror_invoke_on_test: RuntimeError # mirrors not supported
+invocation_mirror_test: RuntimeError # mirrors not supported
 issue21079_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
@@ -879,7 +517,6 @@
 list_literal4_test: RuntimeError
 main_not_a_function_test/01: CompileTimeError
 many_overridden_no_such_method_test: RuntimeError
-map_literal4_test: RuntimeError
 method_override5_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
@@ -995,17 +632,12 @@
 multiline_newline_test/06r: MissingCompileTimeError
 named_constructor_test/01: MissingRuntimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
-named_parameters_type_test/01: MissingRuntimeError
-named_parameters_type_test/02: MissingRuntimeError
-named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
 no_main_test/01: CompileTimeError
 no_such_method_test: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
-operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
-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.
 overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
@@ -1017,9 +649,6 @@
 override_inheritance_mixed_test/03: MissingCompileTimeError
 override_inheritance_mixed_test/04: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
-positional_parameters_type_test/01: MissingRuntimeError
-positional_parameters_type_test/02: MissingRuntimeError
-prefix5_negative_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 private_super_constructor_test/01: MissingCompileTimeError
 redirecting_constructor_initializer_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
@@ -1056,6 +685,26 @@
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
+syntax_test/none: CompileTimeError
+top_level_getter_no_setter1_test/01: RuntimeError
+top_level_getter_no_setter2_test/01: RuntimeError
+truncdiv_test: RuntimeError
+try_catch_test/01: MissingCompileTimeError
+type_literal_prefix_call_test/00: RuntimeError
+type_variable_conflict2_test/02: MissingCompileTimeError
+
+[ $compiler == dart2js && $fasta && $host_checked ]
+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.
+branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
+closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
+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_type_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_type_expression_test/03: 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/none: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
+invocation_mirror_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 3014 pos 14: 'arguments.named.isEmpty': is not true.
+operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+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.
+prefix5_negative_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 syntax_test/04: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
@@ -1080,315 +729,18 @@
 syntax_test/24: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/25: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/26: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
-syntax_test/none: CompileTimeError
-top_level_getter_no_setter1_test/01: RuntimeError
-top_level_getter_no_setter2_test/01: RuntimeError
-truncdiv_test: RuntimeError
-try_catch_test/01: MissingCompileTimeError
-type_checks_in_factory_method_test: RuntimeError
-type_literal_prefix_call_test/00: RuntimeError
-type_variable_conflict2_test/02: MissingCompileTimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-assertion_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-bad_override_test/03: MissingCompileTimeError
-bad_override_test/04: MissingCompileTimeError
-bad_override_test/05: MissingCompileTimeError
-bit_operations_test/01: RuntimeError
-bit_operations_test/02: RuntimeError
-bit_operations_test/03: RuntimeError
-bit_operations_test/04: RuntimeError
-bit_operations_test/none: RuntimeError
-branch_canonicalization_test: RuntimeError
-call_function_apply_test: RuntimeError
-call_nonexistent_constructor_test/01: RuntimeError
-call_type_literal_test/01: RuntimeError
-canonical_const2_test: RuntimeError
-check_member_static_test/02: MissingCompileTimeError
-class_cycle_test/02: MissingCompileTimeError
-class_cycle_test/03: MissingCompileTimeError
-class_literal_test/01: RuntimeError
-class_literal_test/03: RuntimeError
-class_literal_test/07: RuntimeError
-closure_in_field_test/01: RuntimeError
-closure_in_field_test/02: RuntimeError
-config_import_test: RuntimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
-const_instance_field_test/01: MissingCompileTimeError
-const_map2_test/00: MissingCompileTimeError
-const_map3_test/00: MissingCompileTimeError
-const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
-constants_test/05: MissingCompileTimeError
-constructor2_test: RuntimeError
-constructor3_test: RuntimeError
-constructor5_test: RuntimeError
-constructor6_test: RuntimeError
-constructor_call_as_function_test/01: MissingRuntimeError
-constructor_named_arguments_test/none: RuntimeError
-constructor_redirect1_negative_test: Crash # Issue 30856
-constructor_redirect2_negative_test: Crash # Issue 30856
-constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
-cyclic_constructor_test/01: Crash # Issue 30856
-deferred_constraints_constants_test/none: RuntimeError
-deferred_constraints_constants_test/reference_after_load: RuntimeError
-deferred_inheritance_constraints_test/extends: MissingCompileTimeError
-deferred_inheritance_constraints_test/implements: MissingCompileTimeError
-deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
+[ $compiler == dart2js && $fasta && $minified ]
 deferred_load_library_wrong_args_test/01: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_load_library_wrong_args_test/01: MissingRuntimeError
-deferred_not_loaded_check_test: RuntimeError
 deferred_redirecting_factory_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_redirecting_factory_test: RuntimeError
-double_int_to_string_test: RuntimeError
-duplicate_export_negative_test: Fail
-duplicate_implements_test/01: MissingCompileTimeError
-duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/01: RuntimeError
-dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
-example_constructor_test: RuntimeError
-expect_test: RuntimeError
-external_test/10: MissingRuntimeError
-external_test/13: MissingRuntimeError
-external_test/20: MissingRuntimeError
 f_bounded_quantification5_test: RuntimeError
-factory_redirection_test/07: MissingCompileTimeError
-fauxverride_test/03: MissingCompileTimeError
-fauxverride_test/05: MissingCompileTimeError
-field_increment_bailout_test: RuntimeError
-field_initialization_order_test: RuntimeError
-field_override3_test/00: MissingCompileTimeError
-field_override3_test/01: MissingCompileTimeError
-field_override3_test/02: MissingCompileTimeError
-field_override3_test/03: MissingCompileTimeError
-field_override4_test/02: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/02: MissingCompileTimeError
-final_field_initialization_order_test: RuntimeError
-full_stacktrace1_test: RuntimeError # Issue 12698
-full_stacktrace2_test: RuntimeError # Issue 12698
-full_stacktrace3_test: RuntimeError # Issue 12698
-generic_methods_type_expression_test/01: RuntimeError
-generic_methods_type_expression_test/03: RuntimeError
-generic_methods_type_expression_test/none: RuntimeError
-generic_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
-if_null_assignment_behavior_test/14: RuntimeError
-infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: RuntimeError
-integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
-invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_invoke_on2_test: RuntimeError
-invocation_mirror_invoke_on_test: RuntimeError
-invocation_mirror_test: RuntimeError
-issue13474_test: RuntimeError
-issue21079_test: RuntimeError
-left_shift_test: RuntimeError
-library_env_test/has_mirror_support: RuntimeError
-library_env_test/has_no_html_support: RuntimeError
-library_env_test/has_no_io_support: RuntimeError
-list_literal4_test: RuntimeError
-main_not_a_function_test/01: CompileTimeError
-many_overridden_no_such_method_test: RuntimeError
-map_literal4_test: RuntimeError
-method_override5_test: RuntimeError
-method_override7_test/00: MissingCompileTimeError
-method_override7_test/01: MissingCompileTimeError
-method_override7_test/02: MissingCompileTimeError
-method_override8_test/00: MissingCompileTimeError
-method_override8_test/01: MissingCompileTimeError
-mint_arithmetic_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/01: MissingCompileTimeError
-mixin_illegal_superclass_test/02: MissingCompileTimeError
-mixin_illegal_superclass_test/03: MissingCompileTimeError
-mixin_illegal_superclass_test/04: MissingCompileTimeError
-mixin_illegal_superclass_test/05: MissingCompileTimeError
-mixin_illegal_superclass_test/06: MissingCompileTimeError
-mixin_illegal_superclass_test/07: MissingCompileTimeError
-mixin_illegal_superclass_test/08: MissingCompileTimeError
-mixin_illegal_superclass_test/09: MissingCompileTimeError
-mixin_illegal_superclass_test/10: MissingCompileTimeError
-mixin_illegal_superclass_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/12: MissingCompileTimeError
-mixin_illegal_superclass_test/13: MissingCompileTimeError
-mixin_illegal_superclass_test/14: MissingCompileTimeError
-mixin_illegal_superclass_test/15: MissingCompileTimeError
-mixin_illegal_superclass_test/16: MissingCompileTimeError
-mixin_illegal_superclass_test/17: MissingCompileTimeError
-mixin_illegal_superclass_test/18: MissingCompileTimeError
-mixin_illegal_superclass_test/19: MissingCompileTimeError
-mixin_illegal_superclass_test/20: MissingCompileTimeError
-mixin_illegal_superclass_test/21: MissingCompileTimeError
-mixin_illegal_superclass_test/22: MissingCompileTimeError
-mixin_illegal_superclass_test/23: MissingCompileTimeError
-mixin_illegal_superclass_test/24: MissingCompileTimeError
-mixin_illegal_superclass_test/25: MissingCompileTimeError
-mixin_illegal_superclass_test/26: MissingCompileTimeError
-mixin_illegal_superclass_test/27: MissingCompileTimeError
-mixin_illegal_superclass_test/28: MissingCompileTimeError
-mixin_illegal_superclass_test/29: MissingCompileTimeError
-mixin_illegal_superclass_test/30: MissingCompileTimeError
-mixin_of_mixin_test/01: CompileTimeError
-mixin_of_mixin_test/02: CompileTimeError
-mixin_of_mixin_test/03: CompileTimeError
-mixin_of_mixin_test/04: CompileTimeError
-mixin_of_mixin_test/05: CompileTimeError
-mixin_of_mixin_test/06: CompileTimeError
-mixin_of_mixin_test/07: CompileTimeError
-mixin_of_mixin_test/08: CompileTimeError
-mixin_of_mixin_test/09: CompileTimeError
-mixin_of_mixin_test/10: CompileTimeError
-mixin_of_mixin_test/11: CompileTimeError
-mixin_of_mixin_test/12: CompileTimeError
-mixin_of_mixin_test/13: CompileTimeError
-mixin_of_mixin_test/14: CompileTimeError
-mixin_of_mixin_test/15: CompileTimeError
-mixin_of_mixin_test/16: CompileTimeError
-mixin_of_mixin_test/17: CompileTimeError
-mixin_of_mixin_test/18: CompileTimeError
-mixin_of_mixin_test/19: CompileTimeError
-mixin_of_mixin_test/20: CompileTimeError
-mixin_of_mixin_test/21: CompileTimeError
-mixin_of_mixin_test/22: CompileTimeError
-mixin_of_mixin_test/none: CompileTimeError
-mixin_super_2_test: CompileTimeError
-mixin_super_bound2_test/01: CompileTimeError
-mixin_super_bound2_test/none: CompileTimeError
-mixin_super_constructor_named_test/01: MissingCompileTimeError
-mixin_super_constructor_positionals_test/01: MissingCompileTimeError
-mixin_super_test: CompileTimeError
-mixin_super_use_test: CompileTimeError
-mixin_superclass_test: CompileTimeError
-mixin_supertype_subclass2_test/01: CompileTimeError
-mixin_supertype_subclass2_test/02: CompileTimeError
-mixin_supertype_subclass2_test/03: CompileTimeError
-mixin_supertype_subclass2_test/04: CompileTimeError
-mixin_supertype_subclass2_test/05: CompileTimeError
-mixin_supertype_subclass2_test/none: CompileTimeError
-mixin_supertype_subclass3_test/01: CompileTimeError
-mixin_supertype_subclass3_test/02: CompileTimeError
-mixin_supertype_subclass3_test/03: CompileTimeError
-mixin_supertype_subclass3_test/04: CompileTimeError
-mixin_supertype_subclass3_test/05: CompileTimeError
-mixin_supertype_subclass3_test/none: CompileTimeError
-mixin_supertype_subclass4_test/01: CompileTimeError
-mixin_supertype_subclass4_test/02: CompileTimeError
-mixin_supertype_subclass4_test/03: CompileTimeError
-mixin_supertype_subclass4_test/04: CompileTimeError
-mixin_supertype_subclass4_test/05: CompileTimeError
-mixin_supertype_subclass4_test/none: CompileTimeError
-mixin_supertype_subclass_test/01: CompileTimeError
-mixin_supertype_subclass_test/02: CompileTimeError
-mixin_supertype_subclass_test/03: CompileTimeError
-mixin_supertype_subclass_test/04: CompileTimeError
-mixin_supertype_subclass_test/05: CompileTimeError
-mixin_supertype_subclass_test/none: CompileTimeError
-modulo_test: RuntimeError
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
-multiline_newline_test/06: MissingCompileTimeError
-multiline_newline_test/06r: MissingCompileTimeError
-named_constructor_test/01: MissingRuntimeError
-named_parameters_default_eq_test/02: MissingCompileTimeError
-named_parameters_type_test/01: MissingRuntimeError
-named_parameters_type_test/02: MissingRuntimeError
-named_parameters_type_test/03: MissingRuntimeError
-nan_identical_test: RuntimeError
-no_main_test/01: CompileTimeError
-no_such_method_test: RuntimeError
-null_test/none: RuntimeError
-number_identity2_test: RuntimeError
-numbers_test: RuntimeError
-overridden_no_such_method_test: RuntimeError
-override_field_method1_negative_test: Fail
-override_field_method2_negative_test: Fail
-override_field_method4_negative_test: Fail
-override_field_method5_negative_test: Fail
-override_field_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/01: MissingCompileTimeError
-override_inheritance_mixed_test/02: MissingCompileTimeError
-override_inheritance_mixed_test/03: MissingCompileTimeError
-override_inheritance_mixed_test/04: MissingCompileTimeError
-override_method_with_field_test/01: MissingCompileTimeError
-positional_parameters_type_test/01: MissingRuntimeError
-positional_parameters_type_test/02: MissingRuntimeError
-private_super_constructor_test/01: MissingCompileTimeError
-redirecting_constructor_initializer_test: RuntimeError
-redirecting_factory_default_values_test/01: MissingCompileTimeError
-redirecting_factory_default_values_test/02: MissingCompileTimeError
-redirecting_factory_reflection_test: RuntimeError
-regress_13462_1_test: RuntimeError
-regress_13494_test: RuntimeError
-regress_17382_test: RuntimeError
-regress_18535_test: RuntimeError
-regress_20394_test/01: MissingCompileTimeError
-regress_22936_test/01: RuntimeError
-regress_23408_test: RuntimeError
-regress_24283_test: RuntimeError
-regress_27572_test: RuntimeError
-regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28217_test/01: MissingCompileTimeError
-regress_28217_test/none: MissingCompileTimeError
-regress_28255_test: RuntimeError
-setter_override_test/00: MissingCompileTimeError
-setter_override_test/03: MissingCompileTimeError
-stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
-stacktrace_test: RuntimeError # Issue 12698
-static_getter_no_setter1_test/01: RuntimeError
-static_getter_no_setter2_test/01: RuntimeError
-static_getter_no_setter3_test/01: RuntimeError
-super_call4_test: RuntimeError
-super_getter_setter_test: RuntimeError
-super_test: RuntimeError
-switch_bad_case_test/01: MissingCompileTimeError
-switch_bad_case_test/02: MissingCompileTimeError
-switch_case_test/00: MissingCompileTimeError
-switch_case_test/01: MissingCompileTimeError
-switch_case_test/02: MissingCompileTimeError
 symbol_conflict_test: RuntimeError
-syntax_test/none: CompileTimeError
-top_level_getter_no_setter1_test/01: RuntimeError
-top_level_getter_no_setter2_test/01: RuntimeError
-truncdiv_test: RuntimeError
-try_catch_test/01: MissingCompileTimeError
-type_checks_in_factory_method_test: RuntimeError
-type_literal_prefix_call_test/00: RuntimeError
-type_variable_conflict2_test/02: MissingCompileTimeError
 
-[ $compiler == dart2js && !$dart2js_with_kernel ]
+[ $compiler == dart2js && !$fasta ]
 accessor_conflict_export2_test: Crash # Issue 25626
 accessor_conflict_export_test: Crash # Issue 25626
 accessor_conflict_import2_test: RuntimeError # Issue 25626
@@ -1425,9 +777,6 @@
 external_test/13: CompileTimeError # Issue 12887
 external_test/20: CompileTimeError # Issue 12887
 final_attempt_reinitialization_test.dart: Skip # Issue 29659
-full_stacktrace1_test: Pass, RuntimeError # Issue 12698
-full_stacktrace2_test: Pass, RuntimeError # Issue 12698
-full_stacktrace3_test: Pass, RuntimeError # Issue 12698
 generalized_void_syntax_test: CompileTimeError
 generic_field_mixin4_test: Crash # Issue 18651
 generic_field_mixin5_test: Crash # Issue 18651
@@ -1519,41 +868,7 @@
 type_variable_conflict_test/05: Fail # Issue 13702
 type_variable_conflict_test/06: Fail # Issue 13702
 
-[ $compiler == dart2js && !$dart2js_with_kernel && $fast_startup ]
-assertion_initializer_const_error2_test/*: Crash
-assertion_initializer_const_error2_test/cc10: CompileTimeError # Issue #31321
-assertion_initializer_const_error2_test/cc11: CompileTimeError # Issue #31321
-assertion_initializer_const_error2_test/none: Pass
-assertion_initializer_const_function_error_test/01: Crash
-assertion_initializer_const_function_test/01: CompileTimeError
-const_evaluation_test/*: Fail # mirrors not supported
-deferred_constraints_constants_test: Pass # mirrors not supported, passes for the wrong reason
-deferred_constraints_constants_test/none: Fail # mirrors not supported
-deferred_constraints_constants_test/reference_after_load: Fail # mirrors not supported
-enum_mirror_test: Fail # mirrors not supported
-field_increment_bailout_test: Fail # mirrors not supported
-instance_creation_in_function_annotation_test: Fail # mirrors not supported
-invocation_mirror2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on_test: Fail # mirrors not supported
-issue21079_test: Fail # mirrors not supported
-library_env_test/has_mirror_support: Fail # mirrors not supported
-library_env_test/has_no_mirror_support: Pass # fails for the wrong reason.
-many_overridden_no_such_method_test: Fail # mirrors not supported
-no_such_method_test: Fail # mirrors not supported
-null_test/0*: Pass # mirrors not supported, fails for the wrong reason
-null_test/none: Fail # mirrors not supported
-overridden_no_such_method_test: Fail # mirrors not supported
-redirecting_factory_reflection_test: Fail # mirrors not supported
-regress_13462_0_test: Fail # mirrors not supported
-regress_13462_1_test: Fail # mirrors not supported
-regress_18535_test: Fail # mirrors not supported
-regress_28255_test: Fail # mirrors not supported
-super_call4_test: Fail # mirrors not supported
-super_getter_setter_test: Fail # mirrors not supported
-vm/reflect_core_vm_test: Fail # mirrors not supported
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && !$fasta && $host_checked ]
 assertion_initializer_const_error2_test/cc01: Crash
 assertion_initializer_const_error2_test/cc02: Crash
 assertion_initializer_const_error2_test/cc03: Crash
@@ -1573,7 +888,7 @@
 regress_26855_test/3: Crash # Issue 26867
 regress_26855_test/4: Crash # Issue 26867
 
-[ $compiler == dart2js && !$dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && !$fasta && $minified ]
 symbol_conflict_test: RuntimeError # Issue 23857
 
 [ $compiler == dart2js && $minified ]
diff --git a/tests/language_2/bug32372_test.dart b/tests/language_2/bug32372_test.dart
new file mode 100644
index 0000000..3804958
--- /dev/null
+++ b/tests/language_2/bug32372_test.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.
+// SharedOptions=--supermixin
+
+import "package:expect/expect.dart";
+
+class A extends Object with B<String>, C {}
+
+class B<T> {}
+
+class C<T> extends B<T> {
+  get t => T;
+}
+
+main() {
+  var x = new A();
+  Expect.equals(x.t, String);
+}
diff --git a/tests/language_2/call_operator_test.dart b/tests/language_2/call_operator_test.dart
index 6709ac7..8513bcb 100644
--- a/tests/language_2/call_operator_test.dart
+++ b/tests/language_2/call_operator_test.dart
@@ -75,6 +75,6 @@
   Expect.equals("foo:foo", e.call("foo", count: 2));
   Expect.equals("foo:foo:foo", e.call("foo", count: 3));
 
-  Expect.isTrue(a1 is Function);
-  Expect.isTrue(e is Function);
+  Expect.isFalse(a1 is Function); //# 01: ok
+  Expect.isFalse(e is Function); //# 02: ok
 }
diff --git a/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_infinite_test.dart b/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_infinite_test.dart
new file mode 100644
index 0000000..f3f4473
--- /dev/null
+++ b/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_infinite_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program to test arithmetic operations.
+
+// There is an interface conflict here due to a loop in the class
+// hierarchy leading to an infinite set of implemented types; this loop
+// shouldn't cause non-termination.
+/*@compile-error=unspecified*/ class A<T> implements B<List<T>> {}
+
+/*@compile-error=unspecified*/ class B<T> implements A<List<T>> {}
+
+main() {
+  new A();
+  new B();
+}
diff --git a/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_test.dart b/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_test.dart
new file mode 100644
index 0000000..e24aaa8
--- /dev/null
+++ b/tests/language_2/conflicting_generic_interfaces_hierarchy_loop_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program to test arithmetic operations.
+
+// There is no interface conflict here, but there is a loop in the class
+// hierarchy leading to a finite set of implemented types; this loop
+// shouldn't cause non-termination.
+/*@compile-error=unspecified*/ class A<T> implements B<T> {}
+
+/*@compile-error=unspecified*/ class B<T> implements A<T> {}
+
+main() {
+  new A();
+  new B();
+}
diff --git a/tests/language_2/conflicting_generic_interfaces_no_conflict_test.dart b/tests/language_2/conflicting_generic_interfaces_no_conflict_test.dart
new file mode 100644
index 0000000..f52d32b
--- /dev/null
+++ b/tests/language_2/conflicting_generic_interfaces_no_conflict_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program to test arithmetic operations.
+
+class I<T> {}
+
+class A implements I<int> {}
+
+class B implements I<int> {}
+
+class C extends A implements B {}
+
+main() {
+  new C();
+}
diff --git a/tests/language_2/conflicting_generic_interfaces_simple_test.dart b/tests/language_2/conflicting_generic_interfaces_simple_test.dart
new file mode 100644
index 0000000..fe319b2
--- /dev/null
+++ b/tests/language_2/conflicting_generic_interfaces_simple_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program to test arithmetic operations.
+
+class I<T> {}
+
+class A implements I<int> {}
+
+class B implements I<String> {}
+
+/*@compile-error=unspecified*/ class C extends A implements B {}
+
+main() {
+  new C();
+}
diff --git a/tests/language_2/deferred_optimized_test.dart b/tests/language_2/deferred_optimized_test.dart
index bcd4d5b..8755e7f 100644
--- a/tests/language_2/deferred_optimized_test.dart
+++ b/tests/language_2/deferred_optimized_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--optimization-counter-threshold=10 --no-use-inlining
+// VMOptions=--optimization-counter-threshold=10 --compiler-passes=-Inlining
 
 // Declares foo that returns 42.
 import "deferred_constraints_lib2.dart" deferred as lib;
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 9828cc6..e4840e6 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -259,10 +259,6 @@
 [ !$checked && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
 *: SkipByDesign
 
-[ !$dart2js_with_kernel && $minified ]
-regress_21795_test: RuntimeError # Issue 12605
-stack_trace_test: Fail, OK # Stack trace not preserved in minified code.
-
 [ !$fasta && !$strong ]
 implicit_creation/implicit_const_context_constructor_generic_named_test: Fail # No support for implicit creation.
 implicit_creation/implicit_const_context_constructor_generic_test: Fail # No support for implicit creation.
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index c8f9a3e..5a9ec1e 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -11,7 +11,6 @@
 black_listed_test/none: Fail # Issue 14228
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28813
-built_in_identifier_type_annotation_test/85: Crash # Issue 28813
 call_type_literal_test: CompileTimeError
 cascade_test/none: Fail # Issue 11577
 class_literal_static_test/none: CompileTimeError
@@ -1124,6 +1123,7 @@
 call_method_override_test/02: MissingCompileTimeError
 cascaded_forwarding_stubs_test: CompileTimeError
 config_import_corelib_test: CompileTimeError
+conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
 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.
 const_types_test/14: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
@@ -1209,6 +1209,9 @@
 prefix15_negative_test: CompileTimeError, OK
 prefix18_negative_test: CompileTimeError, OK
 prefix6_negative_test: CompileTimeError, OK
+regress_22976_test/01: CompileTimeError
+regress_22976_test/02: CompileTimeError
+regress_22976_test/none: CompileTimeError
 regress_30121_test: CompileTimeError # Issue 31087
 regress_30339_test: CompileTimeError
 reify_typevar_static_test/00: MissingCompileTimeError # Issue 28823
@@ -1359,6 +1362,7 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
+conflicting_generic_interfaces_simple_test: MissingCompileTimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 9841b1f..afef09fa 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -4,7 +4,13 @@
 # Sections in this file should contain "$compiler == dart2js".
 
 [ $compiler == dart2js ]
+async_star_cancel_while_paused_test: RuntimeError # Issue 22853
+bit_operations_test: RuntimeError, OK # non JS number semantics
+config_import_test: RuntimeError # Test flag is not passed to the compiler.
 double_identical_test: RuntimeError # Negative and positive zero are distinct, but not in dart2js; bug #11551.
+issue23244_test: RuntimeError # Isolates - enum canonicalization - Issue 23244
+null_test/mirrors: SkipByDesign # Uses mirrors.
+vm/*: SkipByDesign # Tests for the VM.
 
 [ $compiler != dart2js ]
 minify_closure_variable_collision_test: SkipByDesign # Regression test for dart2js
@@ -13,19 +19,12 @@
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 
-[ $compiler == dart2js && $runtime == chrome && $system == macos && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
 await_future_test: Pass, Timeout # Issue 26735
 
-[ $compiler == dart2js && $runtime == chrome && !$dart2js_with_kernel ]
-enum_mirror_test: Pass
-
-[ $compiler == dart2js && $runtime == chromeOnAndroid && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == chromeOnAndroid ]
 override_field_test/02: Pass, Slow # TODO(kasperl): Please triage.
 
-[ $compiler == dart2js && $runtime == d8 && $checked && !$dart2js_with_kernel ]
-factory_implementation_test/00: Fail
-regress_30339_test: RuntimeError # Issue 26429
-
 [ $compiler == dart2js && $runtime == d8 && !$checked ]
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
@@ -33,42 +32,31 @@
 [ $compiler == dart2js && $runtime == d8 && !$checked && !$strong ]
 generic_list_checked_test: RuntimeError
 
-[ $compiler == dart2js && $runtime == d8 && $dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == d8 && $fasta ]
 assertion_test: RuntimeError
 bug32353_test: CompileTimeError
+bug32372_test: CompileTimeError
 implicit_creation/implicit_new_constructor_generic_test: Pass
 
-[ $compiler == dart2js && $runtime == d8 && !$dart2js_with_kernel ]
-void_type_function_types_test/none: CompileTimeError # Issue #30515
-
-[ $compiler == dart2js && $runtime == drt && $checked && !$dart2js_with_kernel ]
-regress_30339_test: RuntimeError # Issue 30393
-
-[ $compiler == dart2js && $runtime == drt && !$checked && !$dart2js_with_kernel ]
-field_override_optimization_test: RuntimeError
-field_type_check2_test/01: MissingRuntimeError
-
-[ $compiler == dart2js && $runtime == ff && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == ff ]
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 round_test: Pass, Fail, OK # Fixed in ff 35. Common JavaScript engine Math.round bug.
 
 [ $compiler == dart2js && $runtime == jsshell ]
 async_call_test: RuntimeError # Timer interface not supported: Issue 7728.
+async_star_await_pauses_test: RuntimeError # Need triage
+async_star_no_cancel2_test: RuntimeError # Need triage
+async_star_no_cancel_test: RuntimeError # Need triage
 async_star_test/01: RuntimeError
 async_star_test/02: RuntimeError
 async_star_test/03: RuntimeError
 async_star_test/04: RuntimeError
 async_star_test/05: RuntimeError
 async_star_test/none: RuntimeError
+await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
-
-[ $compiler == dart2js && $runtime == jsshell && !$dart2js_with_kernel ]
-async_star_await_pauses_test: RuntimeError # Need triage
-async_star_no_cancel2_test: RuntimeError # Need triage
-async_star_no_cancel_test: RuntimeError # Need triage
-await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
 regress_23996_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
 
 [ $compiler == dart2js && $runtime != none ]
@@ -179,247 +167,30 @@
 function_type_alias3_test: RuntimeError
 function_type_alias4_test: RuntimeError
 
-[ $compiler == dart2js && $runtime != none && !$checked && !$dart2js_with_kernel ]
-callable_test/none: RuntimeError
-cascaded_forwarding_stubs_generic_test: RuntimeError
-cascaded_forwarding_stubs_test: RuntimeError
-checked_setter2_test: RuntimeError
-checked_setter3_test: RuntimeError
-checked_setter_test: RuntimeError
-covariant_subtyping_tearoff1_test: RuntimeError
-covariant_subtyping_tearoff2_test: RuntimeError
-covariant_subtyping_tearoff3_test: RuntimeError
-covariant_subtyping_test: CompileTimeError
-covariant_subtyping_unsafe_call1_test: RuntimeError
-covariant_subtyping_unsafe_call2_test: RuntimeError
-covariant_subtyping_unsafe_call3_test: RuntimeError
-function_subtype_bound_closure1_test: RuntimeError
-function_subtype_bound_closure2_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_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_call1_test: RuntimeError
-function_subtype_call2_test: RuntimeError
-function_subtype_cast0_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
-function_subtype_cast2_test: RuntimeError
-function_subtype_cast3_test: RuntimeError
-function_subtype_checked0_test: RuntimeError
-function_subtype_closure0_test: RuntimeError
-function_subtype_closure1_test: RuntimeError
-function_subtype_factory1_test: RuntimeError
-function_subtype_inline1_test: RuntimeError
-function_subtype_local1_test: RuntimeError
-function_subtype_local2_test: RuntimeError
-function_subtype_local5_test: RuntimeError
-function_subtype_named1_test: RuntimeError
-function_subtype_named2_test: RuntimeError
-function_subtype_not0_test: RuntimeError
-function_subtype_not1_test: RuntimeError
-function_subtype_not2_test: RuntimeError
-function_subtype_not3_test: RuntimeError
-function_subtype_optional1_test: RuntimeError
-function_subtype_optional2_test: RuntimeError
-function_subtype_regression_ddc_588_test: RuntimeError
-function_subtype_setter0_test: RuntimeError
-function_subtype_top_level1_test: RuntimeError
-function_subtype_typearg2_test: RuntimeError
-function_subtype_typearg3_test: RuntimeError
-function_subtype_typearg5_test: RuntimeError
-function_type2_test: RuntimeError
-function_type_alias2_test: RuntimeError
-function_type_alias3_test: RuntimeError
-function_type_alias4_test: RuntimeError
-function_type_call_getter2_test/none: RuntimeError
-function_type_test: RuntimeError
-generic_field_mixin6_test/none: RuntimeError
-generic_list_checked_test: RuntimeError
-getters_setters2_test/01: RuntimeError
-getters_setters2_test/none: RuntimeError
-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_constructor_initializer_test: RuntimeError
-implicit_downcast_during_constructor_invocation_test: RuntimeError
-implicit_downcast_during_do_test: RuntimeError
-implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
-implicit_downcast_during_field_declaration_test: RuntimeError
-implicit_downcast_during_for_condition_test: RuntimeError
-implicit_downcast_during_for_in_element_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_indexed_assignment_test: RuntimeError
-implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
-implicit_downcast_during_indexed_get_test: RuntimeError
-implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
-implicit_downcast_during_invocation_test: RuntimeError
-implicit_downcast_during_logical_expression_test: RuntimeError
-implicit_downcast_during_map_literal_test: RuntimeError
-implicit_downcast_during_method_invocation_test: RuntimeError
-implicit_downcast_during_not_test: RuntimeError
-implicit_downcast_during_null_aware_method_invocation_test: RuntimeError
-implicit_downcast_during_return_test: RuntimeError
-implicit_downcast_during_static_method_invocation_test: RuntimeError
-implicit_downcast_during_super_method_invocation_test: RuntimeError
-implicit_downcast_during_variable_declaration_test: RuntimeError
-implicit_downcast_during_while_statement_test: RuntimeError
-inferrer_synthesized_constructor_test: RuntimeError
-malformed2_test/00: MissingCompileTimeError
-mixin_type_parameters_super_test: RuntimeError
-type_parameter_test/05: MissingCompileTimeError
-typevariable_substitution2_test/02: RuntimeError
-
-[ $compiler == dart2js && $runtime != none && !$checked && !$dart2js_with_kernel && !$enable_asserts ]
-assertion_test: RuntimeError # Issue 12748
-runtime_type_function_test: Pass, RuntimeError # Issue 27394
-typevariable_substitution2_test/02: RuntimeError
-
-[ $compiler == dart2js && $runtime != none && !$dart2js_with_kernel ]
-accessor_conflict_import2_test: RuntimeError # Issue 25626
-accessor_conflict_import_prefixed2_test: RuntimeError # Issue 25626
-accessor_conflict_import_prefixed_test: RuntimeError # Issue 25626
-accessor_conflict_import_test: RuntimeError # Issue 25626
-assertion_test: RuntimeError # Issue 30326
-async_star_cancel_while_paused_test: RuntimeError # Issue 22853
-async_star_test/02: RuntimeError
-bit_operations_test: RuntimeError, OK # Issue 1533
-branch_canonicalization_test: RuntimeError # Issue 638.
-call_method_as_cast_test/01: RuntimeError
-call_method_as_cast_test/02: RuntimeError
-call_method_as_cast_test/03: RuntimeError
-call_method_as_cast_test/04: RuntimeError
-call_method_as_cast_test/05: RuntimeError
-call_method_function_typed_value_test/02: RuntimeError
-call_method_function_typed_value_test/04: RuntimeError
-call_method_function_typed_value_test/06: RuntimeError
-call_method_function_typed_value_test/08: RuntimeError
-call_method_implicit_tear_off_implements_function_test/01: RuntimeError
-call_method_implicit_tear_off_implements_function_test/02: RuntimeError
-call_method_implicit_tear_off_implements_function_test/03: RuntimeError
-call_method_implicit_tear_off_implements_function_test/04: RuntimeError
-call_method_implicit_tear_off_test/01: RuntimeError
-call_method_implicit_tear_off_test/02: RuntimeError
-call_method_implicit_tear_off_test/03: RuntimeError
-call_method_implicit_tear_off_test/04: RuntimeError
-call_method_implicit_tear_off_test/05: RuntimeError
-call_method_implicit_tear_off_test/06: RuntimeError
-call_method_is_check_test/01: RuntimeError
-call_method_is_check_test/02: RuntimeError
-call_method_is_check_test/03: RuntimeError
-call_method_is_check_test/04: RuntimeError
-call_method_is_check_test/05: RuntimeError
-call_method_must_not_be_field_test/01: MissingCompileTimeError
-call_method_must_not_be_field_test/02: MissingCompileTimeError
-call_method_must_not_be_field_test/03: RuntimeError
-call_method_must_not_be_getter_test/01: MissingCompileTimeError
-call_method_must_not_be_getter_test/02: MissingCompileTimeError
-call_method_must_not_be_getter_test/03: RuntimeError
-call_method_override_test/01: MissingCompileTimeError
-call_method_override_test/02: MissingCompileTimeError
-covariant_override/runtime_check_test: RuntimeError
-function_propagation_test: RuntimeError
-function_type_alias_test: RuntimeError
-generic_closure_test: RuntimeError
-generic_function_typedef_test/01: RuntimeError
-generic_instanceof_test: RuntimeError
-generic_typedef_test: RuntimeError
-implicit_downcast_during_assert_initializer_test: CompileTimeError
-implicit_downcast_during_for_in_iterable_test: RuntimeError
-implicit_downcast_during_function_literal_arrow_test: RuntimeError
-implicit_downcast_during_function_literal_return_test: RuntimeError
-implicit_downcast_during_list_literal_test: RuntimeError
-implicit_downcast_during_redirecting_initializer_test: RuntimeError
-implicit_downcast_during_return_async_test: RuntimeError
-implicit_downcast_during_super_initializer_test: RuntimeError
-implicit_downcast_during_yield_star_test: RuntimeError
-implicit_downcast_during_yield_test: RuntimeError
-instanceof2_test: RuntimeError
-instanceof4_test/01: RuntimeError
-instanceof4_test/none: RuntimeError
-invalid_cast_test/01: MissingCompileTimeError
-invalid_cast_test/02: MissingCompileTimeError
-invalid_cast_test/03: MissingCompileTimeError
-invalid_cast_test/04: MissingCompileTimeError
-invalid_cast_test/07: MissingCompileTimeError
-invalid_cast_test/08: MissingCompileTimeError
-invalid_cast_test/09: MissingCompileTimeError
-invalid_cast_test/10: MissingCompileTimeError
-invalid_cast_test/11: MissingCompileTimeError
-issue23244_test: RuntimeError # 23244
-issue31596_super_test/05: RuntimeError
-many_generic_instanceof_test: RuntimeError
-map_literal8_test: RuntimeError
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError # Issue 15101
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError # Issue 15101
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError # Issue 15101
-mixin_type_parameter_inference_error_test/none: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/05: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/none: CompileTimeError
-mixin_type_parameter_inference_test/01: CompileTimeError
-mixin_type_parameter_inference_test/02: CompileTimeError
-mixin_type_parameter_inference_test/03: CompileTimeError
-mixin_type_parameter_inference_test/08: CompileTimeError
-mixin_type_parameter_inference_test/09: CompileTimeError
-mixin_type_parameter_inference_test/10: CompileTimeError
-mixin_type_parameter_inference_test/12: CompileTimeError
-mixin_type_parameter_inference_test/13: CompileTimeError
-mixin_type_parameter_inference_test/16: CompileTimeError
-mixin_type_parameter_inference_test/none: CompileTimeError
-not_enough_positional_arguments_test/00: MissingCompileTimeError
-not_enough_positional_arguments_test/03: MissingCompileTimeError
-not_enough_positional_arguments_test/06: MissingCompileTimeError
-not_enough_positional_arguments_test/07: MissingCompileTimeError
-nsm5_test: MissingCompileTimeError
-null_test/mirrors: Skip # Uses mirrors.
-override_inheritance_no_such_method_test/05: MissingCompileTimeError
-ref_before_declaration_test/00: MissingCompileTimeError
-ref_before_declaration_test/01: MissingCompileTimeError
-ref_before_declaration_test/02: MissingCompileTimeError
-ref_before_declaration_test/03: MissingCompileTimeError
-ref_before_declaration_test/04: MissingCompileTimeError
-ref_before_declaration_test/05: MissingCompileTimeError
-ref_before_declaration_test/06: MissingCompileTimeError
-regress_28341_test: Fail # Issue 28340
-symbol_literal_test/none: CompileTimeError
-tearoff_dynamic_test: RuntimeError
-truncdiv_test: RuntimeError # Issue 15246
-type_literal_test: RuntimeError
-vm/*: SkipByDesign # Tests for the VM.
-
-[ $compiler == dart2js && $runtime == safari && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $runtime == safari ]
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 round_test: Fail, OK # Common JavaScript engine Math.round bug.
 
-[ $compiler == dart2js && $system == windows && !$dart2js_with_kernel ]
+[ $compiler == dart2js && $system == windows ]
 string_literals_test: Pass, RuntimeError # Failures on dart2js-win7-chrome-4-4-be and dart2js-win7-ie11ff-4-4-be
 
+[ $compiler == dart2js && $browser ]
+library_env_test/has_io_support: RuntimeError # Issue 27398
+library_env_test/has_no_io_support: Pass # Issue 27398
+
 [ $compiler == dart2js && $browser && $csp && !$fast_startup ]
 conditional_import_string_test: Fail # Issue 30615
 conditional_import_test: Fail # Issue 30615
 
-[ $compiler == dart2js && $browser && !$dart2js_with_kernel ]
-config_import_test: Fail # Test flag is not passed to the compiler.
-library_env_test/has_io_support: RuntimeError # Issue 27398
-library_env_test/has_no_io_support: Pass # Issue 27398
-
 [ $compiler == dart2js && $checked ]
 covariant_subtyping_test: CompileTimeError
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && $minified && $strong ]
+[ $compiler == dart2js && $checked && $fasta && $minified && $strong ]
 inline_super_field_test: Crash
 typedef_is_test: Crash
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && $strong ]
+[ $compiler == dart2js && $checked && $fasta && $strong ]
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_test: RuntimeError
 async_star_cancel_while_paused_test: RuntimeError
@@ -432,8 +203,8 @@
 bit_operations_test/none: RuntimeError
 branch_canonicalization_test: RuntimeError
 built_in_identifier_test: RuntimeError # Issue 28815
-call_function_apply_test: RuntimeError
-canonical_const2_test: RuntimeError
+call_function_apply_test: RuntimeError # Issue 23873
+canonical_const2_test: RuntimeError, OK # non JS number semantics
 check_member_static_test/02: MissingCompileTimeError
 checked_method_error_order_test: RuntimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -505,8 +276,8 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
+const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
+const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 const_types_test/01: MissingCompileTimeError
 const_types_test/02: MissingCompileTimeError
 const_types_test/03: MissingCompileTimeError
@@ -555,9 +326,9 @@
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_load_constants_test/none: RuntimeError
 deferred_load_library_wrong_args_test/01: MissingRuntimeError
-deferred_not_loaded_check_test: RuntimeError
+deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
 deferred_redirecting_factory_test: RuntimeError
-double_int_to_string_test: RuntimeError
+double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -565,7 +336,7 @@
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/none: RuntimeError
 enum_mirror_test: RuntimeError
-expect_test: RuntimeError
+expect_test: RuntimeError, OK # Issue 13080
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
@@ -583,7 +354,7 @@
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
 function_type_alias_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError
+generalized_void_syntax_test: CompileTimeError # Issue #30176.
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node T.
@@ -596,19 +367,19 @@
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
 getter_override_test/02: MissingCompileTimeError
-identical_closure2_test: RuntimeError
+identical_closure2_test: RuntimeError # non JS number semantics
 implicit_downcast_during_assert_initializer_test: RuntimeError
-infinity_test: RuntimeError
+infinity_test: RuntimeError # non JS number semantics - Issue 4984
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
 instanceof4_test/none: RuntimeError
-integer_division_by_zero_test: RuntimeError
+integer_division_by_zero_test: RuntimeError # Issue 8301
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: RuntimeError # mirrors not supported
 issue21079_test: RuntimeError
 issue23244_test: RuntimeError
-left_shift_test: RuntimeError
+left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 list_literal4_test/00: MissingCompileTimeError
@@ -628,7 +399,7 @@
 method_override7_test/02: MissingCompileTimeError
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
-mint_arithmetic_test: RuntimeError
+mint_arithmetic_test: RuntimeError # non JS number semantics
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -707,7 +478,7 @@
 mixin_supertype_subclass4_test/05: CompileTimeError
 mixin_supertype_subclass4_test/none: CompileTimeError
 mixin_type_parameters_super_test: RuntimeError
-modulo_test: RuntimeError
+modulo_test: RuntimeError # non JS number semantics
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
@@ -715,7 +486,7 @@
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
-nan_identical_test: RuntimeError
+nan_identical_test: RuntimeError # Issue 11551
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
 no_main_test/01: CompileTimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
@@ -728,7 +499,7 @@
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
-numbers_test: RuntimeError
+numbers_test: RuntimeError, OK # non JS number semantics
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -749,7 +520,7 @@
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_reflection_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
-regress_24283_test: RuntimeError
+regress_24283_test: RuntimeError # non JS number semantics
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
 regress_28217_test/none: MissingCompileTimeError
@@ -781,7 +552,7 @@
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
 tearoff_dynamic_test: RuntimeError
-truncdiv_test: RuntimeError
+truncdiv_test: RuntimeError # non JS number semantics - Issue 15246
 try_catch_test/01: MissingCompileTimeError
 type_check_const_function_typedef2_test: MissingCompileTimeError
 type_literal_test: RuntimeError
@@ -789,34 +560,6 @@
 type_parameter_test/09: Crash # Internal Error: Unexpected type variable in static context.
 type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
 
-[ $compiler == dart2js && $checked && !$dart2js_with_kernel ]
-async_return_types_test/nestedFuture: Fail # Issue 26429
-async_return_types_test/wrongTypeParameter: Fail # Issue 26429
-check_member_static_test/01: MissingCompileTimeError
-check_method_override_test/01: MissingCompileTimeError
-check_method_override_test/02: MissingCompileTimeError
-covariant_subtyping_test: CompileTimeError
-default_factory2_test/01: Fail # Issue 14121
-function_malformed_result_type_test/00: MissingCompileTimeError
-function_type_alias_test: RuntimeError
-function_type_call_getter2_test/00: MissingCompileTimeError
-function_type_call_getter2_test/01: MissingCompileTimeError
-function_type_call_getter2_test/02: MissingCompileTimeError
-function_type_call_getter2_test/03: MissingCompileTimeError
-function_type_call_getter2_test/04: MissingCompileTimeError
-function_type_call_getter2_test/05: MissingCompileTimeError
-generic_test/01: MissingCompileTimeError
-generic_test/none: RuntimeError
-malbounded_instantiation_test/01: Fail # Issue 12702
-malbounded_redirecting_factory_test/02: Fail # Issue 12825
-malbounded_redirecting_factory_test/03: Fail # Issue 12825
-malbounded_type_cast2_test: Fail # Issue 14121
-malbounded_type_cast_test: Fail # Issue 14121
-malbounded_type_test_test/03: Fail # Issue 14121
-malbounded_type_test_test/04: Fail # Issue 14121
-regress_26133_test: RuntimeError # Issue 26429
-regress_29405_test: Fail # Issue 29422
-
 [ $compiler == dart2js && !$checked ]
 covariance_field_test/01: RuntimeError
 covariance_field_test/02: RuntimeError
@@ -838,7 +581,10 @@
 recursive_mixin_test: RuntimeError # no check without --checked
 type_argument_in_super_type_test: RuntimeError
 
-[ $compiler == dart2js && !$checked && $dart2js_with_kernel ]
+[ $compiler == dart2js && !$checked && !$enable_asserts ]
+assertion_test: RuntimeError, OK
+
+[ $compiler == dart2js && !$checked && $fasta ]
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: RuntimeError
 checked_setter3_test: RuntimeError # Issue 31128
@@ -881,98 +627,35 @@
 nsm5_test: MissingCompileTimeError
 override_inheritance_no_such_method_test/05: MissingCompileTimeError
 
-[ $compiler == dart2js && !$checked && !$dart2js_with_kernel ]
-bool_check_test: RuntimeError # Issue 29647
-bool_condition_check_test: RuntimeError
-const_constructor2_test/13: MissingCompileTimeError
-const_constructor2_test/14: MissingCompileTimeError
-const_constructor2_test/15: MissingCompileTimeError
-const_constructor2_test/16: MissingCompileTimeError
-const_constructor2_test/17: MissingCompileTimeError
-const_constructor2_test/18: MissingCompileTimeError
-const_constructor2_test/20: MissingCompileTimeError
-const_constructor2_test/22: MissingCompileTimeError
-const_constructor2_test/24: MissingCompileTimeError
-const_constructor3_test/02: MissingCompileTimeError
-const_constructor3_test/04: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
-forwarding_semi_stub_test: RuntimeError
-forwarding_stub_tearoff_generic_test: RuntimeError
-forwarding_stub_tearoff_test: RuntimeError
-function_subtype_inline2_test: RuntimeError
-generic_test/01: MissingCompileTimeError
-generic_test/none: RuntimeError # test requires Dart 2 subtyping for `is`
-issue31596_implement_covariant_test: RuntimeError
-issue31596_test: RuntimeError
-list_literal1_test/01: MissingCompileTimeError
-type_check_const_function_typedef2_test: MissingCompileTimeError
+[ $compiler == dart2js && $fast_startup ]
+const_evaluation_test/*: Fail # mirrors not supported
+deferred_constraints_constants_test: Pass # mirrors not supported, passes for the wrong reason
+deferred_constraints_constants_test/none: Fail # mirrors not supported
+deferred_constraints_constants_test/reference_after_load: Fail # mirrors not supported
+enum_mirror_test: Fail # mirrors not supported
+field_increment_bailout_test: Fail # mirrors not supported
+instance_creation_in_function_annotation_test: Fail # mirrors not supported
+invocation_mirror2_test: Fail # mirrors not supported
+invocation_mirror_invoke_on2_test: Fail # mirrors not supported
+invocation_mirror_invoke_on_test: Fail # mirrors not supported
+issue21079_test: Fail # mirrors not supported
+library_env_test/has_mirror_support: Fail # mirrors not supported
+library_env_test/has_no_mirror_support: Pass # fails for the wrong reason.
+many_overridden_no_such_method_test: Fail # mirrors not supported
+no_such_method_test: Fail # mirrors not supported
+null_test/0*: Pass # mirrors not supported, fails for the wrong reason
+null_test/none: Fail # mirrors not supported
+overridden_no_such_method_test: Fail # mirrors not supported
+redirecting_factory_reflection_test: Fail # mirrors not supported
+regress_13462_0_test: Fail # mirrors not supported
+regress_13462_1_test: Fail # mirrors not supported
+regress_18535_test: Fail # mirrors not supported
+regress_28255_test: Fail # mirrors not supported
+super_call4_test: Fail # mirrors not supported
+super_getter_setter_test: CompileTimeError
+vm/reflect_core_vm_test: Fail # mirrors not supported
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
-async_error_timing_test: Crash
-bug31436_test: RuntimeError
-call_method_as_cast_test/01: RuntimeError
-call_method_as_cast_test/02: RuntimeError
-call_method_as_cast_test/03: RuntimeError
-call_method_as_cast_test/04: RuntimeError
-call_method_as_cast_test/05: RuntimeError
-call_method_function_typed_value_test/02: RuntimeError
-call_method_function_typed_value_test/04: RuntimeError
-call_method_function_typed_value_test/06: RuntimeError
-call_method_function_typed_value_test/08: RuntimeError
-call_method_is_check_test/01: RuntimeError
-call_method_is_check_test/02: RuntimeError
-call_method_is_check_test/03: RuntimeError
-call_method_is_check_test/04: RuntimeError
-call_method_is_check_test/05: RuntimeError
-call_method_must_not_be_field_test/03: RuntimeError # Issue 32155
-call_method_must_not_be_getter_test/03: RuntimeError # Issue 32155
-call_with_no_such_method_test: RuntimeError
-callable_test/none: RuntimeError
-checked_setter2_test: RuntimeError # Issue 31128
-checked_setter_test: RuntimeError # Issue 31128
-extract_type_arguments_test: Crash # Issue 31371
-function_propagation_test: RuntimeError
-function_type_call_getter2_test/none: RuntimeError
-generic_test/01: MissingCompileTimeError # front end does not validate `extends`
-implicit_downcast_during_constructor_invocation_test: RuntimeError
-implicit_downcast_during_for_in_element_test: RuntimeError
-implicit_downcast_during_for_in_iterable_test: RuntimeError
-implicit_downcast_during_function_literal_arrow_test: RuntimeError
-implicit_downcast_during_function_literal_return_test: RuntimeError
-implicit_downcast_during_invocation_test: RuntimeError
-implicit_downcast_during_list_literal_test: RuntimeError
-implicit_downcast_during_redirecting_initializer_test: RuntimeError
-implicit_downcast_during_return_async_test: RuntimeError
-implicit_downcast_during_super_initializer_test: RuntimeError
-implicit_downcast_during_yield_star_test: RuntimeError
-implicit_downcast_during_yield_test: RuntimeError
-instantiate_tearoff_after_contravariance_check_test: RuntimeError
-instantiate_tearoff_of_call_test: RuntimeError
-instantiate_tearoff_test: RuntimeError
-mixin_type_parameter_inference_error_test/none: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/05: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/none: CompileTimeError
-mixin_type_parameter_inference_test/01: CompileTimeError
-mixin_type_parameter_inference_test/02: CompileTimeError
-mixin_type_parameter_inference_test/03: CompileTimeError
-mixin_type_parameter_inference_test/08: CompileTimeError
-mixin_type_parameter_inference_test/09: CompileTimeError
-mixin_type_parameter_inference_test/10: CompileTimeError
-mixin_type_parameter_inference_test/12: CompileTimeError
-mixin_type_parameter_inference_test/13: CompileTimeError
-mixin_type_parameter_inference_test/16: CompileTimeError
-mixin_type_parameter_inference_test/none: CompileTimeError
-partial_tearoff_instantiation_test/02: CompileTimeError
-partial_tearoff_instantiation_test/04: CompileTimeError
-partial_tearoff_instantiation_test/05: Pass # for the wrong reason.
-partial_tearoff_instantiation_test/06: Pass # for the wrong reason.
-partial_tearoff_instantiation_test/07: Pass # for the wrong reason.
-partial_tearoff_instantiation_test/08: Pass # for the wrong reason.
-partial_tearoff_instantiation_test/none: CompileTimeError
-
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
+[ $compiler == dart2js && $fast_startup && $fasta && $strong ]
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_test: RuntimeError
@@ -985,8 +668,8 @@
 bool_check_test: RuntimeError
 bool_condition_check_test: RuntimeError
 branch_canonicalization_test: RuntimeError
-call_function_apply_test: RuntimeError
-canonical_const2_test: RuntimeError
+call_function_apply_test: RuntimeError # Issue 23873
+canonical_const2_test: RuntimeError, OK # non JS number semantics
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
@@ -1057,8 +740,8 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
+const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
+const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 const_types_test/01: MissingCompileTimeError
 const_types_test/02: MissingCompileTimeError
 const_types_test/03: MissingCompileTimeError
@@ -1110,9 +793,9 @@
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_load_constants_test/none: RuntimeError
 deferred_load_library_wrong_args_test/01: MissingRuntimeError
-deferred_not_loaded_check_test: RuntimeError
+deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
 deferred_redirecting_factory_test: RuntimeError
-double_int_to_string_test: RuntimeError
+double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -1121,7 +804,7 @@
 dynamic_prefix_core_test/none: RuntimeError
 dynamic_test: RuntimeError
 enum_mirror_test: RuntimeError
-expect_test: RuntimeError
+expect_test: RuntimeError, OK # Issue 13080
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
@@ -1136,9 +819,9 @@
 field_override4_test/02: MissingCompileTimeError
 final_attempt_reinitialization_test/01: MissingCompileTimeError
 final_attempt_reinitialization_test/02: MissingCompileTimeError
-full_stacktrace1_test: RuntimeError
-full_stacktrace2_test: RuntimeError
-full_stacktrace3_test: RuntimeError
+full_stacktrace1_test: RuntimeError # Issue 12698
+full_stacktrace2_test: RuntimeError # Issue 12698
+full_stacktrace3_test: RuntimeError # Issue 12698
 function_subtype_bound_closure3_test: RuntimeError
 function_subtype_bound_closure4_test: RuntimeError
 function_subtype_bound_closure7_test: RuntimeError
@@ -1166,7 +849,7 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError
+generalized_void_syntax_test: CompileTimeError # Issue #30176.
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
@@ -1185,24 +868,24 @@
 getter_override_test/02: MissingCompileTimeError
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/none: RuntimeError
-identical_closure2_test: RuntimeError
+identical_closure2_test: RuntimeError # non JS number semantics
 if_null_precedence_test/none: RuntimeError
 implicit_creation/implicit_new_or_const_composite_test: RuntimeError
 implicit_creation/implicit_new_or_const_test: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinity_test: RuntimeError
+infinity_test: RuntimeError # non JS number semantics - Issue 4984
 instance_creation_in_function_annotation_test: RuntimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
 instanceof4_test/none: RuntimeError
-integer_division_by_zero_test: RuntimeError
+integer_division_by_zero_test: RuntimeError # Issue 8301
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: RuntimeError # mirrors not supported
 invocation_mirror_invoke_on2_test: RuntimeError
 invocation_mirror_invoke_on_test: RuntimeError
 issue21079_test: RuntimeError
 issue23244_test: RuntimeError
-left_shift_test: RuntimeError
+left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 list_literal4_test/00: MissingCompileTimeError
@@ -1222,7 +905,7 @@
 method_override7_test/02: MissingCompileTimeError
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
-mint_arithmetic_test: RuntimeError
+mint_arithmetic_test: RuntimeError # non JS number semantics
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1301,7 +984,7 @@
 mixin_supertype_subclass4_test/05: CompileTimeError
 mixin_supertype_subclass4_test/none: CompileTimeError
 mixin_type_parameters_super_test: RuntimeError
-modulo_test: RuntimeError
+modulo_test: RuntimeError # non JS number semantics
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
@@ -1309,7 +992,7 @@
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
-nan_identical_test: RuntimeError
+nan_identical_test: RuntimeError # Issue 11551
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
 no_main_test/01: CompileTimeError
 no_such_method_test: RuntimeError
@@ -1323,7 +1006,7 @@
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
-numbers_test: RuntimeError
+numbers_test: RuntimeError, OK # non JS number semantics
 overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
@@ -1345,7 +1028,7 @@
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_reflection_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
-regress_24283_test: RuntimeError
+regress_24283_test: RuntimeError # non JS number semantics
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
 regress_28217_test/none: MissingCompileTimeError
@@ -1357,9 +1040,9 @@
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
-stacktrace_rethrow_error_test/none: RuntimeError
-stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
-stacktrace_rethrow_nonerror_test: RuntimeError
+stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
+stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
+stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
 super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
 switch_bad_case_test/01: MissingCompileTimeError
@@ -1375,13 +1058,78 @@
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
 tearoff_dynamic_test: Crash # Unsupported operation: Unsupported type parameter type node T.
-truncdiv_test: RuntimeError
+truncdiv_test: RuntimeError # non JS number semantics - Issue 15246
 try_catch_test/01: MissingCompileTimeError
 type_literal_test: RuntimeError
 type_variable_conflict2_test/02: MissingCompileTimeError
 typevariable_substitution2_test/02: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
+[ $compiler == dart2js && $fasta ]
+async_error_timing_test: Crash
+bug31436_test: RuntimeError
+call_method_as_cast_test/01: RuntimeError
+call_method_as_cast_test/02: RuntimeError
+call_method_as_cast_test/04: RuntimeError
+call_method_as_cast_test/05: RuntimeError
+call_method_function_typed_value_test/02: RuntimeError
+call_method_function_typed_value_test/04: RuntimeError
+call_method_function_typed_value_test/06: RuntimeError
+call_method_function_typed_value_test/08: RuntimeError
+call_method_is_check_test/01: RuntimeError
+call_method_is_check_test/02: RuntimeError
+call_method_is_check_test/04: RuntimeError
+call_method_is_check_test/05: RuntimeError
+call_method_must_not_be_field_test/03: RuntimeError # Issue 32155
+call_method_must_not_be_getter_test/03: RuntimeError # Issue 32155
+call_with_no_such_method_test: RuntimeError
+callable_test/none: RuntimeError
+checked_setter2_test: RuntimeError # Issue 31128
+checked_setter_test: RuntimeError # Issue 31128
+const_dynamic_type_literal_test/03: Pass # but it shouldn't until we fix issue 17207
+extract_type_arguments_test: Crash # Issue 31371
+function_propagation_test: RuntimeError
+function_type_call_getter2_test/none: RuntimeError
+generic_test/01: MissingCompileTimeError # front end does not validate `extends`
+implicit_downcast_during_constructor_invocation_test: RuntimeError
+implicit_downcast_during_for_in_element_test: RuntimeError
+implicit_downcast_during_for_in_iterable_test: RuntimeError
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+implicit_downcast_during_function_literal_return_test: RuntimeError
+implicit_downcast_during_invocation_test: RuntimeError
+implicit_downcast_during_list_literal_test: RuntimeError
+implicit_downcast_during_redirecting_initializer_test: RuntimeError
+implicit_downcast_during_return_async_test: RuntimeError
+implicit_downcast_during_super_initializer_test: RuntimeError
+implicit_downcast_during_yield_star_test: RuntimeError
+implicit_downcast_during_yield_test: RuntimeError
+instantiate_tearoff_after_contravariance_check_test: RuntimeError
+instantiate_tearoff_of_call_test: RuntimeError
+instantiate_tearoff_test: RuntimeError
+mixin_type_parameter_inference_error_test/none: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/05: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/none: CompileTimeError
+mixin_type_parameter_inference_test/01: CompileTimeError
+mixin_type_parameter_inference_test/02: CompileTimeError
+mixin_type_parameter_inference_test/03: CompileTimeError
+mixin_type_parameter_inference_test/08: CompileTimeError
+mixin_type_parameter_inference_test/09: CompileTimeError
+mixin_type_parameter_inference_test/10: CompileTimeError
+mixin_type_parameter_inference_test/12: CompileTimeError
+mixin_type_parameter_inference_test/13: CompileTimeError
+mixin_type_parameter_inference_test/16: CompileTimeError
+mixin_type_parameter_inference_test/none: CompileTimeError
+partial_tearoff_instantiation_test/02: CompileTimeError
+partial_tearoff_instantiation_test/04: CompileTimeError
+partial_tearoff_instantiation_test/05: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/06: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/07: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/08: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/none: CompileTimeError
+syntax_test/62: Crash
+
+[ $compiler == dart2js && $fasta && $host_checked && $strong ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
 abstract_getter_test/01: MissingCompileTimeError
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
@@ -1392,59 +1140,117 @@
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
+assert_message_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
+async_and_or_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_catch_regression_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_syntax_test/a06a: RuntimeError
-async_await_syntax_test/b06a: RuntimeError
-async_await_syntax_test/c06a: RuntimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d06a: RuntimeError
+async_await_syntax_test/a01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a03b: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a05b: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a11c: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a11d: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a12g: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b11c: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b11d: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/b12g: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/c10a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
+async_await_syntax_test/d09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/d10a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_congruence_local_test/none: RuntimeError
-async_congruence_method_test/none: RuntimeError
-async_congruence_top_level_test: RuntimeError
-async_congruence_unnamed_test/none: RuntimeError
+async_break_in_finally_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_call_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_cascade_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_congruence_local_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_congruence_method_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_congruence_top_level_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_congruence_unnamed_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_continue_label_test/await_in_body: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_continue_label_test/await_in_condition: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_continue_label_test/await_in_init: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_continue_label_test/await_in_update: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_continue_label_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_control_structures_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_error_timing_test: RuntimeError
+async_finally_rethrow_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 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/none: RuntimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
+async_regression_23058_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_rethrow_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_return_types_test/nestedFuture: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_return_types_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_return_types_test/tooManyTypeParameters: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_return_types_test/wrongReturnType: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_star_await_pauses_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_cancel_and_throw_in_finally_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_no_cancel2_test: RuntimeError
-async_star_no_cancel_test: RuntimeError
-async_star_pause_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_cancel_while_paused_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_no_cancel2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_no_cancel_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_pause_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_star_regression_2238_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
+async_star_regression_23116_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_regression_fisk_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_star_stream_take_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_take_reyield_test: RuntimeError
+async_star_take_reyield_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_star_test/01: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
 async_star_test/02: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
 async_star_test/03: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
 async_star_test/04: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
 async_star_test/05: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
 async_star_test/none: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_switch_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_switch_test/withDefault: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_concat_test: RuntimeError
+async_this_bound_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_throw_in_catch_test/forceAwait: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_throw_in_catch_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+asyncstar_concat_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 asyncstar_throw_in_catch_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_yield_test: RuntimeError
-asyncstar_yieldstar_test: RuntimeError
-await_for_cancel_test: RuntimeError
+asyncstar_yield_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+asyncstar_yieldstar_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_and_ifnull_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_backwards_compatibility_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_exceptions_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_for_cancel_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 await_for_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_for_use_local_test: RuntimeError
+await_for_use_local_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_future_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_in_cascade_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_nonfuture_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 await_not_started_immediately_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_test: RuntimeError
+await_null_aware_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_postfix_expr_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_regression_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_started_immediately_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 bad_override_test/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
@@ -1456,9 +1262,13 @@
 bool_test: RuntimeError
 branch_canonicalization_test: RuntimeError
 branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
+call_function_apply_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
-canonical_const2_test: RuntimeError
+canonical_const2_test: RuntimeError, OK # non JS number semantics
+cha_deopt1_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+cha_deopt2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+cha_deopt3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -1466,10 +1276,14 @@
 class_literal_static_test/01: MissingCompileTimeError
 class_literal_static_test/03: MissingCompileTimeError
 class_literal_static_test/07: MissingCompileTimeError
+classes_static_method_clash_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+closure_cycles_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 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_a_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+compile_time_constant_b_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 compile_time_constant_d_test: CompileTimeError
 compile_time_constant_e_test: CompileTimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
@@ -1498,10 +1312,11 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_map4_test: RuntimeError
+const_map_test: RuntimeError
 const_redirecting_factory_test: CompileTimeError
 const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
+const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
+const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 const_types_test/34: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
@@ -1524,7 +1339,9 @@
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
 ct_const_test: CompileTimeError
+custom_await_stack_trace_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 cyclic_constructor_test/01: Crash # Issue 30856
+cyclic_default_values_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
 cyclic_type_variable_test/03: MissingCompileTimeError
@@ -1533,18 +1350,45 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_constraints_constants_test/none: RuntimeError
-deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_closurize_load_library_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constant_list_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_constants_test/default_argument2: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_constants_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_constants_test/reference_after_load: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_type_annotation_test/new: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_type_annotation_test/new_generic1: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_type_annotation_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_type_annotation_test/static_method: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_function_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_global_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_import_core_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inlined_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_load_constants_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_load_inval_code_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 deferred_load_library_wrong_args_test/01: CompileTimeError
-deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
+deferred_load_library_wrong_args_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_mixin_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_no_such_method_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
+deferred_only_constant_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_optimized_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_redirecting_factory_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_regression_22995_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_regression_28678_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_shadow_load_library_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 deferred_shared_and_unshared_classes_test: CompileTimeError
-deferred_type_dependency_test/type_annotation: RuntimeError
-double_int_to_string_test: RuntimeError
+deferred_static_seperate_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_super_dependency_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_type_dependency_test/as: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_type_dependency_test/is: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_type_dependency_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_type_dependency_test/type_annotation: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -1552,13 +1396,13 @@
 emit_const_fields_test: CompileTimeError
 enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
-expect_test: RuntimeError
+expect_test: RuntimeError, OK # Issue 13080
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
-extract_type_arguments_test: RuntimeError
+extract_type_arguments_test: RuntimeError # Issue 31371
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -1577,14 +1421,23 @@
 field_override4_test/02: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
-full_stacktrace1_test: RuntimeError
-full_stacktrace2_test: RuntimeError
-full_stacktrace3_test: RuntimeError
-function_subtype2_test: RuntimeError
+flatten_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/04: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/05: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/06: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/07: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/08: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/09: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/10: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/11: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/12: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+full_stacktrace1_test: RuntimeError # Issue 12698
+full_stacktrace2_test: RuntimeError # Issue 12698
+full_stacktrace3_test: RuntimeError # Issue 12698
+function_subtype2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_subtype3_test: RuntimeError
 function_subtype_bound_closure2_test: RuntimeError
 function_subtype_bound_closure3_test: RuntimeError
@@ -1592,7 +1445,7 @@
 function_subtype_bound_closure5_test: RuntimeError
 function_subtype_bound_closure5a_test: RuntimeError
 function_subtype_bound_closure6_test: RuntimeError
-function_subtype_bound_closure7_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+function_subtype_bound_closure7_test: RuntimeError
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
 function_subtype_cast1_test: RuntimeError
@@ -1600,9 +1453,12 @@
 function_subtype_closure0_test: RuntimeError
 function_subtype_closure1_test: RuntimeError
 function_subtype_factory1_test: RuntimeError
+function_subtype_inline0_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_subtype_inline1_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
 function_subtype_local2_test: RuntimeError
+function_subtype_local3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+function_subtype_local4_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_subtype_local5_test: RuntimeError
 function_subtype_not1_test: RuntimeError
 function_subtype_optional1_test: RuntimeError
@@ -1611,23 +1467,25 @@
 function_subtype_setter0_test: RuntimeError
 function_subtype_simple2_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
-function_type2_test: RuntimeError
+function_type2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_type_alias2_test: RuntimeError
 function_type_alias4_test: RuntimeError
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generic_async_star_test: RuntimeError
+generic_async_star_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+generic_async_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 generic_closure_test/01: RuntimeError
-generic_closure_test/none: RuntimeError
+generic_closure_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 generic_field_mixin6_test/none: RuntimeError
 generic_function_bounds_test: RuntimeError
-generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+generic_function_dcall_test: RuntimeError
 generic_function_type_as_type_argument_test/01: MissingCompileTimeError
 generic_function_type_as_type_argument_test/02: MissingCompileTimeError
 generic_function_type_as_type_argument_test/03: RuntimeError
 generic_function_type_within_type_argument_test: RuntimeError
 generic_function_typedef_test/01: RuntimeError
+generic_functions_test: Crash # Stack Overflow
 generic_instanceof2_test: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_is_check_test: RuntimeError
@@ -1643,14 +1501,15 @@
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
 generic_methods_recursive_bound_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/metadata_collector.dart': Failed assertion: line 100 pos 12: 'isBound': is not true.
 generic_methods_simple_as_expression_test/02: MissingRuntimeError
-generic_methods_tearoff_specialization_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+generic_methods_tearoff_specialization_test: RuntimeError
+generic_methods_test: Crash # Stack Overflow
 generic_methods_type_expression_test: RuntimeError
 generic_methods_unused_parameter_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 generic_no_such_method_dispatcher_simple_test: CompileTimeError
 generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: CompileTimeError
 generic_test: RuntimeError
-generic_typedef_test: RuntimeError
+generic_typedef_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
@@ -1658,7 +1517,7 @@
 getter_override_test/03: MissingCompileTimeError
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/none: RuntimeError
-identical_closure2_test: RuntimeError
+identical_closure2_test: RuntimeError # non JS number semantics
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
@@ -1670,7 +1529,7 @@
 implicit_this_test/01: MissingCompileTimeError
 implicit_this_test/04: MissingCompileTimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinity_test: RuntimeError
+infinity_test: RuntimeError # non JS number semantics - Issue 4984
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: RuntimeError
@@ -1687,20 +1546,21 @@
 int64_literal_test/30: MissingCompileTimeError
 int64_literal_test/40: RuntimeError
 int64_literal_test/none: RuntimeError
-integer_division_by_zero_test: RuntimeError
+integer_division_by_zero_test: RuntimeError # Issue 8301
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: RuntimeError # mirrors not supported
 invocation_mirror_invoke_on2_test: RuntimeError
 invocation_mirror_invoke_on_test: RuntimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: RuntimeError
-issue23244_test: RuntimeError
+issue23244_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-known_identifier_usage_error_test/none: RuntimeError
-left_shift_test: RuntimeError
+issue_1751477_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+known_identifier_usage_error_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
@@ -1708,10 +1568,19 @@
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/none: RuntimeError
-main_test/03: RuntimeError
-main_test/20: RuntimeError
-main_test/22: RuntimeError
-main_test/44: RuntimeError
+main_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/04: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/05: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/20: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/21: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/22: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/41: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/42: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/43: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/44: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/45: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 malbounded_instantiation_test/01: MissingCompileTimeError
 malbounded_instantiation_test/02: MissingCompileTimeError
 malbounded_instantiation_test/03: MissingCompileTimeError
@@ -1729,6 +1598,7 @@
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
+many_named_arguments_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 many_overridden_no_such_method_test: RuntimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal3_test/01: MissingCompileTimeError
@@ -1743,7 +1613,7 @@
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError
 minify_closure_variable_collision_test: CompileTimeError
-mint_arithmetic_test: RuntimeError
+mint_arithmetic_test: RuntimeError # non JS number semantics
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1841,7 +1711,7 @@
 mixin_type_parameters_errors_test/03: MissingCompileTimeError
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
-modulo_test: RuntimeError
+modulo_test: RuntimeError # non JS number semantics
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
@@ -1851,7 +1721,7 @@
 named_constructor_test/01: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
 named_parameters_default_eq_test/none: RuntimeError
-nan_identical_test: RuntimeError
+nan_identical_test: RuntimeError # Issue 11551
 nested_generic_closure_test: RuntimeError
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
@@ -1862,7 +1732,7 @@
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
-numbers_test: RuntimeError
+numbers_test: RuntimeError, OK # non JS number semantics
 operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 operator4_test: RuntimeError
 operator_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
@@ -1936,16 +1806,31 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError
+reg_exp_test: RuntimeError
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
+regress_22443_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_22445_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_22579_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_22728_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_22777_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
-regress_23996_test: RuntimeError
-regress_24283_test: RuntimeError
-regress_24935_test/none: RuntimeError
+regress_23498_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_23500_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_23500_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_23500_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_23996_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_24283_test: RuntimeError # non JS number semantics
+regress_24935_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_24935_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_26175_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
+regress_26668_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_26948_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
+regress_27659_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_28255_test: RuntimeError
+regress_28278_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
@@ -1959,11 +1844,11 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-shadow_parameter_and_local_test: RuntimeError
+shadow_parameter_and_local_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
-stacktrace_rethrow_error_test/none: RuntimeError
-stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
-stacktrace_rethrow_nonerror_test: RuntimeError
+stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
+stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
+stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
 string_interpolate_test: CompileTimeError
 string_interpolation_and_buffer_test: RuntimeError
@@ -1972,6 +1857,12 @@
 super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
+super_in_async1_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+super_in_async2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+super_in_async3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+super_in_async4_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+super_in_async5_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+super_in_async6_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 super_no_such_method1_test: CompileTimeError
 super_no_such_method2_test: CompileTimeError
 super_no_such_method3_test: CompileTimeError
@@ -1989,6 +1880,8 @@
 switch_case_test/02: MissingCompileTimeError
 sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
+sync_generator2_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+syncstar_yieldstar_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 syntax_test/04: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/05: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/06: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
@@ -2018,7 +1911,7 @@
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
 tearoff_dynamic_test: RuntimeError
-truncdiv_test: RuntimeError
+truncdiv_test: RuntimeError # non JS number semantics - Issue 15246
 try_catch_test/01: MissingCompileTimeError
 type_error_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
@@ -2045,9 +1938,12 @@
 type_variable_bounds_test/06: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
+type_variable_closure_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+type_variable_function_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 type_variable_promotion_test: RuntimeError
 typedef_is_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
+unused_overridden_async_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 vm/async_await_catch_stacktrace_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/await_synchronous_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/causal_async_exception_stack2_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
@@ -2055,18 +1951,22 @@
 vm/debug_break_enabled_vm_test/01: CompileTimeError
 vm/debug_break_enabled_vm_test/none: CompileTimeError
 vm/integer_type_propagation_test: RuntimeError
+vm/load_to_load_forwarding_vm_test: RuntimeError
+vm/load_to_load_unaligned_forwarding_vm_test: RuntimeError
 vm/math_vm_test: RuntimeError
 vm/no_such_args_error_message_vm_test: RuntimeError
 vm/no_such_method_error_message_callable_vm_test: RuntimeError
 vm/no_such_method_error_message_vm_test: RuntimeError
 vm/optimization_test: RuntimeError
+vm/optimized_await_regress_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 vm/optimized_guarded_field_isolates_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/optimized_list_constructor_test: RuntimeError
 vm/reflect_core_vm_test: RuntimeError
 vm/regress_22480_test: RuntimeError
 vm/regress_23238_test: RuntimeError
 vm/regress_27201_test: CompileTimeError
-vm/regress_28325_test: RuntimeError
+vm/regress_28325_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+vm/regress_29145_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 vm/store_to_load_forwarding_phis_vm_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/type_cast_vm_test: RuntimeError
 vm/type_vm_test/28: MissingRuntimeError
@@ -2116,9 +2016,9 @@
 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.
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
-yieldstar_pause_test: RuntimeError
+yieldstar_pause_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
+[ $compiler == dart2js && $fasta && $minified && $strong ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
 abstract_getter_test/01: MissingCompileTimeError
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
@@ -2132,56 +2032,113 @@
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
+async_and_or_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_catch_regression_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_syntax_test/a06a: RuntimeError
-async_await_syntax_test/b06a: RuntimeError
-async_await_syntax_test/c06a: RuntimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d06a: RuntimeError
+async_await_syntax_test/a01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a03b: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a05b: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a11c: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a11d: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a12g: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b11c: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b11d: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/b12g: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/c10a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
+async_await_syntax_test/d09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/d10a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_congruence_local_test/none: RuntimeError
-async_congruence_method_test/none: RuntimeError
-async_congruence_top_level_test: RuntimeError
-async_congruence_unnamed_test/none: RuntimeError
+async_break_in_finally_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_call_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_cascade_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_congruence_local_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_congruence_method_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_congruence_top_level_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_congruence_unnamed_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_continue_label_test/await_in_body: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_continue_label_test/await_in_condition: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_continue_label_test/await_in_init: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_continue_label_test/await_in_update: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_continue_label_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_control_structures_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_error_timing_test: RuntimeError
+async_finally_rethrow_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 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/none: RuntimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
+async_regression_23058_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_rethrow_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_return_types_test/nestedFuture: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_return_types_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_return_types_test/tooManyTypeParameters: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_return_types_test/wrongReturnType: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_star_await_pauses_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_cancel_and_throw_in_finally_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_no_cancel2_test: RuntimeError
-async_star_no_cancel_test: RuntimeError
-async_star_pause_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_cancel_while_paused_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_no_cancel2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_no_cancel_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_pause_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_star_regression_2238_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
+async_star_regression_23116_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_regression_fisk_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_star_stream_take_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_take_reyield_test: RuntimeError
+async_star_take_reyield_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_star_test/01: Crash # Wrong number of template arguments, given 2, expected 1
 async_star_test/02: Crash # Wrong number of template arguments, given 2, expected 1
 async_star_test/03: Crash # Wrong number of template arguments, given 2, expected 1
 async_star_test/04: Crash # Wrong number of template arguments, given 2, expected 1
 async_star_test/05: Crash # Wrong number of template arguments, given 2, expected 1
 async_star_test/none: Crash # Wrong number of template arguments, given 2, expected 1
+async_switch_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_switch_test/withDefault: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_concat_test: RuntimeError
+async_this_bound_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_throw_in_catch_test/forceAwait: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_throw_in_catch_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+asyncstar_concat_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 asyncstar_throw_in_catch_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_yield_test: RuntimeError
-asyncstar_yieldstar_test: RuntimeError
-await_for_cancel_test: RuntimeError
+asyncstar_yield_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+asyncstar_yieldstar_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_and_ifnull_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_backwards_compatibility_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_exceptions_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_for_cancel_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 await_for_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_for_use_local_test: RuntimeError
+await_for_use_local_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_in_cascade_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_nonfuture_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 await_not_started_immediately_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_test: RuntimeError
+await_null_aware_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_postfix_expr_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_regression_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_started_immediately_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 bad_override_test/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
@@ -2194,7 +2151,10 @@
 branch_canonicalization_test: RuntimeError
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
-canonical_const2_test: RuntimeError
+canonical_const2_test: RuntimeError, OK # non JS number semantics
+cha_deopt1_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+cha_deopt2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+cha_deopt3_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -2233,10 +2193,11 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_map4_test: RuntimeError
+const_map_test: RuntimeError
 const_redirecting_factory_test: CompileTimeError
 const_switch2_test/01: MissingCompileTimeError
-const_switch_test/02: RuntimeError
-const_switch_test/04: RuntimeError
+const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
+const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 const_types_test/34: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
@@ -2259,6 +2220,7 @@
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
 ct_const_test: CompileTimeError
+custom_await_stack_trace_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 cyclic_constructor_test/01: Crash # Issue 30856
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
@@ -2268,18 +2230,45 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_constraints_constants_test/none: RuntimeError
-deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_closurize_load_library_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constant_list_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_constants_test/default_argument2: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_constants_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_constants_test/reference_after_load: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_type_annotation_test/new: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_type_annotation_test/new_generic1: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_type_annotation_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_type_annotation_test/static_method: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_function_type_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_global_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_import_core_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inlined_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_load_constants_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_load_inval_code_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 deferred_load_library_wrong_args_test/01: CompileTimeError
-deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
+deferred_load_library_wrong_args_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_mixin_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_no_such_method_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
+deferred_only_constant_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_optimized_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_redirecting_factory_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_regression_22995_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_regression_28678_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_shadow_load_library_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 deferred_shared_and_unshared_classes_test: CompileTimeError
-deferred_type_dependency_test/type_annotation: RuntimeError
-double_int_to_string_test: RuntimeError
+deferred_static_seperate_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_super_dependency_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_type_dependency_test/as: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_type_dependency_test/is: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_type_dependency_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_type_dependency_test/type_annotation: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -2287,14 +2276,14 @@
 emit_const_fields_test: CompileTimeError
 enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
-expect_test: RuntimeError
+expect_test: RuntimeError, OK # Issue 13080
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
-extract_type_arguments_test: RuntimeError
-f_bounded_quantification4_test: RuntimeError
+extract_type_arguments_test: RuntimeError # Issue 31371
+f_bounded_quantification4_test: RuntimeError # Issue 12605
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -2313,10 +2302,19 @@
 field_override4_test/02: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
+flatten_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/02: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/03: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/04: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/05: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/06: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/07: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/08: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/09: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/10: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/11: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/12: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
@@ -2353,7 +2351,8 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generic_async_star_test: RuntimeError
+generic_async_star_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+generic_async_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 generic_field_mixin6_test/none: RuntimeError
 generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: RuntimeError
@@ -2362,6 +2361,7 @@
 generic_function_type_as_type_argument_test/03: RuntimeError
 generic_function_type_within_type_argument_test: RuntimeError
 generic_function_typedef_test/01: RuntimeError
+generic_functions_test: Crash # Stack Overflow
 generic_instanceof2_test: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_is_check_test: RuntimeError
@@ -2378,8 +2378,9 @@
 generic_methods_recursive_bound_test/03: Crash # NoSuchMethodError: The method 'markSeen' was called on null.
 generic_methods_simple_as_expression_test/02: MissingRuntimeError
 generic_methods_tearoff_specialization_test: RuntimeError
+generic_methods_test: Crash # Stack Overflow
 generic_methods_type_expression_test: RuntimeError
-generic_methods_unused_parameter_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [Instance of 'LiteralNull', null]
+generic_methods_unused_parameter_test: RuntimeError
 generic_no_such_method_dispatcher_simple_test: CompileTimeError
 generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: CompileTimeError
@@ -2391,7 +2392,7 @@
 getter_override_test/03: MissingCompileTimeError
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/none: RuntimeError
-identical_closure2_test: RuntimeError
+identical_closure2_test: RuntimeError # non JS number semantics
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
@@ -2403,7 +2404,7 @@
 implicit_this_test/01: MissingCompileTimeError
 implicit_this_test/04: MissingCompileTimeError
 inferrer_synthesized_constructor_test: RuntimeError
-infinity_test: RuntimeError
+infinity_test: RuntimeError # non JS number semantics - Issue 4984
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: RuntimeError
@@ -2418,21 +2419,22 @@
 int64_literal_test/30: MissingCompileTimeError
 int64_literal_test/40: RuntimeError
 int64_literal_test/none: RuntimeError
-integer_division_by_zero_test: RuntimeError
+integer_division_by_zero_test: RuntimeError # Issue 8301
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: RuntimeError # mirrors not supported
 invocation_mirror_invoke_on2_test: RuntimeError
 invocation_mirror_invoke_on_test: RuntimeError
 invocation_mirror_test: RuntimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: RuntimeError
-issue23244_test: RuntimeError
+issue23244_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-known_identifier_usage_error_test/none: RuntimeError
-left_shift_test: RuntimeError
+issue_1751477_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+known_identifier_usage_error_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
@@ -2475,11 +2477,11 @@
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError
 minify_closure_variable_collision_test: CompileTimeError
-mint_arithmetic_test: RuntimeError
+mint_arithmetic_test: RuntimeError # non JS number semantics
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
-mixin_generic_test: RuntimeError
+mixin_generic_test: RuntimeError # Issue 12605
 mixin_illegal_super_use_test/01: MissingCompileTimeError
 mixin_illegal_super_use_test/04: MissingCompileTimeError
 mixin_illegal_super_use_test/07: MissingCompileTimeError
@@ -2576,8 +2578,8 @@
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
 mock_writable_final_field_test: RuntimeError # Issue 30847
-mock_writable_final_private_field_test: RuntimeError # Issue 30847
-modulo_test: RuntimeError
+mock_writable_final_private_field_test: RuntimeError # Issue 17526, 30847
+modulo_test: RuntimeError # non JS number semantics
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
@@ -2587,7 +2589,7 @@
 named_constructor_test/01: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
 named_parameters_default_eq_test/none: RuntimeError
-nan_identical_test: RuntimeError
+nan_identical_test: RuntimeError # Issue 11551
 nested_generic_closure_test: RuntimeError
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
@@ -2599,7 +2601,7 @@
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
-numbers_test: RuntimeError
+numbers_test: RuntimeError, OK # non JS number semantics
 operator4_test: RuntimeError
 overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
@@ -2664,17 +2666,32 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError
+reg_exp_test: RuntimeError
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
-regress_21795_test: RuntimeError
+regress_21795_test: RuntimeError # Issue 12605
+regress_22443_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_22445_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_22579_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_22728_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_22777_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
-regress_23996_test: RuntimeError
+regress_23498_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_23500_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_23500_test/02: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_23500_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_23996_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_24283_test: RuntimeError, OK # Requires 64 bit numbers.
-regress_24935_test/none: RuntimeError
+regress_24935_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_24935_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_26175_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
+regress_26668_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_26948_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
+regress_27659_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_28255_test: RuntimeError
+regress_28278_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Issue 29784
@@ -2688,8 +2705,8 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-shadow_parameter_and_local_test: RuntimeError
-stack_trace_test: RuntimeError
+shadow_parameter_and_local_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+stack_trace_test: RuntimeError, OK # Stack trace not preserved in minified code.
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
@@ -2702,6 +2719,12 @@
 super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
+super_in_async1_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+super_in_async2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+super_in_async3_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+super_in_async4_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+super_in_async5_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+super_in_async6_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 super_no_such_method1_test: CompileTimeError
 super_no_such_method2_test: CompileTimeError
 super_no_such_method3_test: CompileTimeError
@@ -2717,7 +2740,9 @@
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
-symbol_conflict_test: RuntimeError
+symbol_conflict_test: RuntimeError # Issue 23857
+sync_generator2_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+syncstar_yieldstar_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -2725,7 +2750,7 @@
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
 tearoff_dynamic_test: RuntimeError
-truncdiv_test: RuntimeError
+truncdiv_test: RuntimeError # non JS number semantics - Issue 15246
 try_catch_test/01: MissingCompileTimeError
 type_error_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
@@ -2755,6 +2780,7 @@
 type_variable_promotion_test: RuntimeError
 typedef_is_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
+unused_overridden_async_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/async_await_catch_stacktrace_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/await_synchronous_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/causal_async_exception_stack2_test: Crash # Wrong number of template arguments, given 2, expected 1
@@ -2762,18 +2788,22 @@
 vm/debug_break_enabled_vm_test/01: CompileTimeError
 vm/debug_break_enabled_vm_test/none: CompileTimeError
 vm/integer_type_propagation_test: RuntimeError
+vm/load_to_load_forwarding_vm_test: RuntimeError
+vm/load_to_load_unaligned_forwarding_vm_test: RuntimeError
 vm/math_vm_test: RuntimeError
 vm/no_such_args_error_message_vm_test: RuntimeError
 vm/no_such_method_error_message_callable_vm_test: RuntimeError
 vm/no_such_method_error_message_vm_test: RuntimeError
 vm/optimization_test: RuntimeError
+vm/optimized_await_regress_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/optimized_guarded_field_isolates_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/optimized_list_constructor_test: RuntimeError
 vm/reflect_core_vm_test: RuntimeError
 vm/regress_22480_test: RuntimeError
 vm/regress_23238_test: RuntimeError
 vm/regress_27201_test: CompileTimeError
-vm/regress_28325_test: RuntimeError
+vm/regress_28325_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+vm/regress_29145_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/store_to_load_forwarding_phis_vm_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/type_cast_vm_test: RuntimeError
 vm/type_vm_test/28: MissingRuntimeError
@@ -2787,1028 +2817,13 @@
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
-yieldstar_pause_test: RuntimeError
+yieldstar_pause_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 
-[ $compiler == dart2js && $dart2js_with_kernel && !$strong ]
+[ $compiler == dart2js && $fasta && !$strong ]
 *: SkipByDesign
 
-[ $compiler == dart2js && !$dart2js_with_kernel ]
-abstract_beats_arguments_test: MissingCompileTimeError
-abstract_exact_selector_test/01: MissingCompileTimeError
-abstract_factory_constructor_test/00: MissingCompileTimeError
-abstract_getter_test/01: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
-abstract_syntax_test/00: MissingCompileTimeError
-accessor_conflict_export2_test: Crash # Issue 25626
-accessor_conflict_export_test: Crash # Issue 25626
-additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
-argument_assignability_function_typed_test/01: MissingCompileTimeError
-argument_assignability_function_typed_test/02: MissingCompileTimeError
-argument_assignability_function_typed_test/03: RuntimeError
-argument_assignability_function_typed_test/04: RuntimeError
-argument_assignability_function_typed_test/05: RuntimeError
-assertion_initializer_const_error2_test/*: Crash # Issue 30038
-assertion_initializer_const_error2_test/none: Pass
-assertion_initializer_test: Crash
-assign_static_type_test/01: MissingCompileTimeError
-assign_static_type_test/02: MissingCompileTimeError
-assign_static_type_test/03: MissingCompileTimeError
-assign_static_type_test/04: MissingCompileTimeError
-assign_static_type_test/05: MissingCompileTimeError
-assign_static_type_test/06: MissingCompileTimeError
-assign_to_type_test/01: MissingCompileTimeError
-assign_to_type_test/02: MissingCompileTimeError
-assign_to_type_test/03: MissingCompileTimeError
-assign_to_type_test/04: MissingCompileTimeError
-assign_top_method_test: MissingCompileTimeError
-async_await_syntax_test/a10a: MissingCompileTimeError
-async_await_syntax_test/b10a: MissingCompileTimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
-async_congruence_local_test/01: MissingCompileTimeError
-async_congruence_local_test/02: MissingCompileTimeError
-async_congruence_local_test/none: RuntimeError
-async_congruence_method_test/01: MissingCompileTimeError
-async_congruence_method_test/none: RuntimeError
-async_congruence_top_level_test: RuntimeError
-async_congruence_unnamed_test/01: MissingCompileTimeError
-async_congruence_unnamed_test/02: MissingCompileTimeError
-async_congruence_unnamed_test/none: RuntimeError
-async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_return_types_test/nestedFuture: MissingCompileTimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
-async_return_types_test/wrongTypeParameter: MissingCompileTimeError
-bad_constructor_test/05: CompileTimeError
-bad_named_parameters2_test/01: MissingCompileTimeError
-bad_named_parameters_test/01: MissingCompileTimeError
-bad_named_parameters_test/02: MissingCompileTimeError
-bad_named_parameters_test/03: MissingCompileTimeError
-bad_named_parameters_test/04: MissingCompileTimeError
-bad_named_parameters_test/05: MissingCompileTimeError
-bad_override_test/01: MissingCompileTimeError
-bad_override_test/02: MissingCompileTimeError
-bad_override_test/06: MissingCompileTimeError
-bad_typedef_test/00: Crash # Issue 28214
-bug31436_test: RuntimeError
-bug32353_test: CompileTimeError
-built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
-call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
-call_function_apply_test: RuntimeError # Issue 23873
-call_non_method_field_test/01: MissingCompileTimeError
-call_non_method_field_test/02: MissingCompileTimeError
-call_nonexistent_constructor_test/01: MissingCompileTimeError
-call_nonexistent_constructor_test/02: MissingCompileTimeError
-call_nonexistent_static_test/01: MissingCompileTimeError
-call_nonexistent_static_test/02: MissingCompileTimeError
-call_nonexistent_static_test/03: MissingCompileTimeError
-call_nonexistent_static_test/04: MissingCompileTimeError
-call_nonexistent_static_test/05: MissingCompileTimeError
-call_nonexistent_static_test/06: MissingCompileTimeError
-call_nonexistent_static_test/07: MissingCompileTimeError
-call_nonexistent_static_test/08: MissingCompileTimeError
-call_nonexistent_static_test/09: MissingCompileTimeError
-call_nonexistent_static_test/10: MissingCompileTimeError
-call_through_getter_test/01: MissingCompileTimeError
-call_through_getter_test/02: MissingCompileTimeError
-call_type_literal_test: RuntimeError
-call_type_literal_test/01: MissingCompileTimeError
-callable_test/00: MissingCompileTimeError
-callable_test/01: MissingCompileTimeError
-canonical_const2_test: RuntimeError, OK # Issue 1533
-cast_test/04: MissingCompileTimeError
-cast_test/05: MissingCompileTimeError
-check_member_static_test/01: MissingCompileTimeError
-check_method_override_test/01: MissingCompileTimeError
-check_method_override_test/02: MissingCompileTimeError
-checked_null_test/01: MissingCompileTimeError
-checked_setter3_test/01: MissingCompileTimeError
-checked_setter3_test/02: MissingCompileTimeError
-checked_setter3_test/03: MissingCompileTimeError
-class_literal_static_test/none: RuntimeError
-class_literal_test/01: MissingCompileTimeError
-class_literal_test/02: MissingCompileTimeError
-class_literal_test/03: MissingCompileTimeError
-class_literal_test/04: MissingCompileTimeError
-class_literal_test/05: MissingCompileTimeError
-class_literal_test/06: MissingCompileTimeError
-class_literal_test/07: MissingCompileTimeError
-class_literal_test/08: MissingCompileTimeError
-class_literal_test/09: MissingCompileTimeError
-class_literal_test/10: MissingCompileTimeError
-class_literal_test/11: MissingCompileTimeError
-class_literal_test/12: MissingCompileTimeError
-class_literal_test/13: MissingCompileTimeError
-class_literal_test/14: MissingCompileTimeError
-class_literal_test/15: MissingCompileTimeError
-class_literal_test/16: MissingCompileTimeError
-class_literal_test/17: MissingCompileTimeError
-class_literal_test/18: MissingCompileTimeError
-class_literal_test/19: MissingCompileTimeError
-class_literal_test/20: MissingCompileTimeError
-class_literal_test/21: MissingCompileTimeError
-class_literal_test/22: MissingCompileTimeError
-class_literal_test/23: MissingCompileTimeError
-class_literal_test/24: MissingCompileTimeError
-class_literal_test/25: MissingCompileTimeError
-class_literal_test/none: RuntimeError
-closure_param_null_to_object_test: RuntimeError
-compile_time_constant_o_test/01: MissingCompileTimeError
-compile_time_constant_o_test/02: MissingCompileTimeError
-conditional_method_invocation_test/05: MissingCompileTimeError
-conditional_method_invocation_test/06: MissingCompileTimeError
-conditional_method_invocation_test/07: MissingCompileTimeError
-conditional_method_invocation_test/08: MissingCompileTimeError
-conditional_method_invocation_test/12: MissingCompileTimeError
-conditional_method_invocation_test/13: MissingCompileTimeError
-conditional_method_invocation_test/18: MissingCompileTimeError
-conditional_method_invocation_test/19: MissingCompileTimeError
-conditional_property_access_test/04: MissingCompileTimeError
-conditional_property_access_test/05: MissingCompileTimeError
-conditional_property_access_test/06: MissingCompileTimeError
-conditional_property_access_test/10: MissingCompileTimeError
-conditional_property_access_test/11: MissingCompileTimeError
-conditional_property_access_test/16: MissingCompileTimeError
-conditional_property_access_test/17: MissingCompileTimeError
-conditional_property_assignment_test/04: MissingCompileTimeError
-conditional_property_assignment_test/05: MissingCompileTimeError
-conditional_property_assignment_test/06: MissingCompileTimeError
-conditional_property_assignment_test/10: MissingCompileTimeError
-conditional_property_assignment_test/11: MissingCompileTimeError
-conditional_property_assignment_test/12: MissingCompileTimeError
-conditional_property_assignment_test/13: MissingCompileTimeError
-conditional_property_assignment_test/27: MissingCompileTimeError
-conditional_property_assignment_test/28: MissingCompileTimeError
-conditional_property_assignment_test/32: MissingCompileTimeError
-conditional_property_assignment_test/33: MissingCompileTimeError
-conditional_property_assignment_test/34: MissingCompileTimeError
-conditional_property_assignment_test/35: MissingCompileTimeError
-conditional_property_increment_decrement_test/04: MissingCompileTimeError
-conditional_property_increment_decrement_test/08: MissingCompileTimeError
-conditional_property_increment_decrement_test/12: MissingCompileTimeError
-conditional_property_increment_decrement_test/16: MissingCompileTimeError
-conditional_property_increment_decrement_test/21: MissingCompileTimeError
-conditional_property_increment_decrement_test/22: MissingCompileTimeError
-conditional_property_increment_decrement_test/27: MissingCompileTimeError
-conditional_property_increment_decrement_test/28: MissingCompileTimeError
-conditional_property_increment_decrement_test/33: MissingCompileTimeError
-conditional_property_increment_decrement_test/34: MissingCompileTimeError
-conditional_property_increment_decrement_test/39: MissingCompileTimeError
-conditional_property_increment_decrement_test/40: MissingCompileTimeError
-const_constructor2_test/05: MissingCompileTimeError
-const_constructor2_test/06: MissingCompileTimeError
-const_dynamic_type_literal_test/03: CompileTimeError # Issue 23009
-const_switch_test/02: RuntimeError # Issue 17960
-const_switch_test/04: RuntimeError # Issue 17960
-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
-constructor13_test/01: MissingCompileTimeError
-constructor13_test/02: MissingCompileTimeError
-constructor_call_as_function_test: RuntimeError
-constructor_call_as_function_test/01: MissingCompileTimeError
-covariance_type_parameter_test/01: RuntimeError
-covariance_type_parameter_test/02: RuntimeError
-covariance_type_parameter_test/03: RuntimeError
-create_unresolved_type_test/01: MissingCompileTimeError
-cyclic_type_variable_test/01: MissingCompileTimeError
-cyclic_type_variable_test/02: MissingCompileTimeError
-cyclic_type_variable_test/03: MissingCompileTimeError
-cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/13: MissingCompileTimeError
-default_factory2_test/01: MissingCompileTimeError
-default_factory_test/01: MissingCompileTimeError
-deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
-deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deferred_not_loaded_check_test: Fail # Issue 27577
-double_int_to_string_test: RuntimeError # Issue 1533
-dynamic_field_test/01: MissingCompileTimeError
-dynamic_field_test/02: MissingCompileTimeError
-dynamic_prefix_core_test/01: MissingCompileTimeError
-empty_block_case_test: MissingCompileTimeError
-enum_private_test/02: MissingCompileTimeError
-enum_test: Fail # Issue 28340
-error_stacktrace_test/00: MissingCompileTimeError
-example_constructor_test: RuntimeError
-expect_test: RuntimeError, OK # Issue 13080
-external_test/10: CompileTimeError # Issue 12887
-external_test/13: CompileTimeError # Issue 12887
-external_test/20: CompileTimeError # Issue 12887
-external_test/21: CompileTimeError
-external_test/24: CompileTimeError
-extract_type_arguments_test: RuntimeError # Issue 31371
-f_bounded_quantification_test/01: MissingCompileTimeError
-f_bounded_quantification_test/02: MissingCompileTimeError
-factory1_test/00: MissingCompileTimeError
-factory1_test/01: MissingCompileTimeError
-factory2_test/03: MissingCompileTimeError
-factory2_test/none: MissingCompileTimeError
-factory3_test/none: MissingCompileTimeError
-factory4_test/00: MissingCompileTimeError
-factory5_test/00: MissingCompileTimeError
-factory6_test/00: MissingCompileTimeError
-factory_redirection_test/01: MissingCompileTimeError
-factory_redirection_test/02: MissingCompileTimeError
-factory_redirection_test/03: MissingCompileTimeError
-factory_redirection_test/05: MissingCompileTimeError
-factory_redirection_test/06: MissingCompileTimeError
-factory_redirection_test/08: MissingCompileTimeError
-factory_redirection_test/09: MissingCompileTimeError
-factory_redirection_test/10: MissingCompileTimeError
-factory_redirection_test/11: MissingCompileTimeError
-factory_redirection_test/12: MissingCompileTimeError
-factory_redirection_test/13: MissingCompileTimeError
-factory_redirection_test/14: MissingCompileTimeError
-factory_redirection_test/none: MissingCompileTimeError
-factory_return_type_checked_test/00: MissingCompileTimeError
-field3_test/01: MissingCompileTimeError
-field_initialization_order_test/01: MissingCompileTimeError
-field_initialization_order_test/none: RuntimeError
-field_method4_test: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
-field_override_test/02: MissingCompileTimeError
-field_override_test/none: MissingCompileTimeError
-field_type_check_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test.dart: Skip # Issue 29659
-final_field_override_test: RuntimeError
-final_for_in_variable_test: MissingCompileTimeError
-final_param_test: MissingCompileTimeError
-final_super_field_set_test: MissingCompileTimeError
-final_syntax_test/10: MissingCompileTimeError
-final_variable_assignment_test/01: MissingCompileTimeError
-final_variable_assignment_test/02: MissingCompileTimeError
-final_variable_assignment_test/03: MissingCompileTimeError
-final_variable_assignment_test/04: MissingCompileTimeError
-first_class_types_literals_test/03: MissingCompileTimeError
-first_class_types_literals_test/04: MissingCompileTimeError
-first_class_types_literals_test/05: MissingCompileTimeError
-first_class_types_literals_test/06: MissingCompileTimeError
-first_class_types_literals_test/07: MissingCompileTimeError
-first_class_types_literals_test/08: MissingCompileTimeError
-first_class_types_literals_test/09: MissingCompileTimeError
-first_class_types_literals_test/10: MissingCompileTimeError
-first_class_types_literals_test/11: MissingCompileTimeError
-first_class_types_literals_test/12: MissingCompileTimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
-for_in3_test: MissingCompileTimeError
-for_in_side_effects_test/01: MissingCompileTimeError
-full_stacktrace1_test: Pass, RuntimeError # Issue 12698
-full_stacktrace2_test: Pass, RuntimeError # Issue 12698
-full_stacktrace3_test: Pass, RuntimeError # Issue 12698
-function_malformed_result_type_test/00: MissingCompileTimeError
-function_type_call_getter2_test/00: MissingCompileTimeError
-function_type_call_getter2_test/01: MissingCompileTimeError
-function_type_call_getter2_test/02: MissingCompileTimeError
-function_type_call_getter2_test/03: MissingCompileTimeError
-function_type_call_getter2_test/04: MissingCompileTimeError
-function_type_call_getter2_test/05: MissingCompileTimeError
-fuzzy_arrows_test/01: MissingCompileTimeError
-fuzzy_arrows_test/03: RuntimeError
-generalized_void_syntax_test: CompileTimeError # Issue #30176.
-generic_constructor_mixin2_test/01: MissingCompileTimeError
-generic_constructor_mixin3_test/01: MissingCompileTimeError
-generic_constructor_mixin_test/01: MissingCompileTimeError
-generic_field_mixin4_test: Crash # Issue 18651
-generic_field_mixin5_test: Crash # Issue 18651
-generic_field_mixin6_test/01: MissingCompileTimeError
-generic_function_bounds_test: RuntimeError
-generic_function_dcall_test: RuntimeError
-generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30930
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30930
-generic_function_typedef2_test/00: MissingCompileTimeError # Issue 28214
-generic_function_typedef2_test/01: MissingCompileTimeError # Issue 28214
-generic_function_typedef2_test/02: MissingCompileTimeError # Issue 28214
-generic_function_typedef2_test/03: MissingCompileTimeError # Issue 28214
-generic_function_typedef2_test/04: MissingCompileTimeError
-generic_function_typedef2_test/05: Crash # Issue 28214
-generic_function_typedef2_test/06: Crash # Issue 28214
-generic_method_types_test/01: RuntimeError
-generic_method_types_test/02: RuntimeError
-generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_closure_test: RuntimeError
-generic_methods_dynamic_test/01: MissingCompileTimeError
-generic_methods_dynamic_test/02: MissingRuntimeError
-generic_methods_dynamic_test/03: MissingCompileTimeError
-generic_methods_dynamic_test/04: MissingRuntimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
-generic_methods_generic_function_result_test/01: MissingCompileTimeError # Issue #30208
-generic_methods_local_variable_declaration_test: RuntimeError
-generic_methods_named_parameters_test: RuntimeError
-generic_methods_new_test: RuntimeError
-generic_methods_optional_parameters_test: RuntimeError
-generic_methods_overriding_test/01: MissingCompileTimeError
-generic_methods_overriding_test/03: MissingCompileTimeError
-generic_methods_recursive_bound_test/02: MissingCompileTimeError
-generic_methods_reuse_type_variables_test: RuntimeError
-generic_methods_shadowing_test: RuntimeError
-generic_methods_simple_as_expression_test/02: MissingRuntimeError
-generic_methods_simple_is_expression_test: RuntimeError
-generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_type_expression_test: RuntimeError
-generic_methods_unused_parameter_test: RuntimeError
-generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
-generic_no_such_method_dispatcher_test: RuntimeError
-generic_tearoff_test: RuntimeError
-getter_no_setter2_test/00: MissingCompileTimeError
-getter_no_setter2_test/01: MissingCompileTimeError
-getter_no_setter2_test/03: MissingCompileTimeError
-getter_no_setter_test/00: MissingCompileTimeError
-getter_no_setter_test/01: MissingCompileTimeError
-getter_no_setter_test/03: MissingCompileTimeError
-getter_override_test/03: MissingCompileTimeError
-getter_setter_in_lib_test: Fail # Issue 23288
-getters_setters2_test/02: MissingCompileTimeError
-identical_closure2_test: RuntimeError # Issue 1533, Issue 12596
-identical_const_test/01: MissingCompileTimeError
-identical_const_test/02: MissingCompileTimeError
-identical_const_test/03: MissingCompileTimeError
-identical_const_test/04: MissingCompileTimeError
-if_null_assignment_behavior_test/03: MissingCompileTimeError
-if_null_assignment_behavior_test/13: MissingCompileTimeError, Crash # Issue 23491
-if_null_assignment_behavior_test/14: Crash # Issue 23491
-if_null_assignment_behavior_test/15: MissingCompileTimeError
-if_null_assignment_static_test/02: MissingCompileTimeError
-if_null_assignment_static_test/04: MissingCompileTimeError
-if_null_assignment_static_test/06: MissingCompileTimeError
-if_null_assignment_static_test/07: MissingCompileTimeError
-if_null_assignment_static_test/09: MissingCompileTimeError
-if_null_assignment_static_test/11: MissingCompileTimeError
-if_null_assignment_static_test/13: MissingCompileTimeError
-if_null_assignment_static_test/14: MissingCompileTimeError
-if_null_assignment_static_test/16: MissingCompileTimeError
-if_null_assignment_static_test/18: MissingCompileTimeError
-if_null_assignment_static_test/20: MissingCompileTimeError
-if_null_assignment_static_test/21: MissingCompileTimeError
-if_null_assignment_static_test/23: MissingCompileTimeError
-if_null_assignment_static_test/25: MissingCompileTimeError
-if_null_assignment_static_test/27: MissingCompileTimeError
-if_null_assignment_static_test/28: MissingCompileTimeError
-if_null_assignment_static_test/30: MissingCompileTimeError
-if_null_assignment_static_test/32: MissingCompileTimeError
-if_null_assignment_static_test/34: MissingCompileTimeError
-if_null_assignment_static_test/35: MissingCompileTimeError
-if_null_assignment_static_test/37: MissingCompileTimeError
-if_null_assignment_static_test/39: MissingCompileTimeError
-if_null_assignment_static_test/41: MissingCompileTimeError
-if_null_assignment_static_test/42: MissingCompileTimeError
-if_null_precedence_test/06: MissingCompileTimeError
-if_null_precedence_test/07: MissingCompileTimeError
-implicit_creation/implicit_new_constructor_generic_test: Crash
-implicit_creation/implicit_new_constructor_test: Crash
-implicit_creation/implicit_new_prefix_constructor_generic_test: Crash
-implicit_creation/implicit_new_prefix_constructor_test: Crash
-implicit_this_test/01: MissingCompileTimeError
-implicit_this_test/02: MissingCompileTimeError
-implicit_this_test/04: MissingCompileTimeError
-import_combinators2_test/00: MissingCompileTimeError
-import_self_test/01: MissingCompileTimeError
-inferrer_constructor5_test/01: MissingCompileTimeError
-infinity_test: RuntimeError # Issue 4984
-initializing_formal_final_test: MissingCompileTimeError
-initializing_formal_type_test: MissingCompileTimeError
-instantiate_tearoff_after_contravariance_check_test: RuntimeError
-instantiate_tearoff_of_call_test: RuntimeError
-instantiate_tearoff_test: RuntimeError
-instantiate_type_variable_test/01: MissingCompileTimeError
-int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
-integer_division_by_zero_test: RuntimeError # Issue 8301
-interface_test/00: MissingCompileTimeError
-invalid_override_in_mixin_test/01: MissingCompileTimeError
-invalid_type_argument_count_test/01: MissingCompileTimeError
-invalid_type_argument_count_test/02: MissingCompileTimeError
-invalid_type_argument_count_test/03: MissingCompileTimeError
-invalid_type_argument_count_test/04: MissingCompileTimeError
-invocation_mirror2_test: RuntimeError # Issue 6490 (wrong retval).
-issue31596_override_test/05: MissingCompileTimeError
-issue31596_override_test/06: MissingCompileTimeError
-issue31596_override_test/07: MissingCompileTimeError
-issue31596_override_test/08: MissingCompileTimeError
-issue31596_super_test/02: MissingCompileTimeError
-issue31596_super_test/04: MissingCompileTimeError
-issue31596_tearoff_test: RuntimeError
-least_upper_bound_expansive_test/01: MissingCompileTimeError
-least_upper_bound_expansive_test/02: MissingCompileTimeError
-least_upper_bound_expansive_test/03: MissingCompileTimeError
-least_upper_bound_expansive_test/04: MissingCompileTimeError
-least_upper_bound_expansive_test/05: MissingCompileTimeError
-least_upper_bound_expansive_test/06: MissingCompileTimeError
-least_upper_bound_expansive_test/07: MissingCompileTimeError
-least_upper_bound_expansive_test/08: MissingCompileTimeError
-least_upper_bound_expansive_test/09: MissingCompileTimeError
-least_upper_bound_expansive_test/10: MissingCompileTimeError
-least_upper_bound_expansive_test/11: MissingCompileTimeError
-least_upper_bound_expansive_test/12: MissingCompileTimeError
-least_upper_bound_test/03: MissingCompileTimeError
-least_upper_bound_test/04: MissingCompileTimeError
-least_upper_bound_test/10: MissingCompileTimeError
-least_upper_bound_test/19: MissingCompileTimeError
-least_upper_bound_test/20: MissingCompileTimeError
-least_upper_bound_test/23: MissingCompileTimeError
-least_upper_bound_test/24: MissingCompileTimeError
-least_upper_bound_test/29: MissingCompileTimeError
-least_upper_bound_test/30: MissingCompileTimeError
-least_upper_bound_test/32: MissingCompileTimeError
-left_shift_test: RuntimeError # Issue 1533
-library_ambiguous_test/00: MissingCompileTimeError
-library_ambiguous_test/01: MissingCompileTimeError
-library_ambiguous_test/02: MissingCompileTimeError
-library_ambiguous_test/03: MissingCompileTimeError
-library_ambiguous_test/04: MissingCompileTimeError
-library_env_test/has_no_html_support: RuntimeError, OK
-library_env_test/has_no_io_support: RuntimeError, OK
-library_env_test/has_no_mirror_support: RuntimeError, OK
-list_is_test: RuntimeError
-list_literal4_test/00: MissingCompileTimeError
-list_literal4_test/01: MissingCompileTimeError
-list_literal4_test/03: MissingCompileTimeError
-list_literal4_test/04: MissingCompileTimeError
-list_literal4_test/05: MissingCompileTimeError
-list_literal_syntax_test/01: MissingCompileTimeError
-list_literal_syntax_test/02: MissingCompileTimeError
-list_literal_syntax_test/03: MissingCompileTimeError
-local_function2_test/01: MissingCompileTimeError
-local_function2_test/02: MissingCompileTimeError
-local_function2_test/none: RuntimeError
-local_function3_test/01: MissingCompileTimeError
-local_function3_test/none: RuntimeError
-local_function_test/01: MissingCompileTimeError
-local_function_test/02: MissingCompileTimeError
-local_function_test/03: MissingCompileTimeError
-local_function_test/04: MissingCompileTimeError
-local_function_test/none: RuntimeError
-logical_expression3_test: MissingCompileTimeError
-main_test/03: RuntimeError
-malbounded_instantiation_test/01: MissingCompileTimeError
-malbounded_instantiation_test/02: MissingCompileTimeError
-malbounded_instantiation_test/03: MissingCompileTimeError
-malbounded_redirecting_factory_test/02: MissingCompileTimeError
-malbounded_redirecting_factory_test/03: MissingCompileTimeError
-malbounded_redirecting_factory_test/04: MissingCompileTimeError
-malbounded_redirecting_factory_test/05: MissingCompileTimeError
-malbounded_type_cast2_test: MissingCompileTimeError
-malbounded_type_cast_test/00: MissingCompileTimeError
-malbounded_type_cast_test/01: MissingCompileTimeError
-malbounded_type_cast_test/02: MissingCompileTimeError
-malbounded_type_cast_test/none: RuntimeError
-malbounded_type_literal_test/00: MissingCompileTimeError
-malbounded_type_test2_test/00: MissingCompileTimeError
-malbounded_type_test_test/00: MissingCompileTimeError
-malbounded_type_test_test/01: MissingCompileTimeError
-malbounded_type_test_test/02: MissingCompileTimeError
-malbounded_type_test_test/none: RuntimeError
-malformed2_test/01: MissingCompileTimeError
-malformed2_test/02: MissingCompileTimeError
-malformed2_test/03: MissingCompileTimeError
-malformed2_test/04: MissingCompileTimeError
-malformed2_test/05: MissingCompileTimeError
-malformed2_test/06: MissingCompileTimeError
-malformed2_test/07: MissingCompileTimeError
-malformed2_test/08: MissingCompileTimeError
-malformed2_test/09: MissingCompileTimeError
-malformed2_test/10: MissingCompileTimeError
-malformed2_test/11: MissingCompileTimeError
-malformed2_test/12: MissingCompileTimeError
-malformed2_test/13: MissingCompileTimeError
-malformed_bound_test/00: MissingCompileTimeError
-malformed_bound_test/01: MissingCompileTimeError
-malformed_inheritance_test/01: MissingCompileTimeError
-malformed_inheritance_test/03: MissingCompileTimeError
-malformed_inheritance_test/05: MissingCompileTimeError
-malformed_test/00: MissingCompileTimeError
-malformed_test/01: MissingCompileTimeError
-malformed_test/02: MissingCompileTimeError
-malformed_test/03: MissingCompileTimeError
-malformed_test/04: MissingCompileTimeError
-malformed_test/05: MissingCompileTimeError
-malformed_test/06: MissingCompileTimeError
-malformed_test/07: MissingCompileTimeError
-malformed_test/08: MissingCompileTimeError
-malformed_test/09: MissingCompileTimeError
-malformed_test/10: MissingCompileTimeError
-malformed_test/11: MissingCompileTimeError
-malformed_test/12: MissingCompileTimeError
-malformed_test/13: MissingCompileTimeError
-malformed_test/14: MissingCompileTimeError
-malformed_test/15: MissingCompileTimeError
-malformed_test/16: MissingCompileTimeError
-malformed_test/17: MissingCompileTimeError
-malformed_test/18: MissingCompileTimeError
-malformed_test/19: MissingCompileTimeError
-malformed_test/20: MissingCompileTimeError
-malformed_test/21: MissingCompileTimeError
-malformed_test/22: MissingCompileTimeError
-malformed_test/23: MissingCompileTimeError
-malformed_test/24: MissingCompileTimeError
-malformed_type_test: MissingCompileTimeError
-method_override2_test/*: MissingCompileTimeError
-method_override2_test/none: Pass
-method_override3_test/*: MissingCompileTimeError
-method_override3_test/none: Pass
-method_override4_test/*: MissingCompileTimeError
-method_override4_test/none: Pass
-method_override5_test: RuntimeError # Issue 12809
-method_override5_test/*: MissingCompileTimeError
-method_override5_test/none: Pass
-method_override6_test/*: MissingCompileTimeError
-method_override6_test/none: Pass
-method_override7_test/03: MissingCompileTimeError
-method_override8_test/03: MissingCompileTimeError
-method_override_test: RuntimeError
-mint_arithmetic_test: RuntimeError # Issue 1533
-mixin_illegal_constructor_test/13: MissingCompileTimeError
-mixin_illegal_constructor_test/14: MissingCompileTimeError
-mixin_illegal_constructor_test/15: MissingCompileTimeError
-mixin_illegal_constructor_test/16: MissingCompileTimeError
-mixin_illegal_static_access_test/01: MissingCompileTimeError
-mixin_illegal_static_access_test/02: MissingCompileTimeError
-mixin_illegal_syntax_test/13: MissingCompileTimeError
-mixin_invalid_bound2_test/02: MissingCompileTimeError
-mixin_invalid_bound2_test/03: MissingCompileTimeError
-mixin_invalid_bound2_test/04: MissingCompileTimeError
-mixin_invalid_bound2_test/05: MissingCompileTimeError
-mixin_invalid_bound2_test/06: MissingCompileTimeError
-mixin_invalid_bound2_test/07: MissingCompileTimeError
-mixin_invalid_bound2_test/08: MissingCompileTimeError
-mixin_invalid_bound2_test/09: MissingCompileTimeError
-mixin_invalid_bound2_test/10: MissingCompileTimeError
-mixin_invalid_bound2_test/11: MissingCompileTimeError
-mixin_invalid_bound2_test/12: MissingCompileTimeError
-mixin_invalid_bound2_test/13: MissingCompileTimeError
-mixin_invalid_bound2_test/14: MissingCompileTimeError
-mixin_invalid_bound2_test/15: MissingCompileTimeError
-mixin_invalid_bound_test/02: MissingCompileTimeError
-mixin_invalid_bound_test/03: MissingCompileTimeError
-mixin_invalid_bound_test/04: MissingCompileTimeError
-mixin_invalid_bound_test/05: MissingCompileTimeError
-mixin_invalid_bound_test/06: MissingCompileTimeError
-mixin_invalid_bound_test/07: MissingCompileTimeError
-mixin_invalid_bound_test/08: MissingCompileTimeError
-mixin_invalid_bound_test/09: MissingCompileTimeError
-mixin_invalid_bound_test/10: MissingCompileTimeError
-mixin_of_mixin_test/none: CompileTimeError
-mixin_super_2_test/none: CompileTimeError
-mixin_super_bound2_test: CompileTimeError # Issue 23773
-mixin_super_bound_test/01: MissingCompileTimeError
-mixin_super_bound_test/02: MissingCompileTimeError
-mixin_super_constructor_named_test/01: Fail # Issue 15101
-mixin_super_constructor_positionals_test/01: Fail # Issue 15101
-mixin_super_test: CompileTimeError # Issue 23773
-mixin_super_use_test: CompileTimeError # Issue 23773
-mixin_superclass_test: CompileTimeError # Issue 23773
-mixin_supertype_subclass2_test: CompileTimeError # Issue 23773
-mixin_supertype_subclass3_test: CompileTimeError # Issue 23773
-mixin_supertype_subclass4_test: CompileTimeError # Issue 23773
-mixin_supertype_subclass_test/01: CompileTimeError
-mixin_supertype_subclass_test/03: CompileTimeError
-mixin_supertype_subclass_test/04: CompileTimeError
-mixin_supertype_subclass_test/none: CompileTimeError
-mixin_type_parameters_errors_test/01: MissingCompileTimeError
-mixin_type_parameters_errors_test/02: MissingCompileTimeError
-mixin_type_parameters_errors_test/03: MissingCompileTimeError
-mixin_type_parameters_errors_test/04: MissingCompileTimeError
-mixin_type_parameters_errors_test/05: MissingCompileTimeError
-mixin_type_parameters_mixin_extends_test: RuntimeError
-mixin_type_parameters_mixin_test: RuntimeError
-mixin_type_parameters_super_extends_test: RuntimeError
-mixin_type_parameters_super_test: RuntimeError
-mixin_with_two_implicit_constructors_test: MissingCompileTimeError
-mock_writable_final_private_field_test: CompileTimeError # Issue 17526
-modulo_test: RuntimeError # Issue 15246
-multiline_newline_test/01: CompileTimeError # Issue 23888
-multiline_newline_test/01r: CompileTimeError # Issue 23888
-multiline_newline_test/02: CompileTimeError # Issue 23888
-multiline_newline_test/02r: CompileTimeError # Issue 23888
-multiline_newline_test/03: RuntimeError
-multiline_newline_test/03r: RuntimeError
-multiline_newline_test/04: MissingCompileTimeError # Issue 23888
-multiline_newline_test/04r: MissingCompileTimeError # Issue 23888
-multiline_newline_test/05: MissingCompileTimeError # Issue 23888
-multiline_newline_test/05r: MissingCompileTimeError # Issue 23888
-multiline_newline_test/none: RuntimeError # Issue 23888
-named_constructor_test/01: MissingCompileTimeError
-named_constructor_test/03: MissingCompileTimeError
-named_parameters2_test: MissingCompileTimeError
-named_parameters3_test: MissingCompileTimeError
-named_parameters4_test: MissingCompileTimeError
-named_parameters_aggregated_test/05: MissingCompileTimeError
-named_parameters_test/01: MissingCompileTimeError
-named_parameters_test/02: MissingCompileTimeError
-named_parameters_test/03: MissingCompileTimeError
-named_parameters_test/04: MissingCompileTimeError
-named_parameters_test/05: MissingCompileTimeError
-named_parameters_test/06: MissingCompileTimeError
-named_parameters_test/07: MissingCompileTimeError
-named_parameters_test/08: MissingCompileTimeError
-named_parameters_test/09: MissingCompileTimeError
-named_parameters_test/10: MissingCompileTimeError
-named_parameters_type_test/01: MissingCompileTimeError
-named_parameters_type_test/02: MissingCompileTimeError
-named_parameters_type_test/03: MissingCompileTimeError
-nan_identical_test: Fail # Issue 11551
-nested_generic_closure_test: RuntimeError
-new_expression_type_args_test/00: MissingCompileTimeError
-new_expression_type_args_test/01: MissingCompileTimeError
-new_expression_type_args_test/02: MissingCompileTimeError
-new_prefix_test/01: MissingCompileTimeError
-no_such_constructor_test/01: MissingCompileTimeError
-no_such_method_mock_test: RuntimeError
-number_identity2_test: RuntimeError # Issue 12596
-numbers_test: RuntimeError, OK # Issue 1533
-object_has_no_call_method_test/02: MissingCompileTimeError
-object_has_no_call_method_test/05: MissingCompileTimeError
-object_has_no_call_method_test/08: MissingCompileTimeError
-optional_named_parameters_test/01: MissingCompileTimeError
-optional_named_parameters_test/02: MissingCompileTimeError
-optional_named_parameters_test/03: MissingCompileTimeError
-optional_named_parameters_test/04: MissingCompileTimeError
-optional_named_parameters_test/05: MissingCompileTimeError
-optional_named_parameters_test/06: MissingCompileTimeError
-optional_named_parameters_test/07: MissingCompileTimeError
-optional_named_parameters_test/08: MissingCompileTimeError
-optional_named_parameters_test/09: MissingCompileTimeError
-override_field_test/02: MissingCompileTimeError
-override_field_test/03: MissingCompileTimeError
-override_inheritance_abstract_test/02: MissingCompileTimeError
-override_inheritance_abstract_test/03: MissingCompileTimeError
-override_inheritance_abstract_test/04: MissingCompileTimeError
-override_inheritance_abstract_test/08: MissingCompileTimeError
-override_inheritance_abstract_test/09: MissingCompileTimeError
-override_inheritance_abstract_test/10: MissingCompileTimeError
-override_inheritance_abstract_test/11: MissingCompileTimeError
-override_inheritance_abstract_test/12: MissingCompileTimeError
-override_inheritance_abstract_test/13: MissingCompileTimeError
-override_inheritance_abstract_test/14: MissingCompileTimeError
-override_inheritance_abstract_test/17: MissingCompileTimeError
-override_inheritance_abstract_test/19: MissingCompileTimeError
-override_inheritance_abstract_test/20: MissingCompileTimeError
-override_inheritance_abstract_test/21: MissingCompileTimeError
-override_inheritance_abstract_test/22: MissingCompileTimeError
-override_inheritance_abstract_test/23: MissingCompileTimeError
-override_inheritance_abstract_test/24: MissingCompileTimeError
-override_inheritance_abstract_test/25: MissingCompileTimeError
-override_inheritance_abstract_test/26: MissingCompileTimeError
-override_inheritance_abstract_test/28: MissingCompileTimeError
-override_inheritance_field_test/05: MissingCompileTimeError
-override_inheritance_field_test/07: MissingCompileTimeError
-override_inheritance_field_test/08: MissingCompileTimeError
-override_inheritance_field_test/09: MissingCompileTimeError
-override_inheritance_field_test/10: MissingCompileTimeError
-override_inheritance_field_test/11: MissingCompileTimeError
-override_inheritance_field_test/28: MissingCompileTimeError
-override_inheritance_field_test/30: MissingCompileTimeError
-override_inheritance_field_test/31: MissingCompileTimeError
-override_inheritance_field_test/32: MissingCompileTimeError
-override_inheritance_field_test/33: MissingCompileTimeError
-override_inheritance_field_test/33a: MissingCompileTimeError
-override_inheritance_field_test/34: MissingCompileTimeError
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/04: MissingCompileTimeError
-override_inheritance_generic_test/06: MissingCompileTimeError
-override_inheritance_generic_test/07: MissingCompileTimeError
-override_inheritance_generic_test/08: MissingCompileTimeError
-override_inheritance_generic_test/09: MissingCompileTimeError
-override_inheritance_generic_test/10: MissingCompileTimeError
-override_inheritance_method_test/04: MissingCompileTimeError
-override_inheritance_method_test/05: MissingCompileTimeError
-override_inheritance_method_test/06: MissingCompileTimeError
-override_inheritance_method_test/11: MissingCompileTimeError
-override_inheritance_method_test/12: MissingCompileTimeError
-override_inheritance_method_test/13: MissingCompileTimeError
-override_inheritance_method_test/14: MissingCompileTimeError
-override_inheritance_method_test/19: MissingCompileTimeError
-override_inheritance_method_test/20: MissingCompileTimeError
-override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/27: MissingCompileTimeError
-override_inheritance_method_test/30: MissingCompileTimeError
-override_inheritance_method_test/31: MissingCompileTimeError
-override_inheritance_method_test/32: MissingCompileTimeError
-override_inheritance_method_test/33: MissingCompileTimeError
-override_inheritance_mixed_test/06: MissingCompileTimeError
-override_inheritance_mixed_test/07: MissingCompileTimeError
-override_inheritance_no_such_method_test/01: MissingCompileTimeError
-override_inheritance_no_such_method_test/02: MissingCompileTimeError
-override_inheritance_no_such_method_test/06: MissingCompileTimeError
-override_inheritance_no_such_method_test/07: MissingCompileTimeError
-override_inheritance_no_such_method_test/09: MissingCompileTimeError
-override_inheritance_no_such_method_test/10: MissingCompileTimeError
-override_inheritance_no_such_method_test/12: MissingCompileTimeError
-override_inheritance_no_such_method_test/13: MissingCompileTimeError
-override_method_with_field_test/02: MissingCompileTimeError
-part2_test/01: MissingCompileTimeError
-partial_tearoff_instantiation_test/01: MissingCompileTimeError
-partial_tearoff_instantiation_test/02: MissingRuntimeError
-partial_tearoff_instantiation_test/03: MissingCompileTimeError
-partial_tearoff_instantiation_test/04: MissingRuntimeError
-partial_tearoff_instantiation_test/05: MissingCompileTimeError
-partial_tearoff_instantiation_test/06: MissingCompileTimeError
-partial_tearoff_instantiation_test/07: MissingCompileTimeError
-partial_tearoff_instantiation_test/08: MissingCompileTimeError
-positional_parameters_type_test/01: MissingCompileTimeError
-positional_parameters_type_test/02: MissingCompileTimeError
-prefix16_test/00: MissingCompileTimeError
-prefix16_test/01: MissingCompileTimeError
-prefix22_test/00: MissingCompileTimeError
-prefix23_test/00: MissingCompileTimeError
-private_access_test/01: MissingCompileTimeError
-private_access_test/02: MissingCompileTimeError
-private_access_test/03: MissingCompileTimeError
-private_access_test/04: MissingCompileTimeError
-private_access_test/05: MissingCompileTimeError
-private_access_test/06: MissingCompileTimeError
-recursive_generic_test: RuntimeError
-regress_12561_test: MissingCompileTimeError
-regress_13494_test: MissingCompileTimeError
-regress_17382_test: MissingCompileTimeError
-regress_19413_test: MissingCompileTimeError
-regress_19728_test: MissingCompileTimeError
-regress_21793_test/01: MissingCompileTimeError
-regress_21912_test/01: MissingCompileTimeError
-regress_21912_test/02: MissingCompileTimeError
-regress_22438_test: MissingCompileTimeError
-regress_22936_test: MissingCompileTimeError
-regress_22976_test: CompileTimeError # Issue 23132
-regress_23089_test: MissingCompileTimeError
-regress_23408_test: RuntimeError
-regress_24283_test: RuntimeError # Issue 1533
-regress_26133_test: MissingCompileTimeError
-regress_27572_test: MissingCompileTimeError
-regress_31057_test: RuntimeError
-regress_31591_test: RuntimeError, OK # strong mode only
-return_type_test: MissingCompileTimeError
-rewrite_implicit_this_test/01: MissingCompileTimeError
-runtime_type_function_test: RuntimeError
-scope_variable_test/01: MissingCompileTimeError # Issue 13016
-setter4_test: CompileTimeError # issue 13639
-setter4_test: MissingCompileTimeError
-setter_no_getter_call_test/01: MissingCompileTimeError
-setter_override_test/01: MissingCompileTimeError
-setter_override_test/02: MissingCompileTimeError
-stacktrace_demangle_ctors_test: Fail # dart2js stack traces are not always compliant, issue 12698
-stacktrace_rethrow_error_test: Pass, RuntimeError # Issue 12698
-stacktrace_rethrow_nonerror_test: Pass, RuntimeError # Issue 12698
-stacktrace_test: Pass, RuntimeError # # Issue 12698
-static_field1_test/01: MissingCompileTimeError
-static_field1a_test/01: MissingCompileTimeError
-static_field3_test/01: MissingCompileTimeError
-static_field3_test/02: MissingCompileTimeError
-static_field3_test/03: MissingCompileTimeError
-static_field3_test/04: MissingCompileTimeError
-static_field_test/01: MissingCompileTimeError
-static_field_test/02: MissingCompileTimeError
-static_field_test/03: MissingCompileTimeError
-static_field_test/04: MissingCompileTimeError
-static_final_field2_test/01: MissingCompileTimeError
-static_getter_no_setter1_test/01: MissingCompileTimeError
-static_getter_no_setter2_test/01: MissingCompileTimeError
-static_initializer_type_error_test: MissingCompileTimeError
-static_setter_get_test/01: MissingCompileTimeError
-string_interpolation_test/01: MissingCompileTimeError
-string_no_operator_test/01: MissingCompileTimeError
-string_no_operator_test/02: MissingCompileTimeError
-string_no_operator_test/03: MissingCompileTimeError
-string_no_operator_test/04: MissingCompileTimeError
-string_no_operator_test/05: MissingCompileTimeError
-string_no_operator_test/06: MissingCompileTimeError
-string_no_operator_test/07: MissingCompileTimeError
-string_no_operator_test/08: MissingCompileTimeError
-string_no_operator_test/09: MissingCompileTimeError
-string_no_operator_test/10: MissingCompileTimeError
-string_no_operator_test/11: MissingCompileTimeError
-string_no_operator_test/12: MissingCompileTimeError
-string_no_operator_test/13: MissingCompileTimeError
-string_no_operator_test/14: MissingCompileTimeError
-string_no_operator_test/15: MissingCompileTimeError
-string_no_operator_test/16: MissingCompileTimeError
-string_test/01: MissingCompileTimeError
-substring_test/01: MissingCompileTimeError
-super_assign_test/01: MissingCompileTimeError
-super_bound_closure_test/01: MissingCompileTimeError
-super_operator_index_test/01: MissingCompileTimeError
-super_operator_index_test/02: MissingCompileTimeError
-super_operator_index_test/03: MissingCompileTimeError
-super_operator_index_test/04: MissingCompileTimeError
-super_operator_index_test/05: MissingCompileTimeError
-super_operator_index_test/06: MissingCompileTimeError
-super_operator_index_test/07: MissingCompileTimeError
-super_test: RuntimeError
-switch_fallthru_test/01: MissingCompileTimeError
-sync_generator1_test/01: MissingCompileTimeError
-syntax_test/60: MissingCompileTimeError
-syntax_test/61: MissingCompileTimeError
-syntax_test/62: MissingCompileTimeError, Crash
-top_level_getter_no_setter1_test: MissingCompileTimeError
-top_level_getter_no_setter2_test: MissingCompileTimeError
-transitive_private_library_access_test: MissingCompileTimeError
-truncdiv_test: RuntimeError # Issue 15246
-try_catch_on_syntax_test/07: MissingCompileTimeError
-try_catch_on_syntax_test/10: Fail # Issue 19823
-try_catch_on_syntax_test/10: MissingCompileTimeError
-try_catch_on_syntax_test/11: MissingCompileTimeError, Fail # Issue 19823
-try_catch_syntax_test/08: MissingCompileTimeError
-type_checks_in_factory_method_test/01: MissingCompileTimeError
-type_inference_accessor_ref_test/03: MissingCompileTimeError
-type_inference_accessor_ref_test/06: MissingCompileTimeError
-type_inference_circularity_test: MissingCompileTimeError
-type_inference_inconsistent_inheritance_test: MissingCompileTimeError
-type_literal_prefix_call_test: RuntimeError
-type_promotion_functions_test/01: MissingCompileTimeError
-type_promotion_functions_test/05: MissingCompileTimeError
-type_promotion_functions_test/06: MissingCompileTimeError
-type_promotion_functions_test/07: MissingCompileTimeError
-type_promotion_functions_test/08: MissingCompileTimeError
-type_promotion_functions_test/10: MissingCompileTimeError
-type_promotion_parameter_test/01: MissingCompileTimeError
-type_promotion_parameter_test/02: MissingCompileTimeError
-type_promotion_parameter_test/03: MissingCompileTimeError
-type_promotion_parameter_test/04: MissingCompileTimeError
-type_promotion_parameter_test/05: MissingCompileTimeError
-type_promotion_parameter_test/06: MissingCompileTimeError
-type_promotion_parameter_test/07: MissingCompileTimeError
-type_promotion_parameter_test/08: MissingCompileTimeError
-type_promotion_parameter_test/09: MissingCompileTimeError
-type_promotion_parameter_test/10: MissingCompileTimeError
-type_promotion_parameter_test/11: MissingCompileTimeError
-type_promotion_parameter_test/12: MissingCompileTimeError
-type_promotion_parameter_test/13: MissingCompileTimeError
-type_promotion_parameter_test/14: MissingCompileTimeError
-type_promotion_parameter_test/15: MissingCompileTimeError
-type_promotion_parameter_test/16: MissingCompileTimeError
-type_promotion_parameter_test/17: MissingCompileTimeError
-type_promotion_parameter_test/18: MissingCompileTimeError
-type_promotion_parameter_test/19: MissingCompileTimeError
-type_promotion_parameter_test/20: MissingCompileTimeError
-type_promotion_parameter_test/21: MissingCompileTimeError
-type_promotion_parameter_test/22: MissingCompileTimeError
-type_promotion_parameter_test/23: MissingCompileTimeError
-type_promotion_parameter_test/24: MissingCompileTimeError
-type_promotion_parameter_test/25: MissingCompileTimeError
-type_promotion_parameter_test/26: MissingCompileTimeError
-type_promotion_parameter_test/27: MissingCompileTimeError
-type_promotion_parameter_test/28: MissingCompileTimeError
-type_promotion_parameter_test/29: MissingCompileTimeError
-type_promotion_parameter_test/30: MissingCompileTimeError
-type_promotion_parameter_test/31: MissingCompileTimeError
-type_promotion_parameter_test/32: MissingCompileTimeError
-type_promotion_parameter_test/33: MissingCompileTimeError
-type_promotion_parameter_test/34: MissingCompileTimeError
-type_promotion_parameter_test/35: MissingCompileTimeError
-type_promotion_parameter_test/36: MissingCompileTimeError
-type_promotion_parameter_test/37: MissingCompileTimeError
-type_promotion_parameter_test/38: MissingCompileTimeError
-type_promotion_parameter_test/39: MissingCompileTimeError
-type_promotion_parameter_test/40: MissingCompileTimeError
-type_promotion_parameter_test/41: MissingCompileTimeError
-type_promotion_parameter_test/42: MissingCompileTimeError
-type_promotion_parameter_test/43: MissingCompileTimeError
-type_promotion_parameter_test/44: MissingCompileTimeError
-type_promotion_parameter_test/45: MissingCompileTimeError
-type_promotion_parameter_test/46: MissingCompileTimeError
-type_promotion_parameter_test/47: MissingCompileTimeError
-type_promotion_parameter_test/48: MissingCompileTimeError
-type_promotion_parameter_test/49: MissingCompileTimeError
-type_promotion_parameter_test/50: MissingCompileTimeError
-type_promotion_parameter_test/51: MissingCompileTimeError
-type_promotion_parameter_test/52: MissingCompileTimeError
-type_promotion_parameter_test/54: MissingCompileTimeError
-type_promotion_parameter_test/55: MissingCompileTimeError
-type_promotion_parameter_test/56: MissingCompileTimeError
-type_variable_bounds2_test: MissingCompileTimeError
-type_variable_bounds3_test/00: MissingCompileTimeError
-type_variable_bounds4_test/01: MissingCompileTimeError
-type_variable_bounds_test/00: MissingCompileTimeError
-type_variable_bounds_test/01: MissingCompileTimeError
-type_variable_bounds_test/02: MissingCompileTimeError
-type_variable_bounds_test/03: MissingCompileTimeError
-type_variable_bounds_test/04: MissingCompileTimeError
-type_variable_bounds_test/05: MissingCompileTimeError
-type_variable_bounds_test/06: MissingCompileTimeError
-type_variable_bounds_test/07: MissingCompileTimeError
-type_variable_bounds_test/08: MissingCompileTimeError
-type_variable_bounds_test/09: MissingCompileTimeError
-type_variable_bounds_test/10: MissingCompileTimeError
-type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_conflict2_test/01: MissingCompileTimeError
-type_variable_conflict2_test/03: MissingCompileTimeError
-type_variable_conflict2_test/04: MissingCompileTimeError
-type_variable_conflict2_test/05: MissingCompileTimeError
-type_variable_conflict2_test/07: MissingCompileTimeError
-type_variable_conflict2_test/09: MissingCompileTimeError
-type_variable_conflict_test/01: Fail # Issue 13702
-type_variable_conflict_test/02: Fail # Issue 13702
-type_variable_conflict_test/03: Fail # Issue 13702
-type_variable_conflict_test/04: Fail # Issue 13702
-type_variable_conflict_test/05: Fail # Issue 13702
-type_variable_conflict_test/06: Fail # Issue 13702
-type_variable_identifier_expression_test: MissingCompileTimeError
-type_variable_nested_test/01: RuntimeError
-type_variable_promotion_test: RuntimeError
-type_variable_scope2_test: MissingCompileTimeError
-type_variable_scope_test/00: MissingCompileTimeError
-type_variable_scope_test/01: MissingCompileTimeError
-type_variable_scope_test/02: MissingCompileTimeError
-type_variable_scope_test/03: MissingCompileTimeError
-type_variable_scope_test/04: MissingCompileTimeError
-type_variable_scope_test/05: MissingCompileTimeError
-type_variable_static_context_test: MissingCompileTimeError
-typed_selector2_test: MissingCompileTimeError
-unbound_getter_test: MissingCompileTimeError
-unresolved_default_constructor_test/01: MissingCompileTimeError
-unresolved_in_factory_test: MissingCompileTimeError
-unresolved_top_level_method_test: MissingCompileTimeError
-unresolved_top_level_var_test: MissingCompileTimeError
-vm/*: SkipByDesign # Tests for the VM.
-void_block_return_test/00: MissingCompileTimeError
-wrong_number_type_arguments_test/*: MissingCompileTimeError
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $fast_startup ]
-const_evaluation_test/*: Fail # mirrors not supported
-deferred_constraints_constants_test: Pass # mirrors not supported, passes for the wrong reason
-deferred_constraints_constants_test/none: Fail # mirrors not supported
-deferred_constraints_constants_test/reference_after_load: Fail # mirrors not supported
-enum_mirror_test: Fail # mirrors not supported
-field_increment_bailout_test: Fail # mirrors not supported
-instance_creation_in_function_annotation_test: Fail # mirrors not supported
-invocation_mirror2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on_test: Fail # mirrors not supported
-issue21079_test: Fail # mirrors not supported
-library_env_test/has_mirror_support: Fail # mirrors not supported
-library_env_test/has_no_mirror_support: Pass # fails for the wrong reason.
-many_overridden_no_such_method_test: Fail # mirrors not supported
-no_such_method_test: Fail # mirrors not supported
-null_test/0*: Pass # mirrors not supported, fails for the wrong reason
-null_test/none: Fail # mirrors not supported
-overridden_no_such_method_test: Fail # mirrors not supported
-redirecting_factory_reflection_test: Fail # mirrors not supported
-regress_13462_0_test: Fail # mirrors not supported
-regress_13462_1_test: Fail # mirrors not supported
-regress_18535_test: Fail # mirrors not supported
-regress_28255_test: Fail # mirrors not supported
-super_call4_test: Fail # mirrors not supported
-super_getter_setter_test: CompileTimeError
-vm/reflect_core_vm_test: Fail # mirrors not supported
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $host_checked ]
-implicit_downcast_during_for_in_element_test: Crash
-implicit_downcast_during_for_in_iterable_test: Crash
-regress_26855_test/1: Crash # Issue 26867
-regress_26855_test/2: Crash # Issue 26867
-regress_26855_test/3: Crash # Issue 26867
-regress_26855_test/4: Crash # Issue 26867
-
-[ $compiler == dart2js && !$dart2js_with_kernel && $minified ]
-f_bounded_quantification4_test: Fail, Pass # Issue 12605
-mixin_generic_test: Fail # Issue 12605
-symbol_conflict_test: RuntimeError # Issue 23857
-
-[ $compiler == dart2js && !$dart2js_with_kernel && !$minified ]
-vm/async_await_catch_stacktrace_test: RuntimeError
-
-[ $compiler == dart2js && $fasta ]
-syntax_test/62: Crash
-
 [ $compiler == dart2js && !$fasta ]
-syntax_test/59: MissingCompileTimeError
+*: SkipByDesign
 
 [ $compiler == dart2js && $minified ]
 cyclic_type2_test: RuntimeError # Issue 31054
@@ -3824,6 +2839,3 @@
 mixin_mixin_bound_test: RuntimeError # Issue 31054
 mixin_mixin_type_arguments_test: RuntimeError # Issue 31054
 
-[ $compiler == dart2js && !$strong ]
-dynamic_test: RuntimeError
-
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 35e3b0a..fd6aff1 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -21,7 +21,8 @@
 await_future_test: Pass, Timeout # Issue 29920
 bit_operations_test: RuntimeError # No bigints on web.
 black_listed_test/none: Fail # Issue 14228
-bug32353_test: RuntimeError
+bug32353_test: CompileTimeError
+bug32372_test: CompileTimeError
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
 call_method_as_cast_test/01: RuntimeError
@@ -54,6 +55,7 @@
 call_method_override_test/02: MissingCompileTimeError
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
+conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
 conflicting_type_variable_and_setter_test: CompileTimeError
 const_evaluation_test/01: RuntimeError # Issue 29920
 const_for_in_variable_test/01: MissingCompileTimeError
@@ -139,20 +141,19 @@
 mixin_supertype_subclass_test/02: MissingCompileTimeError
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/02: RuntimeError # should be CompileTimeError, fuzzy arrows
-mixin_type_parameter_inference_previous_mixin_test/03: MissingCompileTimeError # fuzzy arrows
-mixin_type_parameter_inference_previous_mixin_test/04: MissingCompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/05: RuntimeError
+mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/05: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/none: CompileTimeError
 mixin_type_parameter_inference_test/01: CompileTimeError
-mixin_type_parameter_inference_test/02: RuntimeError # CompileTimeError, except Fuzzy arrows
-mixin_type_parameter_inference_test/03: RuntimeError # CompileTimeError, except Fuzzy arrows
-mixin_type_parameter_inference_test/04: MissingCompileTimeError
-mixin_type_parameter_inference_test/05: MissingCompileTimeError
-mixin_type_parameter_inference_test/06: MissingCompileTimeError
-mixin_type_parameter_inference_test/07: MissingCompileTimeError
-mixin_type_parameter_inference_test/08: RuntimeError
-mixin_type_parameter_inference_test/09: RuntimeError
-mixin_type_parameter_inference_test/11: MissingCompileTimeError
+mixin_type_parameter_inference_test/02: CompileTimeError
+mixin_type_parameter_inference_test/03: CompileTimeError
+mixin_type_parameter_inference_test/08: CompileTimeError
+mixin_type_parameter_inference_test/09: CompileTimeError
+mixin_type_parameter_inference_test/10: CompileTimeError
+mixin_type_parameter_inference_test/12: CompileTimeError
+mixin_type_parameter_inference_test/13: CompileTimeError
+mixin_type_parameter_inference_test/16: CompileTimeError
+mixin_type_parameter_inference_test/none: CompileTimeError
 mock_writable_final_private_field_test: CompileTimeError # Issue 30848
 multiline_newline_test/01: CompileTimeError
 multiline_newline_test/01r: CompileTimeError
@@ -178,7 +179,9 @@
 parameter_initializer_test: CompileTimeError
 part_refers_to_core_library_test/01: Crash
 prefix10_negative_test: Fail # Issue 29920
-private_access_test/04: MissingCompileTimeError
+regress_22976_test/01: CompileTimeError
+regress_22976_test/02: CompileTimeError
+regress_22976_test/none: CompileTimeError
 regress_23408_test: CompileTimeError
 regress_24283_test: RuntimeError # Intended to fail, requires 64-bit numbers.
 regress_29025_test: CompileTimeError # Issue 29081
@@ -731,6 +734,8 @@
 branch_canonicalization_test: RuntimeError # Issue 29920; Expect.equals(expected: <0>, actual: <1>) fails.
 built_in_identifier_prefix_test: CompileTimeError
 call_closurization_test: RuntimeError # Issue 29920; TypeError: Cannot read property '0' of undefined
+call_operator_test/01: RuntimeError # Issue 32157
+call_operator_test/02: RuntimeError # Issue 32157
 call_test: RuntimeError # Expect.throws(NoSuchMethodError) fails: Did not throw
 canonical_const2_test: RuntimeError # Ints and doubles are unified.; Expect.isFalse(true) fails.
 closure_call_wrong_argument_count_negative_test: Fail
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 9b0ad47..94a1e0f 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -493,11 +493,6 @@
 
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 const_instance_field_test/01: Crash # Issue 32326.
-cyclic_type_variable_test/01: Crash
-cyclic_type_variable_test/02: Crash
-cyclic_type_variable_test/03: Crash
-cyclic_type_variable_test/04: Crash
-cyclic_type_variable_test/none: Crash
 deopt_inlined_function_lazy_test: Skip
 tearoff_dynamic_test: Crash
 
@@ -556,7 +551,6 @@
 mixin_invalid_bound_test/06: Fail
 mixin_invalid_bound_test/07: Fail
 recursive_inheritance_test: RuntimeError
-recursive_mixin_test: Crash
 redirecting_factory_infinite_steps_test/01: Fail
 redirecting_factory_malbounded_test/01: Fail
 regress_22728_test: Fail # Dartk Issue 28498
@@ -584,7 +578,6 @@
 built_in_identifier_prefix_test: CompileTimeError
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
-call_operator_test: RuntimeError, OK
 call_with_no_such_method_test: RuntimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
 compile_time_constant_k_test/02: MissingCompileTimeError
@@ -612,8 +605,8 @@
 cyclic_type2_test: RuntimeError, CompileTimeError
 cyclic_type_test/02: RuntimeError, CompileTimeError
 cyclic_type_test/04: RuntimeError, CompileTimeError
-cyclic_typedef_test/10: Crash
-cyclic_typedef_test/11: Crash
+cyclic_typedef_test/10: Crash # Issue 32416.
+cyclic_typedef_test/11: Crash # Issue 32416.
 deferred_call_empty_before_load_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_load_constants_test/none: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 30273.
@@ -702,7 +695,7 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 regress_22443_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
-regress_23089_test: Crash
+regress_23089_test: Crash # Issue 32417.
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23408_test: RuntimeError
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -763,7 +756,6 @@
 assertion_initializer_const_error2_test/cc09: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc10: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc11: MissingCompileTimeError # Not reporting failed assert() at compile time.
-recursive_mixin_test: Crash
 redirecting_factory_reflection_test: RuntimeError
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
@@ -774,13 +766,7 @@
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
 const_instance_field_test/01: Crash # Issue 32326.
-cyclic_type_variable_test/01: Crash
-cyclic_type_variable_test/02: Crash
-cyclic_type_variable_test/03: Crash
-cyclic_type_variable_test/04: Crash
-cyclic_type_variable_test/none: Crash
 external_test/13: Crash
-regress_29025_test: Crash
 tearoff_dynamic_test: Crash
 type_promotion_functions_test/05: Pass
 type_promotion_functions_test/06: Pass
@@ -863,7 +849,6 @@
 redirecting_factory_malbounded_test/01: Fail
 regress_22728_test: Fail # Dartk Issue 28498
 regress_22728_test: RuntimeError
-regress_30339_test: Crash
 type_variable_bounds4_test/01: RuntimeError
 
 [ $compiler == dartkp && $runtime == dart_precompiled && !$checked && $strong ]
@@ -909,7 +894,6 @@
 built_in_identifier_prefix_test: CompileTimeError
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
-call_operator_test: RuntimeError, OK
 call_with_no_such_method_test: RuntimeError
 checked_setter3_test/01: MissingCompileTimeError
 checked_setter3_test/02: MissingCompileTimeError
@@ -939,8 +923,8 @@
 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_typedef_test/10: Crash
-cyclic_typedef_test/11: Crash
+cyclic_typedef_test/10: Crash # Issue 32416.
+cyclic_typedef_test/11: Crash # Issue 32416.
 deep_nesting1_negative_test: Skip # Issue 31158
 deep_nesting2_negative_test: Skip # Issue 31158
 deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
@@ -1073,7 +1057,6 @@
 override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/08: Pass # Correctly passes.
 parser_quirks_test: CompileTimeError # Issue 31533
-recursive_mixin_test: Crash
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: SkipByDesign
@@ -1081,7 +1064,7 @@
 regress_13462_1_test: SkipByDesign
 regress_18535_test: SkipByDesign
 regress_22443_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
-regress_23089_test: Crash
+regress_23089_test: Crash # Issue 32417.
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23408_test: RuntimeError
 regress_28255_test: SkipByDesign
@@ -1108,7 +1091,6 @@
 super_operator_index8_test: CompileTimeError
 super_test: Fail, OK
 syntax_test/00: MissingCompileTimeError
-tearoff_dynamic_test: Crash
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 57a932d..0144b00 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -88,6 +88,7 @@
 bool_condition_check_test: RuntimeError
 bug31436_test: RuntimeError
 bug32353_test: RuntimeError
+bug32372_test: RuntimeError
 built_in_identifier_prefix_test: CompileTimeError
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
@@ -219,6 +220,7 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
+conflicting_generic_interfaces_simple_test: MissingCompileTimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
 const_constructor3_test/02: MissingCompileTimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 13af2f9..e24a1d3 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -178,6 +178,7 @@
 bad_override_test/06: MissingCompileTimeError
 bug31436_test: RuntimeError
 bug32353_test: RuntimeError
+bug32372_test: RuntimeError
 built_in_identifier_prefix_test: CompileTimeError
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
@@ -305,6 +306,7 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
+conflicting_generic_interfaces_simple_test: MissingCompileTimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
@@ -855,7 +857,6 @@
 private_access_test/04: MissingCompileTimeError
 private_access_test/05: MissingCompileTimeError
 private_access_test/06: MissingCompileTimeError
-recursive_mixin_test: RuntimeError
 regress_12561_test: MissingCompileTimeError
 regress_13494_test: MissingCompileTimeError
 regress_17382_test: MissingCompileTimeError
@@ -1036,6 +1037,8 @@
 unresolved_top_level_var_test: MissingCompileTimeError
 
 [ $compiler != dartk && $runtime == vm && $checked ]
+call_operator_test/01: RuntimeError
+call_operator_test/02: RuntimeError
 call_type_literal_test: RuntimeError
 class_literal_static_test/none: RuntimeError
 class_literal_test/none: RuntimeError
@@ -1117,7 +1120,6 @@
 function_type/function_type9_test: RuntimeError # Issue 30475
 function_type_alias2_test: RuntimeError
 invalid_override_in_mixin_test/01: MissingCompileTimeError
-recursive_mixin_test: Crash
 type_literal_prefix_call_test: RuntimeError
 
 # The VM and does not implement the Dart 2.0 runtime checks yet unless
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index d55049b..68dbb6d 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -377,7 +377,7 @@
 mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
 typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
 
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || $compiler == dart2js && $dart2js_with_kernel ]
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || $compiler == dart2js && $fasta ]
 convert/base64_test/01: CompileTimeError # Large integer literal
 convert/utf82_test: CompileTimeError # Large integer literal
 math/double_pow_test: CompileTimeError # Large integer literal
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index ca7739e..c83f291 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -308,10 +308,38 @@
 html/mirrors_js_typed_interop_test: SkipByDesign
 html/postmessage_structured_test: SkipByDesign
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
+[ $compiler == dart2js && $fast_startup ]
+html/custom/constructor_calls_created_synchronously_test: Fail # mirrors not supported
+html/custom/document_register_basic_test: Pass, Slow, RuntimeError # Slow and sometimes times out
+html/custom/js_custom_test: Fail # mirrors not supported
+html/custom/mirrors_2_test: Fail # mirrors not supported
+html/custom/mirrors_test: Fail # mirrors not supported
+html/mirrors_js_typed_interop_test: Fail # mirrors not supported
+isolate/browser/compute_this_script_browser_test: Fail # mirrors not supported
+isolate/browser/typed_data_message_test: Fail # mirrors not supported
+isolate/count_test: Fail # mirrors not supported
+isolate/cross_isolate_message_test: Fail # mirrors not supported
+isolate/illegal_msg_mirror_test: Fail # mirrors not supported
+isolate/mandel_isolate_test: Fail # mirrors not supported
+isolate/message2_test: Fail # mirrors not supported
+isolate/message_test: Fail # mirrors not supported
+isolate/mint_maker_test: Fail # mirrors not supported
+isolate/nested_spawn2_test: Fail # mirrors not supported
+isolate/nested_spawn_test: Fail # mirrors not supported
+isolate/raw_port_test: Fail # mirrors not supported
+isolate/remote_unittest_helper: Fail # mirrors not supported
+isolate/request_reply_test: Fail # mirrors not supported
+isolate/spawn_function_custom_class_test: Fail # mirrors not supported
+isolate/spawn_function_test: Fail # mirrors not supported
+isolate/stacktrace_message_test: Fail # mirrors not supported
+isolate/static_function_test: Fail # mirrors not supported
+isolate/unresolved_ports_test: Fail # mirrors not supported
+mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
+
+[ $compiler == dart2js && $fasta ]
 async/zone_run_unary_test: Crash
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
+[ $compiler == dart2js && $fasta && $host_checked ]
 html/async_spawnuri_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/async_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/audiobuffersourcenode_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
@@ -488,7 +516,7 @@
 html/xhr_cross_origin_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/xhr_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified ]
+[ $compiler == dart2js && $fasta && $minified ]
 html/async_spawnuri_test: RuntimeError
 html/async_test: RuntimeError
 html/audiobuffersourcenode_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
@@ -722,34 +750,6 @@
 html/window_mangling_test: RuntimeError
 html/window_nosuchmethod_test: RuntimeError
 
-[ $compiler == dart2js && $fast_startup ]
-html/custom/constructor_calls_created_synchronously_test: Fail # mirrors not supported
-html/custom/document_register_basic_test: Pass, Slow, RuntimeError # Slow and sometimes times out
-html/custom/js_custom_test: Fail # mirrors not supported
-html/custom/mirrors_2_test: Fail # mirrors not supported
-html/custom/mirrors_test: Fail # mirrors not supported
-html/mirrors_js_typed_interop_test: Fail # mirrors not supported
-isolate/browser/compute_this_script_browser_test: Fail # mirrors not supported
-isolate/browser/typed_data_message_test: Fail # mirrors not supported
-isolate/count_test: Fail # mirrors not supported
-isolate/cross_isolate_message_test: Fail # mirrors not supported
-isolate/illegal_msg_mirror_test: Fail # mirrors not supported
-isolate/mandel_isolate_test: Fail # mirrors not supported
-isolate/message2_test: Fail # mirrors not supported
-isolate/message_test: Fail # mirrors not supported
-isolate/mint_maker_test: Fail # mirrors not supported
-isolate/nested_spawn2_test: Fail # mirrors not supported
-isolate/nested_spawn_test: Fail # mirrors not supported
-isolate/raw_port_test: Fail # mirrors not supported
-isolate/remote_unittest_helper: Fail # mirrors not supported
-isolate/request_reply_test: Fail # mirrors not supported
-isolate/spawn_function_custom_class_test: Fail # mirrors not supported
-isolate/spawn_function_test: Fail # mirrors not supported
-isolate/stacktrace_message_test: Fail # mirrors not supported
-isolate/static_function_test: Fail # mirrors not supported
-isolate/unresolved_ports_test: Fail # mirrors not supported
-mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
-
 [ $compiler == dart2js && $jscl ]
 isolate/spawn_uri_test: SkipByDesign # Loading another file is not supported in JS shell
 
@@ -771,3 +771,4 @@
 html/custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
 html/custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this
 html/fontface_test: Fail # Fontface not supported on these.
+
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 927f9a0..f830f84 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -53,7 +53,7 @@
 io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
 
 [ $compiler == dartk && $system == windows && $strong ]
-io/compile_all_test: Fail
+io/compile_all_test: Pass,Fail # Possibly related to issue 32373
 io/file_stream_test: RuntimeError # Issue 31904
 io/platform_test: RuntimeError # Issue 31904
 io/process_non_ascii_test: RuntimeError # Issue 31904
diff --git a/tools/VERSION b/tools/VERSION
index 862960b..4e562be 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 32
+PRERELEASE 33
 PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 473c023..a8e1db2 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -99,6 +99,53 @@
   "configurations": [
     {
       "builders": [
+        "front-end-linux-release-x64",
+        "front-end-mac-release-x64",
+        "front-end-win-release-x64"
+      ],
+      "meta": {
+        "description": "Runs the front-end unit tests, fasta tests and fasta legacy mode tests."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": [
+            "create_sdk",
+            "dartdevc_test",
+            "kernel_platform_files",
+            "runtime_kernel"
+          ]
+        },
+        {
+          "name": "unit tests",
+          "arguments": [
+            "--checked",
+            "--compiler=none",
+            "--runtime=vm",
+            "--timeout=240",
+            "pkg/(kernel|front_end|fasta)"
+          ]
+        },
+        {
+          "name": "fasta sdk tests",
+          "arguments": [
+            "--compiler=fasta",
+            "--runtime=none",
+            "--strong"
+          ]
+        },
+        {
+          "name": "fasta legacy mode sdk tests",
+          "arguments": [
+            "--compiler=fasta",
+            "--runtime=none"
+          ]
+        }
+      ]
+    },
+    {
+      "builders": [
         "vm-linux-debug-ia32",
         "vm-linux-debug-simarm",
         "vm-linux-debug-x64",
diff --git a/tools/buildtools/update.py b/tools/buildtools/update.py
index 8658059..1b38f4b 100755
--- a/tools/buildtools/update.py
+++ b/tools/buildtools/update.py
@@ -6,6 +6,7 @@
 """Pulls down tools required to build Dart."""
 
 import os
+import platform
 import subprocess
 import shutil
 import sys
@@ -28,7 +29,8 @@
 
 
 def UpdateGNOnWindows():
-  sha1_file = os.path.join(BUILDTOOLS, 'win', 'gn.exe.sha1')
+  sha1_file = os.path.join(TOOLS_BUILDTOOLS, 'win', 'gn.exe.sha1')
+  output_dir = os.path.join(BUILDTOOLS, 'win', 'gn.exe')
   downloader_script = os.path.join(
       DEPOT_PATH, 'download_from_google_storage.py')
   download_cmd = [
@@ -41,7 +43,9 @@
     '--bucket',
     'chromium-gn',
     '-s',
-    sha1_file
+    sha1_file,
+    '-o',
+    output_dir
   ]
   return subprocess.call(download_cmd)
 
@@ -68,8 +72,8 @@
   return subprocess.call(download_cmd)
 
 
-# On Mac and Linux we copy clang-format to the place where git cl format
-# expects it to be.
+# On Mac and Linux we copy clang-format and gn to the place where git cl format
+# expects them to be.
 def CopyClangFormat():
   if sys.platform == 'darwin':
     platform = 'darwin'
@@ -85,12 +89,23 @@
 
   clang_format = os.path.join(
       BUILDTOOLS, toolchain, 'clang', 'bin', 'clang-format')
-  dest = os.path.join(BUILDTOOLS, tools, 'clang-format')
-  shutil.copy2(clang_format, dest)
+  gn = os.path.join(BUILDTOOLS, toolchain, 'gn')
+  dest_dir = os.path.join(BUILDTOOLS, tools)
+  if not os.path.exists(dest_dir):
+    os.makedirs(dest_dir)
+  clang_format_dest = os.path.join(dest_dir, 'clang-format')
+  gn_dest = os.path.join(dest_dir, 'gn')
+  shutil.copy2(clang_format, clang_format_dest)
+  shutil.copy2(gn, gn_dest)
   return 0
 
 
 def main(argv):
+  arch_id = platform.machine()
+  # Don't try to download binaries if we're on an arm machine.
+  if arch_id.startswith('arm') or arch_id.startswith('aarch64'):
+    print('Not downloading buildtools binaries for ' + arch_id)
+    return 0
   if sys.platform.startswith('win'):
     result = UpdateGNOnWindows()
     if result != 0:
diff --git a/tools/buildtools/win/gn.exe.sha1 b/tools/buildtools/win/gn.exe.sha1
new file mode 100644
index 0000000..0ef132f
--- /dev/null
+++ b/tools/buildtools/win/gn.exe.sha1
@@ -0,0 +1 @@
+e93779cab57d5f36100faa4d88524a1e33be7b0f
diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
index bc21bfd..9ca2cf9 100644
--- a/tools/dom/src/EventStreamProvider.dart
+++ b/tools/dom/src/EventStreamProvider.dart
@@ -136,6 +136,9 @@
       this;
   bool get isBroadcast => true;
 
+  // TODO(9757): Inlining should be smart and inline only when inlining would
+  // enable scalar replacement of an immediately allocated receiver.
+  @ForceInline()
   StreamSubscription<T> listen(void onData(T event),
       {Function onError, void onDone(), bool cancelOnError}) {
     return new _EventStreamSubscription<T>(
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index a745435..d64e858 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -57,6 +57,7 @@
   bool get supportsRegister => supportsRegisterElement;
 
   @DomName('Document.createElement')
+  @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
     return (typeExtension == null)
         ? _createElement_2(tagName)
diff --git a/tools/gn.py b/tools/gn.py
index d727fbc..7d37620 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -153,9 +153,12 @@
 def DontUseClang(args, target_os, host_cpu, target_cpu):
   # We don't have clang on Windows.
   return (target_os == 'win'
-         # TODO(zra): After we roll our clang toolchain to pick up the fix for
-         # https://reviews.llvm.org/D34691 we should be able to use clang for
-         # arm as well.
+         # TODO(infra): Clang cannot compile boringssl and tcmalloc in -mthumb
+         # mode.
+         # See dartbug.com/32363.
+         #
+         # We also can't compile the whole VM with clang in -marm mode
+         # See: dartbug.com/32362.
          or (target_os == 'linux'
              and target_cpu.startswith('arm')
              and target_cpu != 'arm64'
@@ -478,9 +481,9 @@
   if sys.platform.startswith(('cygwin', 'win')):
     subdir = 'win'
   elif sys.platform == 'darwin':
-    subdir = 'mac'
+    subdir = 'mac-x64'
   elif sys.platform.startswith('linux'):
-    subdir = 'linux64'
+    subdir = 'linux-x64'
   else:
     print 'Unknown platform: ' + sys.platform
     return 1
@@ -491,7 +494,10 @@
     for mode in args.mode:
       for arch in args.arch:
         out_dir = GetOutDir(mode, arch, target_os)
-        command = [gn, 'gen', out_dir, '--check']
+        # TODO(infra): Re-enable --check. Many targets fail to use
+        # public_deps to re-expose header files to their dependents.
+        # See dartbug.com/32364
+        command = [gn, 'gen', out_dir]
         gn_args = ToCommandLine(ToGnArgs(args, mode, arch, target_os))
         gn_args += GetGNArgs(args)
         if args.verbose:
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 0e116ef..4fd651a 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -33,6 +33,10 @@
       builders { name: "dart-sdk-windows-try"}
       builders { name: "vm-kernel-mac-release-x64-try"}
       builders { name: "benchmark-linux-try"}
+      builders {
+        name: "front-end-linux-release-x64-try"
+        experiment_percentage: 100
+      }
     }
     try_job_retry_config {
       try_job_retry_quota: 0
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 71d70d4..5b26014 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -283,6 +283,7 @@
     if (configuration.runtime == Runtime.none) {
       expectations = expectations.toSet();
       expectations.remove(Expectation.runtimeError);
+      expectations.remove(Expectation.ok);
       expectations.remove(Expectation.missingRuntimeError);
       expectations.remove(Expectation.timeout);
       if (expectations.isEmpty) expectations.add(Expectation.pass);
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index 314139d..3441c84 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -41,16 +41,19 @@
   } else {
     dot_packages = rebase_path("$_dart_root/.packages")
   }
+  output = "$root_gen_dir/$name.dart.snapshot"
+  if (defined(invoker.output)) {
+    output = invoker.output
+  }
   compiled_action(target_name) {
     tool = "$_dart_root/runtime/bin:dart"
     deps = extra_deps
-    depfile = "$root_gen_dir/$name.dart.snapshot.d"
+    depfile = "$output.d"
 
     main_file = rebase_path(main_dart)
 
     inputs = extra_inputs + [ main_file ]
 
-    output = "$root_gen_dir/$name.dart.snapshot"
     outputs = [
       output,
     ]
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 36ede78..c9eaf7a 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -85,3 +85,20 @@
     "dart:core",
   ]
 }
+
+compile_platform("compile_dart2js_platform_strong") {
+  sources = [
+    "../../sdk/lib/libraries.json",
+  ]
+
+  outputs = [
+    "$root_out_dir/dart2js_platform_strong.dill",
+    "$root_out_dir/dart2js_outline_strong.dill",
+  ]
+
+  args = [
+    "--target=dart2js",
+    "--strong",
+    "dart:core",
+  ]
+}
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index 6f539d9..ad61e49 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -31,6 +31,20 @@
   ]
 }
 
+application_snapshot("frontend_server") {
+  main_dart = "../../pkg/vm/bin/frontend_server_starter.dart"
+  deps = [
+    "../../runtime/vm:kernel_platform_files($dart_host_toolchain)",
+  ]
+  sdk_root = rebase_path("$root_out_dir")
+  training_args = [
+    "--train",
+    "--sdk-root=$sdk_root/",
+    "--platform=$sdk_root/vm_platform.dill",
+  ]
+  output = "$root_out_dir/frontend_server.dart.snapshot"
+}
+
 dart_action("kernel_service_dill") {
   deps = [
     "../../runtime/vm:vm_legacy_platform",
