diff --git a/BUILD.gn b/BUILD.gn
index 6f97c3c..6a4a55e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -36,9 +36,6 @@
 group("runtime") {
   import("runtime/runtime_args.gni")
 
-  target_supports_aot = dart_target_arch == "arm" ||
-                        dart_target_arch == "arm64" || dart_target_arch == "x64"
-
   if (targetting_fuchsia) {
     # Fuchsia has run_vm_tests marked testonly.
     testonly = true
@@ -53,9 +50,6 @@
     "runtime/vm:kernel_platform_files($host_toolchain)",
     "utils/kernel-service:kernel-service",
   ]
-  if (target_supports_aot) {
-    deps += [ "runtime/bin:precompiler_entry_points_json" ]
-  }
 }
 
 group("runtime_kernel") {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 36b3269..b6949d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 2.1.0-dev.6.0
+
 ## 2.1.0-dev.5.0
 
 ### Core library changes
diff --git a/DEPS b/DEPS
index cc19e00..efd5aea 100644
--- a/DEPS
+++ b/DEPS
@@ -78,9 +78,9 @@
   #     minutes later.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_tag": "6f3efd209ff1828835936397b64be79265cc0c19",  # Please see the note above before updating.
+  "dart_style_tag": "1.2.0",  # Please see the note above before updating.
 
-  "dartdoc_tag" : "v0.20.4",
+  "dartdoc_tag" : "v0.21.1",
   "fixnum_tag": "0.10.8",
   "func_rev": "25eec48146a58967d75330075ab376b3838b18a8",
   "glob_tag": "1.1.7",
@@ -95,7 +95,7 @@
   "intl_tag": "0.15.6",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "2.0.9",
-  "linter_tag": "0.1.62",
+  "linter_tag": "0.1.63",
   "logging_tag": "0.11.3+2",
   "markdown_tag": "2.0.2",
   "matcher_tag": "0.12.3",
diff --git a/docs/language/dart.sty b/docs/language/dart.sty
index a7e9cb7..d6c265d 100644
--- a/docs/language/dart.sty
+++ b/docs/language/dart.sty
@@ -1,6 +1,5 @@
-\def\code#1{\textsf{#1}}
-\def\builtinId#1{\code{\textbf{#1}}}
-\def\keyword#1{\code{\textbf{#1}}}
+\def\builtinId#1{\textsf{\textbf{#1}}}
+\def\keyword#1{\textsf{\textbf{#1}}}
 \def\metavar#1{\ensuremath{\mathit{#1}}}
 
 \def\ABSTRACT{\builtinId{abstract}}
@@ -66,20 +65,16 @@
 \def\WITH{\keyword{with}}
 \def\YIELD{\keyword{yield}}
 
+% Used for inline code snippets.
+\def\code#1{\texttt{#1}}
+
 % `call` has no special lexical status, so we just use \code{}.
 \def\CALL{\code{call}}
 
-% Used in regular text to indicate that #1 consists of non-terminals.
-%% TODO(eernst): Update to use grammar font when we start using that;
-%% at this point we just make it "regular text" using \mbox.
-\newcommand{\NonTerminal}[1]{\mbox{#1}}
-
-% Angle brackets used for operators in grammar context.
-\def\lt{\ensuremath{<}}
-\def\gt{\ensuremath{>}}
-
-% A quoted comma as used in the grammar: needs spacing fix.
-\newcommand{\gcomma}{\mbox{`,\hspace{-0.1em}'}}
+% Define commands for `<<`, `>>`, `>>>` that avoid introducing guillemets.
+\def\ltlt{<\mbox <}
+\def\gtgt{>\mbox >}
+\def\gtgtgt{>\mbox >\mbox >}
 
 % Used as line break in the right hand side of a grammar
 % alternative, that is, when starting a "continuation line".
@@ -102,15 +97,15 @@
 \newcommand{\Case}[1]{\textbf{Case }$\langle\hspace{0.1em}${#1}$\hspace{0.1em}\rangle$\textbf{.}}
 
 \newenvironment{dartCode}[1][!ht] {
-%  \begin{verbatim}[#1]
-  \def\@programcr{\@addfield\strut}
-  \let\\=\@programcr
-  \relax\@vobeyspaces\obeylines
+  \def\@programcr{\@addfield\strut}%
+  \let\\=\@programcr%
+  \relax\@vobeyspaces\obeylines%
+  \ttfamily%
+  \vspace{1em}
+}{\vspace{1em}}
 
-  \sffamily
-}{
-  %\end{verbatim}
-}
+% Used for comments in a code context.
+\def\comment#1{\textsf{#1}}
 
 % A commonly used name for an identifier
 \newcommand{\id}{\metavar{id}}
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index b37d438..72d9f1d 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -1,14 +1,15 @@
 \documentclass{article}
 \usepackage{epsfig}
 \usepackage{color}
+\usepackage{syntax}
 \usepackage{dart}
-\usepackage{bnf}
 \usepackage{hyperref}
 \usepackage{lmodern}
 \usepackage[T1]{fontenc}
 \title{Dart Programming Language Specification\\
 {5th edition draft}\\
 {\large Version 2.1.0-dev}}
+\author{}
 
 % For information about Location Markers (and in particular the
 % commands \LMHash and \LMLabel), see the long comment at the
@@ -56,6 +57,8 @@
 %   \ref{unqualifiedInvocation}, \ref{functionExpressionInvocation},
 %   \ref{superInvocations}, \ref{assignment}, \ref{compoundAssignment},
 %   \ref{localVariableDeclaration}, and \ref{return}.
+% - Corrected error involving multiple uses of the same part in the same
+%   program such that it takes exports into account.
 %
 % 2.0
 % - Don't allow functions as assert test values.
@@ -263,18 +266,16 @@
 }
 
 \begin{grammar}
-{\sf
-{\bf AProduction:}AnAlternative;
-  AnotherAlternative;
-  OneThing After Another;
-  ZeroOrMoreThings*;
-  OneOrMoreThings+;
-  AnOptionalThing?;
-  (Some Grouped Things);
-  \~{}NotAThing;
-  A\_LEXICAL\_THING
-  .
-}
+<aProduction> ::= <anAlternative>
+  \alt <anotherAlternative>
+  \alt <oneThing> <after> <another>
+  \alt <zeroOrMoreThings>*
+  \alt <oneOrMoreThings>+
+  \alt <anOptionalThing>?
+  \alt (<some> <grouped> <things>)
+  \alt \~{}<notAThing>
+  \alt `aTerminal'
+  \alt <A\_LEXICAL\_THING>
 \end{grammar}
 
 \LMHash{}
@@ -624,44 +625,46 @@
 Variables are storage locations in memory.
 
 \begin{grammar}
-{\bf variableDeclaration:}declaredIdentifier (`,' identifier)*
-  .
+<variableDeclaration> ::= <declaredIdentifier> (`,' <identifier>)*
 
-{\bf declaredIdentifier:}metadata finalConstVarOrType identifier
-  .
+<declaredIdentifier> ::= <metadata> <finalConstVarOrType> <identifier>
 
-{\bf finalConstVarOrType:}\FINAL{} type?;
-  \CONST{} type?;
-  varOrType
-  .
+<finalConstVarOrType> ::= \FINAL{} <type>?
+  \alt \CONST{} <type>?
+  \alt <varOrType>
 
-{\bf varOrType:}\VAR{};
-  type
-  .
+<varOrType> ::= \VAR{}
+  \alt <type>
 
-{\bf initializedVariableDeclaration:}declaredIdentifier (`=' expression)? (`,' initializedIdentifier)*
-  .
+<initializedVariableDeclaration> ::=
+  <declaredIdentifier> (`=' <expression>)? (`,' <initializedIdentifier>)*
 
-{\bf initializedIdentifier:}identifier (`=' expression)?
-  .
+<initializedIdentifier> ::= <identifier> (`=' <expression>)?
 
-{\bf initializedIdentifierList:}initializedIdentifier (`,' initializedIdentifier)*
-  .
+<initializedIdentifierList> ::= <initializedIdentifier> (`,' <initializedIdentifier>)*
 \end{grammar}
 
 \LMHash{}
 A variable declaration that contains one or more terms of the form
-\NonTerminal{initializedIdentifier}
+\syntax{<identifier>}
 (\commentary{i.e., a declaration that declares two or more variables})
 is equivalent to multiple variable declarations declaring
 the same set of variable names in the same order,
+with the same type and modifiers.
+
+\LMHash{}
+An initialized variable declaration that contains one or more terms of the form
+\syntax{<initializedIdentifier>}
+(\commentary{a declaration that declares two or more initialized variables})
+is equivalent to multiple variable declarations declaring
+the same set of variable names in the same order,
 with the same initialization, type, and modifiers.
 
 \commentary{
 For example,
-\code{\VAR{} x = 1, y;}
+\code{\VAR{} x, y;}
 is equivalent to
-\code{\VAR{} x = 1; \VAR{} y;}
+\code{\VAR{} x; \VAR{} y;}
 and
 \code{\STATIC{} \FINAL{} String s1, s2 = "foo";}
 is equivalent to
@@ -673,7 +676,7 @@
 \code{$N$ $v$;}
 \code{$N$ $v$ = $e$;}
 where $N$ is derived from
-\NonTerminal{metadata finalConstVarOrType},
+\syntax{<metadata> <finalConstVarOrType>},
 we say that $v$ is the {\em declaring occurrence} of the identifier.
 For every identifier which is not a declaring occurrence,
 we say that it is an {\em referencing occurrence}.
@@ -684,7 +687,7 @@
 In an expression of the form \code{$e$.\id} it is possible that
 $e$ has static type \DYNAMIC{} and \id{} cannot be associated with
 any declaration named \id{} at compile-time,
-but in this situation \id{} is still an referencing identifier.
+but in this situation \id{} is still a referencing identifier.
 }
 
 \LMHash{}
@@ -916,22 +919,17 @@
 Functions abstract over executable actions.
 
 \begin{grammar}
-{\bf functionSignature:}metadata returnType? identifier formalParameterPart
-  .
+<functionSignature> ::= <metadata> <returnType>? <identifier> <formalParameterPart>
 
-{\bf formalParameterPart:}typeParameters? formalParameterList
-  .
+<formalParameterPart> ::= <typeParameters>? <formalParameterList>
 
-{\bf returnType:}\VOID{};
-  type
-  .
+<returnType> ::= \VOID{}
+  \alt <type>
 
-{\bf functionBody:}\ASYNC{}? `={\escapegrammar \gt}' expression `{\escapegrammar ;}';
-  (\ASYNC{} $|$ \ASYNC* $|$ \SYNC*)? block
-  .
+<functionBody> ::= \ASYNC{}? `=>' <expression> `;'
+  \alt (\ASYNC{} | \ASYNC `*' | \SYNC `*')? <block>
 
-{\bf block:}`\{' statements `\}'
-  .
+<block> ::= `{' <statements> `}'
 \end{grammar}
 
 \LMHash{}
@@ -950,7 +948,7 @@
 and it always specifies its formal parameter list.
 A function body is either:
 \begin{itemize}
-\item A block statement (\ref{blocks}) containing the statements (\ref{statements}) executed by the function, optionally marked with one of the modifiers: \ASYNC, \ASYNC* or \SYNC*.
+\item A block statement (\ref{blocks}) containing the statements (\ref{statements}) executed by the function, optionally marked with one of the modifiers: \ASYNC, \code{\ASYNC*} or \code{\SYNC*}.
 
   \commentary{
   Because Dart is optionally typed, we cannot guarantee that a function that does not return a value will not be used in the context of an expression.
@@ -978,9 +976,9 @@
 \end{itemize}
 
 \LMHash{}
-A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \ASYNC* modifier.
+A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \code{\ASYNC*} modifier.
 Otherwise the function is {\em synchronous}.
-A function is a {\em generator} if its body is marked with the \SYNC* or \ASYNC* modifier.
+A function is a {\em generator} if its body is marked with the \code{\SYNC*} or \code{\ASYNC*} modifier.
 
 \commentary{
 Whether a function is synchronous or asynchronous is orthogonal to whether it is a generator or not.
@@ -991,7 +989,7 @@
 }
 
 \LMHash{}
-It is a compile-time error if an \ASYNC, \ASYNC* or \SYNC* modifier is attached to the body of a setter or constructor.
+It is a compile-time error if an \ASYNC, \code{\ASYNC*} or \code{\SYNC*} modifier is attached to the body of a setter or constructor.
 
 \rationale{
 An asynchronous setter would be of little use, since setters can only be used in the context of an assignment (\ref{assignment}),
@@ -1004,15 +1002,15 @@
 If you need to produce an object asynchronously, use a method.
 
 One could allow modifiers for factories.
-A factory for \code{Future} could be modified by \ASYNC{}, a factory for \code{Stream} could be modified by \ASYNC* and a factory for \code{Iterable} could be modified by \SYNC*.
+A factory for \code{Future} could be modified by \ASYNC{}, a factory for \code{Stream} could be modified by \code{\ASYNC*} and a factory for \code{Iterable} could be modified by \code{\SYNC*}.
 No other scenario makes sense because the object returned by the factory would be of the wrong type.
 This situation is very unusual so it is not worth making an exception to the general rule for constructors in order to allow it.
 }
 
 \LMHash{}
 It is a compile-time error if the declared return type of a function marked \ASYNC{} is not a supertype of \code{Future<$T$>} for some type $T$.
-It is a compile-time error if the declared return type of a function marked \SYNC* is not a supertype of \code{Iterable<$T$>} for some type $T$.
-It is a compile-time error if the declared return type of a function marked \ASYNC* is not a supertype of \code{Stream<$T$>} for some type $T$.
+It is a compile-time error if the declared return type of a function marked \code{\SYNC*} is not a supertype of \code{Iterable<$T$>} for some type $T$.
+It is a compile-time error if the declared return type of a function marked \code{\ASYNC*} is not a supertype of \code{Stream<$T$>} for some type $T$.
 
 
 \subsection{Function Declarations}
@@ -1112,27 +1110,22 @@
 It is a compile-time error if a formal parameter is declared as a constant variable (\ref{variables}).
 
 \begin{grammar}
-{\bf formalParameterList:}`(' `)';
-  `(' normalFormalParameters \gcomma{}? `)';
-  `(' normalFormalParameters \gcomma{} optionalFormalParameters `)';
-  `(' optionalFormalParameters `)'
-  .
+<formalParameterList> ::= `(' `)'
+  \alt `(' <normalFormalParameters> `,'? `)'
+  \alt `(' <normalFormalParameters> `,' <optionalFormalParameters> `)'
+  \alt `(' <optionalFormalParameters> `)'
 
-{\bf normalFormalParameters:}normalFormalParameter (\gcomma{} normalFormalParameter)*
-  .
+<normalFormalParameters> ::= <normalFormalParameter> (`,' <normalFormalParameter>)*
 
-{\bf optionalFormalParameters:}optionalPositionalFormalParameters;
-  namedFormalParameters
-  .
+<optionalFormalParameters> ::= <optionalPositionalFormalParameters>
+  \alt <namedFormalParameters>
 
-{\bf optionalPositionalFormalParameters:}`[' defaultFormalParameter (\gcomma{} defaultFormalParameter)* \gcomma{}? `]'
-  .
+<optionalPositionalFormalParameters> ::= `[' <defaultFormalParameter> (`,' <defaultFormalParameter>)* `,'? `]'
 
-{\bf namedFormalParameters:}`\{' defaultNamedParameter (\gcomma{} defaultNamedParameter)* \gcomma{}? `\}'
-  .
+<namedFormalParameters> ::= `{' <defaultNamedParameter> (`,' <defaultNamedParameter>)* `,'? `}'
 \end{grammar}
 
-Formal parameter lists allow an optional trailing comma after the last parameter (\gcomma{}?).
+Formal parameter lists allow an optional trailing comma after the last parameter (\syntax{`,'?}).
 A parameter list with such a trailing comma is equivalent in all ways to the same parameter list without the trailing comma.
 All parameter lists in this specification are shown without a trailing comma, but the rules and semantics apply equally to the corresponding parameter list with a trailing comma.
 
@@ -1150,21 +1143,17 @@
 \end{itemize}
 
 \begin{grammar}
-{\bf normalFormalParameter:}functionFormalParameter;
-  fieldFormalParameter;
-  simpleFormalParameter
-  .
+<normalFormalParameter> ::= <functionFormalParameter>
+  \alt <fieldFormalParameter>
+  \alt <simpleFormalParameter>
 
-{\bf functionFormalParameter:}metadata \COVARIANT{}? returnType? identifier
-  \gnewline{} formalParameterPart
-  .
+<functionFormalParameter> ::= <metadata> \COVARIANT{}? <returnType>? <identifier>
+  \gnewline{} <formalParameterPart>
 
-{\bf simpleFormalParameter:}metadata \COVARIANT{}? finalConstVarOrType? identifier;
-  .
+<simpleFormalParameter> ::= <metadata> \COVARIANT{}? <finalConstVarOrType>? <identifier>
 
-{\bf fieldFormalParameter:}metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier
-  \gnewline{} formalParameterPart?
-  .
+<fieldFormalParameter> ::= <metadata> <finalConstVarOrType>? \THIS{} `.' <identifier>
+  \gnewline{} <formalParameterPart>?
 \end{grammar}
 
 \LMHash{}
@@ -1187,22 +1176,16 @@
 Optional parameters may be specified and provided with default values.
 
 \begin{grammar}
-{\bf defaultFormalParameter:}normalFormalParameter (`=' expression)?
-  .
+<defaultFormalParameter> ::= <normalFormalParameter> (`=' <expression>)?
 
-{\bf defaultNamedParameter:}normalFormalParameter (`=' expression)?;
-  normalFormalParameter ( `{\escapegrammar :}' expression)?
-  .
+<defaultNamedParameter> ::= <normalFormalParameter> (`=' <expression>)?
+  \alt <normalFormalParameter> ( `:' <expression>)?
 \end{grammar}
 
-A {\bf defaultNamedParameter} of the form:
-\begin{code}
-   normalFormalParameter : expression
-\end{code}
+A \syntax{<defaultNamedParameter>} of the form
+\syntax{<normalFormalParameter> `:' <expression>}
 is equivalent to one of the form:
-\begin{code}
-   normalFormalParameter = expression
-\end{code}
+\syntax{<normalFormalParameter> `=' <expression>}.
 The colon-syntax is included only for backwards compatibility.
 It is deprecated and will be removed in a later version of the language specification.
 
@@ -1211,7 +1194,7 @@
 If no default is explicitly specified for an optional parameter an implicit default of \NULL{} is provided.
 
 \LMHash{}
-It is a compile-time error if the name of a named optional parameter begins with an `\_' character.
+It is a compile-time error if the name of a named optional parameter begins with an `_' character.
 
 \rationale{
 The need for this restriction is a direct consequence of the fact that naming and privacy are not orthogonal.
@@ -1323,48 +1306,41 @@
 Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}).
 
 \begin{grammar}
-{\bf classDefinition:}metadata \ABSTRACT{}? \CLASS{} identifier typeParameters?
-  \gnewline{} superclass? mixins? interfaces?
-  \gnewline{} `\{' (metadata classMemberDefinition)* `\}';
-  metadata \ABSTRACT{}? \CLASS{} mixinApplicationClass
-  .
+<classDefinition> ::= <metadata> \ABSTRACT{}? \CLASS{} <identifier> <typeParameters>?
+  \gnewline{} <superclass>? <mixins>? <interfaces>?
+  \gnewline{} `{' (<metadata> <classMemberDefinition>)* `}'
+  \alt <metadata> \ABSTRACT{}? \CLASS{} <mixinApplicationClass>
 
-{\bf mixins:}\WITH{} typeList
-  .
+<mixins> ::= \WITH{} <typeList>
 
-{\bf classMemberDefinition:}declaration `{\escapegrammar ;}' ;
-  methodSignature functionBody
-  .
+<classMemberDefinition> ::= <declaration> `;'
+  \alt <methodSignature> <functionBody>
 
-{\bf methodSignature:}constructorSignature initializers?;
-  factoryConstructorSignature;
+<methodSignature> ::= <constructorSignature> <initializers>?
+  \alt <factoryConstructorSignature>
 % This doesn't work: `static @override foo() => 42`, but `functionSignature` starts with metadata. https://github.com/dart-lang/sdk/issues/29614
-  \STATIC{}? functionSignature;
-  \STATIC{}? getterSignature;
-  \STATIC{}? setterSignature;
-  operatorSignature
-  .
+  \alt \STATIC{}? <functionSignature>
+  \alt \STATIC{}? <getterSignature>
+  \alt \STATIC{}? <setterSignature>
+  \alt <operatorSignature>
 
-{\bf declaration:}constantConstructorSignature (redirection $|$ initializers)?;
-  constructorSignature (redirection $|$ initializers)?;
-  \EXTERNAL{} constantConstructorSignature;
-  \EXTERNAL{} constructorSignature;
-  ((\EXTERNAL{} \STATIC{}?))? getterSignature;
-  ((\EXTERNAL{} \STATIC{}?))? setterSignature;
-  \EXTERNAL{}? operatorSignature;
+<declaration> ::= <constantConstructorSignature> (<redirection> | <initializers>)?
+  \alt <constructorSignature> (<redirection> | <initializers>)?
+  \alt \EXTERNAL{} <constantConstructorSignature>
+  \alt \EXTERNAL{} <constructorSignature>
+  \alt ((\EXTERNAL{} \STATIC{}?))? <getterSignature>
+  \alt ((\EXTERNAL{} \STATIC{}?))? <setterSignature>
+  \alt \EXTERNAL{}? <operatorSignature>
 % This doesn't work: `static @override foo() => 42`, but `functionSignature` starts with metadata. https://github.com/dart-lang/sdk/issues/29614
-  ((\EXTERNAL{} \STATIC{}?))? functionSignature;
-  \STATIC{} (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList;
+  \alt ((\EXTERNAL{} \STATIC{}?))? <functionSignature>
+  \alt \STATIC{} (\FINAL{} | \CONST{}) <type>? <staticFinalDeclarationList>
 %      \CONST{} type? staticFinalDeclarationList;
-  \FINAL{} type? initializedIdentifierList;
-  (\STATIC{} $|$ \COVARIANT{})? (\VAR{} $|$ type) initializedIdentifierList
-  .
+  \alt \FINAL{} <type>? <initializedIdentifierList>
+  \alt (\STATIC{} | \COVARIANT{})? (\VAR{} | <type>) <initializedIdentifierList>
 
-{\bf staticFinalDeclarationList:}staticFinalDeclaration (\gcomma{} staticFinalDeclaration)*
-  .
+<staticFinalDeclarationList> ::= <staticFinalDeclaration> (`,' <staticFinalDeclaration>)*
 
-{\bf staticFinalDeclaration:}identifier `=' expression
-  .
+<staticFinalDeclaration> ::= <identifier> `=' <expression>
 \end{grammar}
 
 \LMHash{}
@@ -1441,13 +1417,13 @@
   \VAR{} j;
   f(x) => 3;
 \}
-
+\\
 \CLASS{} B \EXTENDS{} A \{
-  int i = 1; // getter i and setter i= override versions from A
-  \STATIC{} j; // compile-time error: static getter \& setter conflict with
-  // instance getter \& setter
-
-  /* compile-time error: static method conflicts with instance method */
+  int i = 1; // \comment{getter i and setter i= override versions from A}
+  \STATIC{} j; // \comment{compile-time error: static getter \& setter conflict with}
+  // \comment{instance getter \& setter}
+\\
+  // \comment{compile-time error: static method conflicts with instance method}
   \STATIC{} f(x) => 3;
 \}
 \end{dartCode}
@@ -1492,68 +1468,118 @@
 {\em Operators} are instance methods with special names.
 
 \begin{grammar}
-{\bf operatorSignature:}returnType? \OPERATOR{} operator formalParameterList
-  .
+<operatorSignature> ::= <returnType>? \OPERATOR{} <operator> <formalParameterList>
 
-{\bf operator:}`\~{}';
-  binaryOperator;
-  `[]' ;
-  `[]='
-  .
+<operator> ::= `~'
+  \alt <binaryOperator>
+  \alt `[]'
+  \alt `[]='
 
-{\bf binaryOperator:}multiplicativeOperator;
-  additiveOperator;
-  shiftOperator;
-  relationalOperator;
-  `==';
-  bitwiseOperator
-  .
+<binaryOperator> ::= <multiplicativeOperator>
+  \alt <additiveOperator>
+  \alt <shiftOperator>
+  \alt <relationalOperator>
+  \alt `=='
+  \alt <bitwiseOperator>
 \end{grammar}
 
 \LMHash{}
 An operator declaration is identified using the built-in identifier (\ref{identifierReference}) \OPERATOR{}.
 
 \LMHash{}
-The following names are allowed for user-defined operators: \code{<, >, <=, >=, ==, -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []=, [], \~{}}.
+The following names are allowed for user-defined operators:
+\syntax{`<'},
+\syntax{`>'},
+\syntax{`<='},
+\syntax{`>='},
+\syntax{`=='},
+\syntax{`-'},
+\syntax{`+'},
+\syntax{`/'},
+\syntax{`~'},
+\syntax{`*'},
+\syntax{`\%'},
+\syntax{`|'},
+\syntax{`^'},
+\syntax{`\&'},
+\syntax{`\ltlt'},
+\syntax{`\gtgt'},
+\syntax{`\gtgtgt'},
+\syntax{`[]='},
+\syntax{`[]'},
+\syntax{`~'}.
 
 \LMHash{}
-It is a compile-time error if the arity of the user-declared operator \code{[]=} is not 2.
-It is a compile-time error if the arity of a user-declared operator with one of the names: \code{<, >, <=, >=, ==, -, +, \~{}/, /, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []} is not 1.
-It is a compile-time error if the arity of the user-declared operator \code{-} is not 0 or 1.
+It is a compile-time error if the arity of the user-declared operator
+\syntax{`[]='} is not 2.
+It is a compile-time error if the arity of a user-declared operator with one of the names:
+\syntax{`<'},
+\syntax{`>'},
+\syntax{`<='},
+\syntax{`>='},
+\syntax{`=='},
+\syntax{`-'},
+\syntax{`+'},
+\syntax{`~/'},
+\syntax{`/'},
+\syntax{`*'},
+\syntax{`\%'},
+\syntax{`|'},
+\syntax{`^'},
+\syntax{`\&'},
+\syntax{`\ltlt'},
+\syntax{`\gtgt'},
+\syntax{`\gtgtgt'},
+\syntax{`[]'}
+is not 1.
+It is a compile-time error if the arity of the user-declared operator
+\syntax{`-'}
+is not 0 or 1.
 
 \commentary{
-The \code{-} operator is unique in that two overloaded versions are permitted.
+The \syntax{`-'} operator is unique
+in that two overloaded versions are permitted.
 If the operator has no arguments, it denotes unary minus.
 If it has an argument, it denotes binary subtraction.
 }
 
 \LMHash{}
-The name of the unary operator \code{-} is \code{unary-}.
+The name of the unary operator \syntax{`-'} is \code{unary-}.
 
 \rationale{
 This device allows the two methods to be distinguished for purposes of method lookup, override and reflection.
 }
 
 \LMHash{}
-It is a compile-time error if the arity of the user-declared operator \code{\~{}} is not 0.
+It is a compile-time error if the arity of the user-declared operator
+\syntax{`~'}
+is not 0.
 
 \LMHash{}
 It is a compile-time error to declare an optional parameter in an operator.
 
 \LMHash{}
-It is a compile-time error if the return type of a user-declared operator \code{[]=} is explicitly declared and not \VOID{}.
+It is a compile-time error if the return type of a user-declared operator
+\syntax{`[]='}
+is explicitly declared and not \VOID{}.
 
 \commentary{
-If no return type is specified for a user-declared operator \code{[]=}, its return type is \VOID{} (\ref{typeOfAFunction}).
+If no return type is specified for a user-declared operator
+\syntax{`[]='},
+its return type is \VOID{} (\ref{typeOfAFunction}).
 }
 
 \rationale{
 The return type is \VOID{} because
-a return statement in an implementation of operator \code{[]=} does not return a value.
+a return statement in an implementation of operator
+\syntax{`[]='}
+does not return a value.
 Consider a non-throwing evaluation of an expression $e$ of the form \code{$e_1$[$e_2$] = $e_3$},
 and assume that the evaluation of $e_3$ yields an instance $o$.
 $e$ will then evaluate to $o$,
-and even if the executed body of operator \code{[]=} completes with a value $o'$,
+and even if the executed body of operator
+\syntax{`[]='}
+completes with a value $o'$,
 that is, if $o'$ is returned, that value is simply ignored.
 The rationale for this behavior is that assignments should be guaranteed to evaluate to the assigned value.
 }
@@ -1566,8 +1592,7 @@
 Getters are functions (\ref{functions}) that are used to retrieve the values of object properties.
 
 \begin{grammar}
-{\bf getterSignature:}returnType? \GET{} identifier
-  .
+<getterSignature> ::= <returnType>? \GET{} <identifier>
 \end{grammar}
 
 \LMHash{}
@@ -1602,8 +1627,7 @@
 Setters are functions (\ref{functions}) that are used to set the values of object properties.
 
 \begin{grammar}
-{\bf setterSignature:}returnType? \SET{} identifier formalParameterList
-  .
+<setterSignature> ::= <returnType>? \SET{} <identifier> <formalParameterList>
 \end{grammar}
 
 \commentary{
@@ -1692,16 +1716,16 @@
 }
 
 \begin{dartCode}
-  class Base \{
-    int get one => 1;
-  \}
-
-  abstract class Mix \{
-    int get one;
-    int get two => one + one;
-  \}
-
-  class C extends Base with Mix \{ \}
+class Base \{
+  int get one => 1;
+\}
+\\
+\ABSTRACT{} \CLASS{} Mix \{
+  int get one;
+  int get two => one + one;
+\}
+\\
+\CLASS{} C extends Base with Mix \{ \}
 \end{dartCode}
 
 \rationale{
@@ -1781,8 +1805,7 @@
 A {\em generative constructor} consists of a constructor name, a constructor parameter list, and either a redirect clause or an initializer list and an optional body.
 
 \begin{grammar}
-{\bf constructorSignature:}identifier (`{\escapegrammar .}' identifier)? formalParameterList
-  .
+<constructorSignature> ::= <identifier> (`.' <identifier>)? <formalParameterList>
 \end{grammar}
 
 \LMHash{}
@@ -1858,8 +1881,7 @@
 instead, it has a redirect clause that specifies which constructor the invocation is redirected to, and with which arguments.
 
 \begin{grammar}
-{\bf redirection:}`{\escapegrammar :}' \THIS{} (`{\escapegrammar .}' identifier)? arguments
-  .
+<redirection> ::= `:' \THIS{} (`.' <identifier>)? <arguments>
 \end{grammar}
 
 \def\ConstMetavar{\mbox{\CONST{}?}}
@@ -1934,25 +1956,22 @@
 \commentary{
 There are three kinds of initializers.
 \begin{itemize}
-\item A {\em superinitializer} identifies a {\em superconstructor}\,---\,that is, a specific constructor of the superclass.
+\item[$\bullet$] A {\em superinitializer} identifies a {\em superconstructor}\,---\,that is, a specific constructor of the superclass.
 Execution of the superinitializer causes the initializer list of the superconstructor to be executed.
-\item An {\em instance variable initializer} assigns a value to an individual instance variable.
-\item An assertion.
+\item[$\bullet$] An {\em instance variable initializer} assigns a value to an individual instance variable.
+\item[$\bullet$] An assertion.
 \end{itemize}
 }
 
 \begin{grammar}
-{\bf initializers:}`{\escapegrammar :}' initializerListEntry (\gcomma{} initializerListEntry)*
-  .
+<initializers> ::= `:' <initializerListEntry> (`,' <initializerListEntry>)*
 
-{\bf initializerListEntry:}\SUPER{} arguments;
-  \SUPER{} `{\escapegrammar .}' identifier arguments;
-  fieldInitializer;
-  assertion
-  .
+<initializerListEntry> ::= \SUPER{} <arguments>
+  \alt \SUPER{} `.' <identifier> <arguments>
+  \alt <fieldInitializer>
+  \alt <assertion>
 
-{\bf fieldInitializer:}(\THIS{} `{\escapegrammar .}')? identifier `=' conditionalExpression cascadeSection*
-  .
+<fieldInitializer> ::= (\THIS{} `.')? <identifier> `=' <conditionalExpression> <cascadeSection>*
 \end{grammar}
 
 \LMHash{}
@@ -2053,7 +2072,8 @@
 
 \LMHash{}
 The instance variable declarations of the immediately enclosing class are visited in the order they appear in the program text.
-For each such declaration $d$, if $d$ has the form \code{\metavar{finalConstVarOrType} $v$ = $e$; }
+For each such declaration $d$, if $d$ has the form
+\code{\syntax{finalConstVarOrType} $v$ = $e$; }
 then $e$ is evaluated to an object $o$
 and the instance variable $v$ of $i$ is bound to $o$.
 
@@ -2151,8 +2171,7 @@
 A {\em factory} is a constructor prefaced by the built-in identifier (\ref{identifierReference}) \FACTORY{}.
 
 \begin{grammar}
-{\bf factoryConstructorSignature:}\FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalParameterList
-  .
+<factoryConstructorSignature> ::= \FACTORY{} <identifier> (`.' <identifier>)? <formalParameterList>
 \end{grammar}
 
 %The enclosing scope of a factory constructor is the static scope \ref{} of the class in which it is declared.
@@ -2186,9 +2205,8 @@
 A {\em redirecting factory constructor} specifies a call to a constructor of another class that is to be used whenever the redirecting constructor is called.
 
 \begin{grammar}
-{\bf redirectingFactoryConstructorSignature:}\CONST{}? \FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalParameterList
-  \gnewline{} `=' type (`{\escapegrammar .}' identifier)?
-  .
+<redirectingFactoryConstructorSignature> ::= \CONST{}? \FACTORY{} <identifier> (`.' <identifier>)? <formalParameterList>
+  \gnewline{} `=' <type> (`.' <identifier>)?
 \end{grammar}
 
 Assume that
@@ -2202,7 +2220,7 @@
 \begin{dartCode}
 $\ConstMetavar$ \FACTORY{}
     $N$($T_1\ x_1 \ldots,\ T_n\ x_n,\ $[$T_{n+1}\ x_{n+1} = d_1 \ldots,\ T_{n+k}\ x_{n+k} = d_k$]) = $R$;
-
+\\
 $\ConstMetavar$ \FACTORY{}
     $N$($T_1\ x_1 \ldots,\ T_n\ x_n,\ $\{$T_{n+1}\ x_{n+1} = d_1 \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) = $R$;
 \end{dartCode}
@@ -2360,8 +2378,7 @@
 A constant constructor is prefixed by the reserved word \CONST{}.
 
 \begin{grammar}
-{\bf constantConstructorSignature:}\CONST{} qualified formalParameterList
-  .
+<constantConstructorSignature> ::= \CONST{} <qualified> <formalParameterList>
 \end{grammar}
 
 %\commentary{Spell out subtleties: a constant constructor call within the initializer of a constant constructor is treated as a ordinary constructor call (a new), because the arguments cannot be assumed constant anymore. In practice, this means two versions are compiled and analyzed. One for new and one for const.}
@@ -2445,9 +2462,9 @@
 \begin{dartCode}
 \CLASS{} D \{
   \FINAL{} w;
-  \CONST{} D.makeList(p): w = \CONST{} [p]; // compile-time error
-  \CONST{} D.makeMap(p): w = \CONST{} \{``help'': q\}; // compile-time error
-  \CONST{} D.makeC(p): w = \CONST{} C(p, 12); // compile-time error
+  \CONST{} D.makeList(p): w = \CONST{} [p]; // \comment{compile-time error}
+  \CONST{} D.makeMap(p): w = \CONST{} \{``help'': q\}; // \comment{compile-time error}
+  \CONST{} D.makeC(p): w = \CONST{} C(p, 12); // \comment{compile-time error}
 \}
 \end{dartCode}
 
@@ -2528,8 +2545,7 @@
 It is a compile-time error to specify an \EXTENDS{} clause for class \code{Object}.
 
 \begin{grammar}
-{\bf superclass:}\EXTENDS{} type
-  .
+<superclass> ::= \EXTENDS{} <type>
 \end{grammar}
 
 %The superclass clause of a class C is processed within the enclosing scope of the static scope of C.
@@ -2554,10 +2570,9 @@
 
 \begin{dartCode}
 class T \{\}
-
+\\
 /* Compilation error: Attempt to subclass a type parameter */
 class G<T> extends T \{\}
-
 \end{dartCode}
 
 \LMHash{}
@@ -2665,7 +2680,7 @@
   for getters, setters, methods and constructors (\ref{scoping}).
   An instance or static variable $f$ introduces a getter $f$,
   and a mutable instance or static variable $f$ also introduces a setter
-  \code{$f$=} (\ref{instanceVariables}, \ref{staticVariables}).
+  \code{$f$=} (\ref{instanceVariables}, \ref{variables}).
   When we speak of members here, we mean
   accessible instance or static variables, getters, setters, and methods
   (\ref{classes}).
@@ -2766,8 +2781,7 @@
 This set includes the interface of its superclass and the interfaces specified in the \IMPLEMENTS{} clause of the class.
 
 \begin{grammar}
-{\bf interfaces:}\IMPLEMENTS{} typeList
-  .
+<interfaces> ::= \IMPLEMENTS{} <typeList>
 \end{grammar}
 
 \LMHash{}
@@ -2798,7 +2812,7 @@
 \LMHash{}
 Let $C$ be a concrete class that does not have a concrete \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
 %% TODO(eernst): Adjust to use 'correctly overrides' terminology.
-It is a compile-time error if the implicit interface of $C$ includes an accessible instance member $m$ of type $F$,
+It is a compile-time error if the implicit interface of $C$ has an accessible instance member $m$ of type $F$,
 and $C$ does not declare or inherit a corresponding concrete instance member $m$ of type $F'$ such that $F' <: F$.
 
 \commentary{
@@ -2821,7 +2835,7 @@
 
 \LMHash{}
 %% TODO(eernst): Switch to use 'correctly overrides' terminology.
-It is a compile-time error if the implicit interface of a class $C$ includes an instance member $m$ of type $F$ and $C$ declares or inherits a corresponding instance member $m$ of type $F'$ if $F'$ is not a subtype of $F$.
+It is a compile-time error if the implicit interface of a class $C$ has an instance member $m$ of type $F$ and $C$ declares or inherits a corresponding instance member $m$ of type $F'$ if $F'$ is not a subtype of $F$.
 
 \rationale{
 However, if a class does explicitly declare a member that conflicts with its superinterface, this always yields an error.
@@ -2836,13 +2850,16 @@
 \subsection{Class Member Conflicts}
 \LMLabel{classMemberConflicts}
 
+\LMHash{}
 Some pairs of class member declarations cannot coexist,
 even though they do not both introduce the same name into the same scope.
 This section specifies these errors.
 
+\LMHash{}
 The {\em basename} of a getter or method named $n$ is $n$;
 the basename of a setter named \code{$n$=} is $n$.
 
+\LMHash{}
 Let $C$ be a class.
 It is a compile-time error if $C$ declares a
 \begin{itemize}
@@ -2966,11 +2983,9 @@
 or type \code{FutureOr<$T$>} for any $T$ (\ref{typeFutureOr}).
 
 \begin{grammar}
-{\bf mixinApplicationClass:}identifier typeParameters? `=' mixinApplication `{\escapegrammar ;}'
-  .
+<mixinApplicationClass> ::= <identifier> <typeParameters>? `=' <mixinApplication> `;'
 
-{\bf mixinApplication:}type mixins interfaces?
-  .
+<mixinApplication> ::= <type> <mixins> <interfaces>?
 \end{grammar}
 
 \LMHash{}
@@ -2996,8 +3011,9 @@
 let $S$ be the superclass of $C$, and let $S_N$ be the name of $S$.
 
 For each generative constructor of the form \code{$S_q$($T_{1}$ $a_{1}$, $\ldots$, $T_{k}$ $a_{k}$)} of $S$ that is accessible to $L_C$, $C$ has an implicitly declared constructor of the form
+
 \begin{dartCode}
-$C_q$($T_{1}$ $a_{1}$, \ldots, $T_{k}$ $a_{k}$):$\SUPER_q$($a_{1}$, $\ldots$, $a_{k}$);
+$C_q$($T_{1}$ $a_{1}$, \ldots, $T_{k}$ $a_{k}$): $\SUPER_q$($a_{1}$, $\ldots$, $a_{k}$);
 \end{dartCode}
 
 \noindent
@@ -3009,6 +3025,7 @@
 
 \LMHash{}
 For each generative constructor of the form \code{$S_q$($T_{1}$ $a_{1}$, \ldots , $T_{k}$ $a_{k}$, [$T_{k+1}$ $a_{k+1}$ = $d_1$, \ldots , $T_{k+p}$ $a_{k+p}$ = $d_p$])} of $S$ that is accessible to $L_C$, $C$ has an implicitly declared constructor of the form
+
 \begin{dartCode}
 $C_q$($T_{1}$ $a_{1}$, \ldots , $T_{k}$ $a_{k}$, [$T_{k+1}$ $a_{k+1}$ = $d'_{1}$, \ldots , $T_{k+p}$ $a_{k+p}$ = $d'_p$])
     : $\SUPER_q$($a_{1}$, \ldots , $a_{k}$, $a_{k+1}$, \ldots, $a_p$);
@@ -3026,6 +3043,7 @@
 
 \LMHash{}
 For each generative constructor of the form \code{$S_q$($T_{1}$ $a_{1}$, \ldots , $T_{k}$ $a_{k}$, \{$T_{k+1}$ $a_{k+1}$ = $d_1$, \ldots , $T_{k+n}$ $a_{k+n}$ = $d_n$\})} of $S$ that is accessible to $L_C$, $C$ has an implicitly declared constructor of the form
+
 \begin{dartCode}
 $C_q$($T_{1}$ $a_{1}$, \ldots , $T_{k}$ $a_{k}$, \{$T_{k+1}$ $a_{k+1}$ = $d'_1$, \ldots , $T_{k+n}$ $a_{k+n}$ = $d'_n$\})
     : $\SUPER_q$($a_{1}$, \ldots , $a_{k}$, $a_{k+1}$: $a_{k+1}$, \ldots, $a_p$: $a_p$);
@@ -3125,28 +3143,26 @@
 An {\em enumerated type}, or {\em enum}, is used to represent a fixed number of constant values.
 
 \begin{grammar}
-{\bf enumType:}metadata \ENUM{} identifier
-  \gnewline{} `\{' enumEntry (\gcomma{} enumEntry)* (\gcomma{})? `\}'
-  .
+<enumType> ::= <metadata> \ENUM{} <identifier>
+  \gnewline{} `{' <enumEntry> (`,' <enumEntry>)* (`,')? `}'
 
-{\bf enumEntry:}metadata identifier
-  .
+<enumEntry> ::= <metadata> <identifier>
 \end{grammar}
 
 \LMHash{}
 The declaration of an enum of the form
-\code{$m$ \ENUM{} E \{$m_0\,\,\id_0, \ldots,\ m_{n-1}\,\,\id_{n-1}$\}}
+\code{$m$ \ENUM{} $E$ \{$m_0\,\,\id_0, \ldots,\ m_{n-1}\,\,\id_{n-1}$\}}
 has the same effect as a class declaration
 
 \begin{dartCode}
-$m$ \CLASS{} E \{
+$m$ \CLASS{} $E$ \{
   \FINAL{} int index;
-  \CONST{} E(\THIS{}.index);
-  $m_0$ \STATIC{} \CONST{} E id$_0$ = \CONST{} E(0);
+  \CONST{} $E$(\THIS{}.index);
+  $m_0$ \STATIC{} \CONST{} $E$ $\id_0$ = \CONST{} $E$(0);
   $\ldots$
-  $m_{n-1}$ \STATIC{} \CONST{} E id$_{n-1}$ = const E(n - 1);
-  \STATIC{} \CONST{} List<E> values = const <E>[\id$_0, \ldots, $ \id$_{n-1}$];
-  String toString() => \{ 0: `E.\id$_0$', $\ldots$, n-1: `E.\id$_{n-1}$'\}[index]
+  $m_{n-1}$ \STATIC{} \CONST{} $E$ $\id_{n-1}$ = const $E$(n - 1);
+  \STATIC{} \CONST{} List<$E$> values = const <$E$>[\id$_0, \ldots, $ \id$_{n-1}$];
+  String toString() => \{ 0: `$E$.\id$_0$', $\ldots$, n-1: `$E$.\id$_{n-1}$'\}[index]
 \}
 \end{dartCode}
 
@@ -3258,11 +3274,9 @@
 }
 
 \begin{grammar}
-{\bf typeParameter:}metadata identifier (\EXTENDS{} type)?
-  .
+<typeParameter> ::= <metadata> <identifier> (\EXTENDS{} <type>)?
 
-{\bf typeParameters:}`<' typeParameter (\gcomma{} typeParameter)* `>'
-  .
+<typeParameters> ::= `<' <typeParameter> (`,' <typeParameter>)* `>'
 \end{grammar}
 
 \LMHash{}
@@ -3302,10 +3316,10 @@
 
 \begin{dartCode}
 \CLASS{} Ordered<T> \{
-  operator > (T x);
+  operator >(T x);
 \}
 
-\CLASS{} Sorter<T \EXTENDS{} Ordered<T$>>$ \{
+\CLASS{} Sorter<T \EXTENDS{} Ordered<T\gtgt{} \{
    sort(List<T> l) {... l[n] < l[n+1] ...}
 \}
 
@@ -3314,9 +3328,9 @@
 \commentary{
 Even where type parameters are in scope there are numerous restrictions at this time:
 \begin{itemize}
-\item A type parameter cannot be used to name a constructor in an instance creation expression (\ref{instanceCreation}).
-\item A type parameter cannot be used as a superclass or superinterface (\ref{superclasses}, \ref{superinterfaces}, \ref{interfaceSuperinterfaces}).
-\item A type parameter cannot be used as a generic type.
+\item[$\bullet$] A type parameter cannot be used to name a constructor in an instance creation expression (\ref{instanceCreation}).
+\item[$\bullet$] A type parameter cannot be used as a superclass or superinterface (\ref{superclasses}, \ref{superinterfaces}, \ref{interfaceSuperinterfaces}).
+\item[$\bullet$] A type parameter cannot be used as a generic type.
 \end{itemize}
 
 The normative versions of these are given in the appropriate sections of this specification.
@@ -3651,7 +3665,7 @@
 \CLASS{} A<X \EXTENDS{} num> \{
   X x;
 \}
-
+\\
 A<Object> a;
 \end{dartCode}
 
@@ -3723,8 +3737,7 @@
 Dart supports metadata which is used to attach user defined annotations to program structures.
 
 \begin{grammar}
-{\bf metadata:}(`@' qualified ({\escapegrammar `.'} identifier)? (arguments)?)*
-  .
+<metadata> ::= (`@' <qualified> (`.' <identifier>)? (<arguments>)?)*
 \end{grammar}
 
 \LMHash{}
@@ -3789,31 +3802,25 @@
 the evaluation of $e$ stops at that point and throws the same exception object and stack trace.
 
 \begin{grammar}
-{\bf expression:}assignableExpression assignmentOperator expression;
-  conditionalExpression cascadeSection*;
-  throwExpression
-  .
+<expression> ::= <assignableExpression> <assignmentOperator> <expression>
+  \alt <conditionalExpression> <cascadeSection>*
+  \alt <throwExpression>
 
-{\bf expressionWithoutCascade:}assignableExpression assignmentOperator
-  \gnewline{} expressionWithoutCascade;
-  conditionalExpression;
-  throwExpressionWithoutCascade
-  .
+<expressionWithoutCascade> ::= <assignableExpression> <assignmentOperator>
+  \gnewline{} <expressionWithoutCascade>
+  \alt <conditionalExpression>
+  \alt <throwExpressionWithoutCascade>
 
-{\bf expressionList:}expression (\gcomma{} expression)*
-  .
-\end{grammar}
+<expressionList> ::= <expression> (`,' <expression>)*
 
-\begin{grammar}
-{\bf primary:}thisExpression;
-  \SUPER{} unconditionalAssignableSelector;
-  functionExpression;
-  literal;
-  identifier;
-  newExpression;
-  constObjectExpression;
-  `(' expression `)'
-  .
+<primary> ::= <thisExpression>
+  \alt \SUPER{} <unconditionalAssignableSelector>
+  \alt <functionExpression>
+  \alt <literal>
+  \alt <identifier>
+  \alt <newExpression>
+  \alt <constObjectExpression>
+  \alt `(' <expression> `)'
 \end{grammar}
 
 \LMHash{}
@@ -3825,7 +3832,7 @@
 }
 
 
-\subsubsection{Object Identity}
+\subsection{Object Identity}
 \LMLabel{objectIdentity}
 
 \LMHash{}
@@ -3897,13 +3904,13 @@
 \item A simple or qualified identifier denoting a top-level function (\ref{functions}) or a static method (\ref{staticMethods}) that is not qualified by a deferred prefix.
 \item A parenthesized expression \code{($e$)} where $e$ is a constant expression.
 \item An expression of the form \code{identical($e_1$, $e_2$)} where $e_1$ and $e_2$ are constant expressions and \code{identical()} is statically bound to the predefined dart function \code{identical()} discussed above (\ref{objectIdentity}).
-\item An expression of one of the forms \code{$e_1$ == $e_2$} or \code{$e_1$ != $e_2$} where $e_1$ and $e_2$ are constant expressions, and either both evaluate to a numeric, string or boolean value, or at least one of $e_1$ or $e_2$ evaluates to the null object (\ref{null}).
-\item An expression of one of the forms \code{!$e$}, \code{$e_1$ \&\& $e_2$} or \code{$e_1 || e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a boolean value.
-\item An expression of one of the forms \~{}$e$, $e_1$ \^{} $e_2$, \code{$e_1$ \& $e_2$}, $e_1 | e_2$, $e_1 << e_2$, $e_1 >> e_2$ or $e_1 >>> e_2$, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to an integer value or to the null object (\ref{null}).
-\item An expression of the form \code{$e_1 + e_2$} where $e_1$ and $e_2$ are constant expressions that evaluate to a numeric or string value or to the null object (\ref{null}).
-\item An expression of one of the forms \code{$-e$}, \code{$e_1$ - $e_2$}, \code{$e_1$ * $e_2$}, \code{$e_1$ / $e_2$,} \code{$e_1$ \~{}/ $e_2$}, \code{$e_1 > e_2$}, \code{$e_1 < e_2$}, \code{$e_1$ >= $e_2$}, \code{$e_1$ <= $e_2$} or \code{$e_1$ \% $e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a numeric value or to the null object (\ref{null}).
-\item An expression of the form \code{$e_1$?$e_2$:$e3$} where $e_1$, $e_2$ and $e_3$ are constant expressions and $e_1$ evaluates to a boolean value.
-\item An expression of the form \code{$e_1 ?? e_2$} where $e_1$ and $e_2$ are constant expressions.
+\item An expression of one of the forms \code{$e_1$\,==\,$e_2$} or \code{$e_1$\,!=\,$e_2$} where $e_1$ and $e_2$ are constant expressions, and either both evaluate to a numeric, string or boolean value, or at least one of $e_1$ or $e_2$ evaluates to the null object (\ref{null}).
+\item An expression of one of the forms \code{!$e$}, \code{$e_1$\,\&\&\,$e_2$} or \code{$e_1$\,||\,$e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a boolean value.
+\item An expression of one of the forms \code{\~{}$e$}, \code{$e_1$\,\^\,$e_2$}, \code{$e_1$\,\&\,$e_2$}, \code{$e_1$\,|\,$e_2$}, \code{$e_1$\,<\mbox<\,$e_2$}, \code{$e_1$\,\gtgt\,$e_2$} or \code{$e_1$\,\gtgtgt\,$e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to an integer value or to the null object (\ref{null}).
+\item An expression of the form \code{$e_1$\,+\,$e_2$} where $e_1$ and $e_2$ are constant expressions that evaluate to a numeric or string value or to the null object (\ref{null}).
+\item An expression of one of the forms \code{-$e$}, \code{$e_1$\,-\,$e_2$}, \code{$e_1$\,*\,$e_2$}, \code{$e_1$\,/\,$e_2$,} \code{$e_1$\,\~{}/\,$e_2$}, \code{$e_1$\,>\,$e_2$}, \code{$e_1$\,<\,$e_2$}, \code{$e_1$\,>=\,$e_2$}, \code{$e_1$\,<=\,$e_2$} or \code{$e_1$\,\%\,$e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a numeric value or to the null object (\ref{null}).
+\item An expression of the form \code{$e_1$\,?\,$e_2$\,:\,$e3$} where $e_1$, $e_2$ and $e_3$ are constant expressions and $e_1$ evaluates to a boolean value.
+\item An expression of the form \code{$e_1$\,??\,$e_2$} where $e_1$ and $e_2$ are constant expressions.
 \item An expression of the form \code{$e$.length} where $e$ is a constant expression that evaluates to a string value.
 \end{itemize}
 
@@ -3928,18 +3935,18 @@
 }
 
 \begin{dartCode}
-\CONST{} x = 1 ~/ 0;
-\FINAL{} y = 1 ~/ 0;
-
+\CONST{} x = 1 \~{}/ 0;
+\FINAL{} y = 1 \~{}/ 0;
+\\
 \CLASS{} K \{
   m1() \{
-   \VAR{} z = \FALSE{};
-    \IF{} (z) \{\RETURN{} x; \}
+    \VAR{} z = \FALSE{};
+    \IF{} (z) \{ \RETURN{} x; \}
     \ELSE{} \{ \RETURN{} 2; \}
   \}
-
+\\
   m2() \{
-    \IF{} (\TRUE{}) \{\RETURN{} y; \}
+    \IF{} (\TRUE{}) \{ \RETURN{} y; \}
     \ELSE{} \{ \RETURN{} 3; \}
   \}
 \}
@@ -3971,12 +3978,12 @@
 }
 
 \rationale{
-One might reasonably ask why $e_1? e_1: e_3$ and $e_1?? e_2$ have constant forms.
-For example, if $e_1$ is known statically, why do we need to test it?.
+One might reasonably ask why $e_1$\,?\,$e_1$\,:\,$e_3$ and $e_1$\,??\,$e_2$ have constant forms.
+For example, if $e_1$ is known statically, why do we need to test it?
 The answer is that there are contexts where $e_1$ is a variable.
 In particular, constant constructor initializers such as
 
-\code{\CONST{} C(foo) : \THIS.foo = foo ?? someDefaultValue;}
+\code{\CONST{} C(foo): \THIS.foo = foo ?? someDefaultValue;}
 }
 
 \LMHash{}
@@ -3987,22 +3994,21 @@
 }
 
 \begin{dartCode}
-\CLASS{} CircularConsts\{
-// Illegal program - mutually recursive compile-time constants
-  \STATIC{} \CONST{} i = j; // a compile-time constant
-  \STATIC{} \CONST{} j = i; // a compile-time constant
+\CLASS{} CircularConsts \{
+  // \comment{Illegal program - mutually recursive compile-time constants}
+  \STATIC{} \CONST{} i = j; // \comment{a compile-time constant}
+  \STATIC{} \CONST{} j = i; // \comment{a compile-time constant}
 \}
 \end{dartCode}
 
 \begin{grammar}
-{\bf literal:}nullLiteral;
-  booleanLiteral;
-  numericLiteral;
-  stringLiteral;
-  symbolLiteral;
-  mapLiteral;
-  listLiteral
-  .
+<literal> ::= <nullLiteral>
+  \alt <booleanLiteral>
+  \alt <numericLiteral>
+  \alt <stringLiteral>
+  \alt <symbolLiteral>
+  \alt <mapLiteral>
+  \alt <listLiteral>
 \end{grammar}
 
 
@@ -4013,8 +4019,7 @@
 The reserved word \NULL{} evaluates to the {\em null object}.
 
 \begin{grammar}
-{\bf nullLiteral:}\NULL{}
-  .
+<nullLiteral> ::= \NULL{}
 \end{grammar}
 
 \LMHash{}
@@ -4034,25 +4039,20 @@
 A {\em numeric literal} is either a decimal or hexadecimal numeral representing an integer value, or a decimal double representation.
 
 \begin{grammar}
-{\bf numericLiteral:}NUMBER;
-  HEX\_NUMBER
-  .
+<numericLiteral> ::= <NUMBER>
+  \alt <HEX\_NUMBER>
 
-{\bf NUMBER:}DIGIT+ (`{\escapegrammar.}' DIGIT+)? EXPONENT?;
-  {`\escapegrammar .}' DIGIT+ EXPONENT?
-  .
+<NUMBER> ::= <DIGIT>+ (`.' <DIGIT>+)? <EXPONENT>?
+  \alt `.' <DIGIT>+ <EXPONENT>?
 
-{\bf EXPONENT:}(`e' $|$ `E') (`+' $|$ `-')? DIGIT+
-  .
+<EXPONENT> ::= (`e' | `E') (`+' | `-')? <DIGIT>+
 
-{\bf HEX\_NUMBER:}`0x' HEX\_DIGIT+;
-  `0X' HEX\_DIGIT+
-  .
+<HEX\_NUMBER> ::= `0x' <HEX\_DIGIT>+
+  \alt `0X' <HEX\_DIGIT>+
 
-{\bf HEX\_DIGIT:}`a'{\escapegrammar ..}`f';
-  `A'{\escapegrammar ..}`F';
-  DIGIT
-  .
+<HEX\_DIGIT> ::= `a' .. `f'
+  \alt `A' .. `F'
+  \alt <DIGIT>
 \end{grammar}
 
 \LMHash{}
@@ -4091,7 +4091,7 @@
 then evaluation of $l$ proceeds as follows:
 \begin{itemize}
   \item{} If $l$ is a hexadecimal integer literal,
-  $2^{63} \le{} i \lt{} 2^{64}$ and the \code{int} class is implemented as
+  $2^{63} \le i < 2^{64}$ and the \code{int} class is implemented as
   signed 64-bit two's complement integers,
   then $l$ evaluates to an instance of the \code{int} class
   representing the numeric value $i - 2^{64}$,
@@ -4145,9 +4145,8 @@
 They are the {\em boolean literals}.
 
 \begin{grammar}
-{\bf booleanLiteral:}\TRUE{};
-  \FALSE{}
-  .
+<booleanLiteral> ::= \TRUE{}
+  \alt \FALSE{}
 \end{grammar}
 
 \LMHash{}
@@ -4173,19 +4172,17 @@
 }
 
 \begin{grammar}
-{\bf stringLiteral:}(multilineString $|$ singleLineString)+
-  .
+<stringLiteral> ::= (<multilineString> | <singleLineString>)+
 \end{grammar}
 
 \LMHash{}
 A string can be a sequence of single line strings and multiline strings.
 
 \begin{grammar}
-{\bf singleLineString:}`{\escapegrammar \code{"}}' stringContentDQ* `{\escapegrammar \code{"}}';
-  `{\escapegrammar \code{'}}' stringContentSQ* `{\escapegrammar \code{'}}';
-  `r{\escapegrammar \code{'}}' (\~{}( `{\escapegrammar \code{'}}' $|$ NEWLINE ))* `{\escapegrammar \code{'}}';
-  `r{\escapegrammar \code{"}}' (\~{}( `{\escapegrammar \code{"}}' $|$ NEWLINE ))* `{\escapegrammar \code{"}}'
-  .
+<singleLineString> ::= `"' <stringContentDQ>* `"'
+  \alt `\'' <stringContentSQ>* `\''
+  \alt `r\'' (\~{}( `\'' | <NEWLINE>))* `\''
+  \alt `r"' (\~{}( `"' | <NEWLINE>))* `"'
 \end{grammar}
 
 \LMHash{}
@@ -4208,7 +4205,7 @@
 }
 
 \begin{dartCode}
-print("A string" "and then another"); // prints: A stringand then another
+print("A string" "and then another"); // \comment{A stringand then another}
 \end{dartCode}
 
 \rationale{
@@ -4249,31 +4246,28 @@
 \end{dartCode}
 
 \begin{grammar}
-{\bf multilineString:}`{\escapegrammar \texttt{"""}}' stringContentTDQ* `{\escapegrammar \texttt{"""}}';
-  `{\escapegrammar \code{'}\code{'}\code{'}}' stringContentTSQ* `{\escapegrammar \code{'}\code{'}\code{'}}';
-  `r{\escapegrammar \texttt{"""}}' (\~{} `{\escapegrammar \texttt{"""}}')* `{\escapegrammar \texttt{"""}}';
-  `r{\escapegrammar \code{'}\code{'}\code{'}}' (\~{} `{\escapegrammar \code{'}\code{'}\code{'}}')* `{\escapegrammar \code{'}\code{'}\code{'}}'
-  .
+<multilineString> ::= `"""' <stringContentTDQ>* `"""'
+  \alt `\'\mbox\'\mbox\'' <stringContentTSQ>* `\'\mbox\'\mbox\''
+  \alt `r"""' (\~{} `"""')* `"""'
+  \alt `r\'\mbox\'\mbox\'' (\~{} `\'\mbox\'\mbox\'')* `\'\mbox\'\mbox\''
 
-{\bf ESCAPE\_SEQUENCE:}`$\backslash$n';
-  `$\backslash$r';
-  `$\backslash$f';
-  `$\backslash$b';
-  `$\backslash$t';
-  `$\backslash$v';
-  `$\backslash$x' HEX\_DIGIT HEX\_DIGIT;
-  `$\backslash$u' HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT;
-  `$\backslash$u\{' HEX\_DIGIT\_SEQUENCE `\}'
-  .
+<ESCAPE\_SEQUENCE> ::= `\\n'
+  \alt `\\r'
+  \alt `\\f'
+  \alt `\\b'
+  \alt `\\t'
+  \alt `\\v'
+  \alt `\\x' <HEX\_DIGIT> <HEX\_DIGIT>
+  \alt `\\u' <HEX\_DIGIT> <HEX\_DIGIT> <HEX\_DIGIT> <HEX\_DIGIT>
+  \alt `\\u{' <HEX\_DIGIT\_SEQUENCE> `}'
 
-{\bf HEX\_DIGIT\_SEQUENCE:}HEX\_DIGIT HEX\_DIGIT? HEX\_DIGIT?
-  \gnewline{} HEX\_DIGIT? HEX\_DIGIT? HEX\_DIGIT?
-  .
+<HEX\_DIGIT\_SEQUENCE> ::= <HEX\_DIGIT> <HEX\_DIGIT>? <HEX\_DIGIT>?
+  \gnewline{} <HEX\_DIGIT>? <HEX\_DIGIT>? <HEX\_DIGIT>?
 \end{grammar}
 
 \LMHash{}
 Multiline strings are delimited by either matching triples of single quotes or matching triples of double quotes.
-If the first line of a multiline string consists solely of the whitespace characters defined by the production {\em WHITESPACE} (\ref{lexicalRules}), possibly prefixed by $\backslash$, then that line is ignored, including the line break at its end.
+If the first line of a multiline string consists solely of the whitespace characters defined by the production {\em WHITESPACE} (\ref{lexicalRules}), possibly prefixed by \syntax{`\\'}, then that line is ignored, including the line break at its end.
 
 \rationale{
 The idea is to ignore a whitespace-only first line of a multiline string, where whitespace is defined as tabs, spaces and the final line break.
@@ -4288,58 +4282,61 @@
 Strings support escape sequences for special characters.
 The escapes are:
 \begin{itemize}
-\item $\backslash$n for newline, equivalent to $\backslash$x0A.
-\item $\backslash$r for carriage return, equivalent to $\backslash$x0D.
-\item $\backslash$f for form feed, equivalent to $\backslash$x0C.
-\item $\backslash$b for backspace, equivalent to $\backslash$x08.
-\item $\backslash$t for tab, equivalent to $\backslash$x09.
-\item $\backslash$v for vertical tab, equivalent to $\backslash$x0B.
-\item $\backslash$x $HEX\_DIGIT_1$ $HEX\_DIGIT_2$, equivalent to
+\item \syntax{`\\n'} for newline, equivalent to \syntax{`\\x0A'}.
+\item \syntax{`\\r'} for carriage return, equivalent to \syntax{`\\x0D'}.
+\item \syntax{`\\f'} for form feed, equivalent to \syntax{`\\x0C'}.
+\item \syntax{`\\b'} for backspace, equivalent to \syntax{`\\x08'}.
+\item \syntax{`\\t'} for tab, equivalent to \syntax{`\\x09'}.
+\item \syntax{`\\v'} for vertical tab, equivalent to \syntax{`\\x0B'}.
+\item \syntax{`\\x' <HEX\_DIGIT>$_1$ <HEX\_DIGIT>$_2$}, equivalent to
 
-$\backslash$u\{$HEX\_DIGIT_1$ $HEX\_DIGIT_2$\}.
-\item $\backslash$u $HEX\_DIGIT_1$ $HEX\_DIGIT_2$ $HEX\_DIGIT_3$ $HEX\_DIGIT_4$, equivalent to $\backslash$u\{$HEX\_DIGIT_1$ $HEX\_DIGIT_2$ $HEX\_DIGIT_3$ $HEX\_DIGIT_4$\}.
-\item $\backslash$u\{$HEX\_DIGIT\_SEQUENCE$\} is the Unicode code point represented by the $HEX\_DIGIT\_SEQUENCE$.
-It is a compile-time error if the value of the $HEX\_DIGIT\_SEQUENCE$ is not a valid Unicode code point.
-\item \$ indicating the beginning of an interpolated expression.
-\item Otherwise, $\backslash k$ indicates the character $k$ for any $k$ not in $\{n, r, f, b, t, v, x, u\}$.
+\syntax{`\\u{' <HEX\_DIGIT>$_1$ <HEX\_DIGIT>$_2$ `}'}.
+\item \syntax{`\\u' <HEX\_DIGIT>$_1$ <HEX\_DIGIT>$_2$ <HEX\_DIGIT>$_3$ <HEX\_DIGIT>$_4$},
+equivalent to
+\syntax{`\\u{' <HEX\_DIGIT>$_1$ <HEX\_DIGIT>$_2$ <HEX\_DIGIT>$_3$ <HEX\_DIGIT>$_4$ `}'}.
+\item \syntax{`\\u{' <HEX\_DIGIT\_SEQUENCE> `}'} is the Unicode code point represented by the
+\syntax{<HEX\_DIGIT\_SEQUENCE>}.
+It is a compile-time error if the value of the
+\syntax{<HEX\_DIGIT\_SEQUENCE>}
+is not a valid Unicode code point.
+\item \syntax{`$'} indicating the beginning of an interpolated expression.
+\item Otherwise, \syntax{`\\'$k$} indicates the character $k$ for any $k$ not in
+\syntax{$\{$`n', `r', `f', `b', `t', `v', `x', `u'$\}$}.
 \end{itemize}
 
 \LMHash{}
-Any string may be prefixed with the character `r', indicating that it is a {\em raw string}, in which case no escapes or interpolations are recognized.
+Any string may be prefixed with the character \syntax{`r'},
+indicating that it is a {\em raw string},
+in which case no escapes or interpolations are recognized.
 
 \LMHash{}
-Line breaks in a multiline string are represented by the {\em NEWLINE} production.
+Line breaks in a multiline string are represented by the \syntax{<NEWLINE>} production.
 A line break introduces a single newline character into the string value.
 
 \LMHash{}
-It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$x that is not followed by a sequence of two hexadecimal digits.
-It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$u that is not followed by either a sequence of four hexadecimal digits, or by curly brace delimited sequence of hexadecimal digits.
+It is a compile-time error if a non-raw string literal contains a character sequence of the form \syntax{`\\x'} that is not followed by a sequence of two hexadecimal digits.
+It is a compile-time error if a non-raw string literal contains a character sequence of the form \syntax{`\\u'} that is not followed by either a sequence of four hexadecimal digits, or by curly brace delimited sequence of hexadecimal digits.
 
 \begin{grammar}
-{\bf stringContentDQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{"}}' $|$ `\$' $|$ NEWLINE );
-  `$\backslash$' \~{}( NEWLINE );
-  stringInterpolation
-  .
+<stringContentDQ> ::= \~{}( `\\' | `"' | `$' | <NEWLINE> )
+  \alt `\\' \~{}( <NEWLINE> )
+  \alt <stringInterpolation>
 
-{\bf stringContentSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{'}}' $|$ `\$' $|$ NEWLINE );
-  `$\backslash$' \~{}( NEWLINE );
-  stringInterpolation
-  .
+<stringContentSQ> ::= \~{}( `\\' | `\'' | `$' | <NEWLINE> )
+  \alt `\\' \~{}( <NEWLINE> )
+  \alt <stringInterpolation>
 
-{\bf stringContentTDQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{"""}}' $|$ `\$');
-  `$\backslash$' \~{}( NEWLINE );
-  stringInterpolation
-  .
+<stringContentTDQ> ::= \~{}( `\\' | `"""' | `$')
+  \alt `\\' \~{}( <NEWLINE> )
+  \alt <stringInterpolation>
 
-{\bf stringContentTSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \code{'}\code{'}\code{'}}' $|$ `\$');
-  `$\backslash$' \~{}( NEWLINE );
-  stringInterpolation
-  .
+<stringContentTSQ> ::= \~{}( `\\' | `\'\'\'' | `$')
+  \alt `\\' \~{}( <NEWLINE> )
+  \alt <stringInterpolation>
 
-{\bf NEWLINE:}$\backslash$n;
-  $\backslash$r;
-  $\backslash$r$\backslash$n
-  .
+<NEWLINE> ::= `\\n'
+  \alt `\\r'
+  \alt `\\r\\n'
 \end{grammar}
 
 \LMHash{}
@@ -4356,9 +4353,8 @@
 This process is known as {\em string interpolation}.
 
 \begin{grammar}
-{\bf stringInterpolation:}`\$' IDENTIFIER\_NO\_DOLLAR;
-  `\$\{' expression `\}'
-  .
+<stringInterpolation> ::= `$' <IDENTIFIER\_NO\_DOLLAR>
+  \alt `${' <expression> `}'
 \end{grammar}
 
 \commentary{
@@ -4366,16 +4362,17 @@
 }
 
 \LMHash{}
-An unescaped \$ character in a string signifies the beginning of an interpolated expression.
-The \$ sign may be followed by either:
+An unescaped \syntax{`$'} character in a string signifies the beginning of an interpolated expression.
+The \syntax{`$'} sign may be followed by either:
 \begin{itemize}
-\item A single identifier \id{} that must not contain the \$ character.
+\item A single identifier \id{} that must not contain the \syntax{`$'} character.
 \item An expression $e$ delimited by curly braces.
 \end{itemize}
 
 \LMHash{}
 The form \code{\$\id} is equivalent to the form \code{\$\{\id\}}.
-An interpolated string, $s$, with content `\code{$s_0$\$\{$e_1$\}$s_1\ldots{}s_{n-1}\$\{e_n\}s_{n}$}' (where any of $s_0, \ldots, s_n$ can be empty)
+An interpolated string, $s$, with content
+`\code{$s_0$\$\{$e_1$\}$s_1\ldots{}s_{n-1}$\$\{$e_n$\}$s_{n}$}' (where any of $s_0, \ldots, s_n$ can be empty)
 is evaluated by evaluating each expression $e_i$ ($1 \le i \le n$) in to a string $r_i$ in the order they occur in the source text, as follows:
 \begin{itemize}
 \item{} Evaluate $e_i$ to an object $o_i$.
@@ -4394,8 +4391,7 @@
 a valid declaration name or a valid library name in a Dart program.
 
 \begin{grammar}
-{\bf symbolLiteral:}`\#' (operator $|$ (identifier (`{\escapegrammar .}' identifier)*))
-  .
+<symbolLiteral> ::= `#' (<operator> | (<identifier> (`.' <identifier>)*))
 \end{grammar}
 
 \LMHash{}
@@ -4458,8 +4454,7 @@
 A {\em list literal} denotes a list, which is an integer indexed collection of objects.
 
 \begin{grammar}
-{\bf listLiteral:}\CONST{}? typeArguments? `[' (expressionList \gcomma{}?)? `]'
-  .
+<listLiteral> ::= \CONST{}? <typeArguments>? `[' (<expressionList> `,'?)? `]'
 \end{grammar}
 
 \LMHash{}
@@ -4479,18 +4474,29 @@
 
 \LMHash{}
 It is a compile-time error if an element of a constant list literal is not a compile-time constant.
-It is a compile-time error if the type argument of a constant list literal includes a type parameter.
+% Need 'free': `const <Function(Function<X>(X))>[]` is OK, but `X` is not free.
+It is a compile-time error if the type argument of a constant list literal is or contains a free type variable.
 \rationale{
 The binding of a type parameter is not known at compile time, so we cannot use type parameters inside compile-time constants.
 }
 
 \LMHash{}
-The value of a constant list literal \CONST{} $<E>[e_1, \ldots, e_n]$ is an object $a$ whose class implements the built-in class $List<E>$.
+The value of a constant list literal
+\code{\CONST{} <$E$>[$e_1, \ldots, e_n$]}
+is an object $a$ whose class implements the built-in class
+\code{List<$E$>}.
 The $i$th element of $a$ is $v_{i+1}$, where $v_i$ is the value of the compile-time expression $e_i$.
-The value of a constant list literal \CONST{} $[e_1, \ldots, e_n]$ is defined as the value of the constant list literal \CONST{}$ <\DYNAMIC{}>[e_1, \ldots, e_n]$.
+The value of a constant list literal
+\code{\CONST{} [$e_1, \ldots, e_n$]}
+is defined as the value of the constant list literal
+\code{\CONST{} <\DYNAMIC{}>[$e_1, \ldots, e_n$]}.
 
 \LMHash{}
-Let $list_1 =$ \CONST{} $<V>[e_{11}, \ldots, e_{1n}]$ and $list_2 =$ \CONST{} $<U>[e_{21}, \ldots, e_{2n}]$ be two constant list literals and let the elements of $list_1$ and $list_2$ evaluate to $o_{11}, \ldots, o_{1n}$ and $o_{21}, \ldots, o_{2n}$ respectively.
+Let
+$list_1 =$ \code{\CONST{} <$V$>[$e_{11}, \ldots, e_{1n}$]}
+and
+$list_2 =$ \code{\CONST{} <$U$>[$e_{21}, \ldots, e_{2n}$]}
+be two constant list literals and let the elements of $list_1$ and $list_2$ evaluate to $o_{11}, \ldots, o_{1n}$ and $o_{21}, \ldots, o_{2n}$ respectively.
 If{}f \code{identical($o_{1i}$, $o_{2i}$)} for $i \in 1 .. n$ and $V = U$ then \code{identical($list_1$, $list_2$)}.
 
 \commentary{
@@ -4498,13 +4504,17 @@
 }
 
 \LMHash{}
-A run-time list literal $<E>[e_1, \ldots, e_n]$ is evaluated as follows:
+A run-time list literal
+\code{<$E$>[$e_1, \ldots, e_n$]}
+is evaluated as follows:
 \begin{itemize}
 \item
 First, the expressions $e_1, \ldots, e_n$ are evaluated in order they appear in the program, producing objects $o_1, \ldots, o_n$.
-\item A fresh instance (\ref{generativeConstructors}) $a$, of size $n$, whose class implements the built-in class $List<E>$ is allocated.
+\item A fresh instance (\ref{generativeConstructors}) $a$, of size $n$, whose class implements the built-in class
+\code{List<$E$>}
+is allocated.
 \item
-The operator \code{[]=} is invoked on $a$ with first argument $i$ and second argument
+The operator \syntax{`[]='} is invoked on $a$ with first argument $i$ and second argument
 %The $i$th element of $a$ is set to
 $o_{i+1}, 0 \le i < n$.
 \item
@@ -4518,18 +4528,33 @@
 }
 
 \LMHash{}
-A run-time list literal $[e_1, \ldots, e_n]$ is evaluated as $<\DYNAMIC{}>[e_1, \ldots, e_n]$.
+A run-time list literal
+\code{[$e_1, \ldots, e_n$]}
+is evaluated as
+\code{<\DYNAMIC{}>[$e_1, \ldots, e_n$]}.
 
 \commentary{
 There is no restriction precluding nesting of list literals.
 It follows from the rules above that
-$<List<int>>[[1, 2, 3], [4, 5, 6]]$
-is a list with type parameter $List<int>$, containing two lists with type parameter \DYNAMIC{}.
+\code{<List<int\gtgt{}[[1, 2, 3], [4, 5, 6]]}
+is a list with type parameter
+\code{List<int>},
+containing two lists with type parameter \DYNAMIC{}.
 }
 
 \LMHash{}
-The static type of a list literal of the form \CONST{}$ <E>[e_1, \ldots, e_n]$ or the form $<E>[e_1, \ldots, e_n]$ is $List<E>$.
-The static type a list literal of the form \CONST{} $[e_1, \ldots, e_n$] or the form $[e_1, \ldots, e_n$] is $List<\DYNAMIC{}>$.
+The static type of a list literal of the form
+\code{\CONST{} <$E$>[$e_1, \ldots, e_n$]}
+or the form
+\code{<$E$>[$e_1, \ldots, e_n$]}
+is
+\code{List<E>}.
+The static type a list literal of the form
+\code{\CONST{} [$e_1, \ldots, e_n$]}
+or the form
+\code{[$e_1, \ldots, e_n$]}
+is
+\code{List<\DYNAMIC{}>}.
 
 \rationale{
 It is tempting to assume that the type of the list literal would be computed based on the types of its elements.
@@ -4551,12 +4576,10 @@
 A {\em map literal} denotes a map object.
 
 \begin{grammar}
-{\bf mapLiteral:}\CONST{}? typeArguments?
-  \gnewline{} `\{' (mapLiteralEntry (\gcomma{} mapLiteralEntry)* \gcomma{}?)? `\}'
-  .
+<mapLiteral> ::= \CONST{}? <typeArguments>?
+  \gnewline{} `{' (<mapLiteralEntry> (`,' <mapLiteralEntry>)* `,'?)? `\}'
 
-{\bf mapLiteralEntry:}expression `{\escapegrammar :}' expression
-  .
+<mapLiteralEntry> ::= <expression> `:' <expression>
 \end{grammar}
 
 \LMHash{}
@@ -4573,19 +4596,32 @@
 \LMHash{}
 It is a compile-time error if either a key or a value of an entry in a constant map literal is not a compile-time constant.
 It is a compile-time error if the key of an entry in a constant map literal is an instance of
-a class that has a concrete operator \code{==} declaration different from the one in \code{Object},
+a class that has a concrete operator \syntax{`=='} declaration different from the one in \code{Object},
 unless the key is a string or an integer,
 or the key expression is a literal symbol or
 an invocation of a constant constructor of class \code{Symbol}.
-It is a compile-time error if the type arguments of a constant map literal include a type variable.
+% Needs 'free': `const <int, Function(Function<X>(X))>{}` is OK, but
+% `X` is not free.
+It is a compile-time error if a type argument of a constant map literal
+is or contains a free type variable.
 
 \LMHash{}
-The value of a constant map literal \CONST{}$ <K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is an object $m$ whose class implements the built-in class $Map<K, V>$.
+The value of a constant map literal
+\code{\CONST{} <$K, V$>\{$k_1:e_1, \ldots, k_n:e_n$\}}
+is an object $m$ whose class implements the built-in class
+\code{Map<$K, V$>}.
 The entries of $m$ are $u_i:v_i, i \in 1 .. n$, where $u_i$ is the value of the compile-time expression $k_i$ and $v_i$ is the value of the compile-time expression $e_i$.
-The value of a constant map literal \CONST{} $\{k_1:e_1, \ldots, k_n :e_n\}$ is defined as the value of a constant map literal \CONST{} $<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1, \ldots, k_n:e_n\}$.
+The value of a constant map literal
+\code{\CONST{} \{$k_1:e_1, \ldots, k_n:e_n$\}}
+is defined as the value of a constant map literal
+\code{\CONST{} <\DYNAMIC{}, \DYNAMIC{}>\{$k_1:e_1, \ldots, k_n:e_n$\}}.
 
 \LMHash{}
-Let $map_1 =$ \CONST{}$ <K, V>\{k_{11}:e_{11}, \ldots, k_{1n} :e_{1n}\}$ and $map_2 =$ \CONST{}$ <J, U>\{k_{21}:e_{21}, \ldots, k_{2n} :e_{2n}\}$ be two constant map literals.
+Let
+$map_1 =$ \code{\CONST{} <$K, V$>\{$k_{11}:e_{11}, \ldots, k_{1n}:e_{1n}$\}}
+and
+$map_2 =$ \code{\CONST{} <$J, U$>\{$k_{21}:e_{21}, \ldots, k_{2n}:e_{2n}$\}}
+be two constant map literals.
 Let the keys of $map_1$ and $map_2$ evaluate to $s_{11}, \ldots, s_{1n}$ and $s_{21}, \ldots, s_{2n}$ respectively, and let the elements of $map_1$ and $map_2$ evaluate to $o_{11}, \ldots, o_{1n}$ and $o_{21}, \ldots, o_{2n}$ respectively.
 If{}f \code{identical($o_{1i}$, $o_{2i}$)} and \code{identical($s_{1i}$, $s_{2i}$)} for $i \in 1 .. n$, and $K = J, V = U$ then \code{identical($map_1$, $map_2$)}.
 
@@ -4594,24 +4630,29 @@
 }
 
 \LMHash{}
-A run-time map literal $<K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is evaluated as follows:
+A run-time map literal
+\code{<$K, V$>\{$k_1:e_1, \ldots, k_n:e_n$\}}
+is evaluated as follows:
 \begin{itemize}
 \item
 For each $i \in 1 .. n$ in numeric order,
 first the expression $k_i$ is evaluated producing object $u_i$,
 and then $e_i$ is evaluated producing object $o_i$.
 This produces all the objects $u_1, o_1, \ldots, u_n, o_n$.
-\item A fresh instance (\ref{generativeConstructors}) $m$ whose class implements the built-in class $Map<K, V>$ is allocated.
+\item A fresh instance (\ref{generativeConstructors}) $m$ whose class implements the built-in class
+\code{Map<$K, V$>} is allocated.
 \item
-The operator \code{[]=} is invoked on $m$ with first argument $u_i$ and second argument $o_i$ for each $i \in 1 .. n$.
+The operator \syntax{`[]='} is invoked on $m$ with first argument $u_i$ and second argument $o_i$ for each $i \in 1 .. n$.
 \item
 The result of the evaluation is $m$.
 \end{itemize}
 
 \LMHash{}
-A run-time map literal $\{k_1:e_1, \ldots, k_n :e_n\}$ is evaluated as
+A run-time map literal
+\code{\{$k_1:e_1, \ldots, k_n:e_n$\}}
+is evaluated as
 
-$<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1, \ldots, k_n :e_n\}$.
+\code{<\DYNAMIC{}, \DYNAMIC{}>\{$k_1:e_1, \ldots, k_n:e_n$\}}.
 
 \LMHash{}
 It is a compile-time error if two keys of a constant map literal are equal.
@@ -4625,8 +4666,17 @@
 }
 
 \LMHash{}
-The static type of a map literal of the form \CONST{}$ <K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ or the form $<K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is $Map<K, V>$.
-The static type of a map literal of the form \CONST{}$\{k_1:e_1, \ldots, k_n :e_n\}$ or the form $\{k_1:e_1, \ldots, k_n :e_n\}$ is $Map<\DYNAMIC{}, \DYNAMIC{}>$.
+The static type of a map literal of the form
+\code{\CONST{} <$K, V$>\{$k_1:e_1, \ldots, k_n:e_n$\}}
+or the form
+\code{<$K, V$>\{$k_1:e_1, \ldots, k_n:e_n$\}}
+is
+\code{Map<$K, V$>}.
+The static type of a map literal of the form
+\code{\CONST{} \{$k_1:e_1, \ldots, k_n:e_n$\}}
+or the form
+\code{\{$k_1:e_1, \ldots, k_n:e_n$\}} is
+\code{Map<\DYNAMIC{}, \DYNAMIC{}>}.
 
 
 \subsection{Throw}
@@ -4636,11 +4686,9 @@
 The {\em throw expression} is used to throw an exception.
 
 \begin{grammar}
-{\bf throwExpression:}\THROW{} expression
-  .
+<throwExpression> ::= \THROW{} <expression>
 
-{\bf throwExpressionWithoutCascade:}\THROW{} expressionWithoutCascade
-  .
+<throwExpressionWithoutCascade> ::= \THROW{} <expressionWithoutCascade>
 \end{grammar}
 
 \LMHash{}
@@ -4682,8 +4730,7 @@
 A {\em function literal} is an object that encapsulates an executable unit of code.
 
 \begin{grammar}
-{\bf functionExpression:}formalParameterPart functionBody
-  .
+<functionExpression> ::= <formalParameterPart> <functionBody>
 \end{grammar}
 
 %% TODO[inference]: The static and dynamic type of a function literal
@@ -4904,8 +4951,7 @@
 The reserved word \THIS{} denotes the target of the current instance member invocation.
 
 \begin{grammar}
-{\bf thisExpression:}\THIS{}
-  .
+<thisExpression> ::= \THIS{}
 \end{grammar}
 
 \LMHash{}
@@ -4964,8 +5010,7 @@
 The {\em new expression} invokes a constructor (\ref{constructors}).
 
 \begin{grammar}
-{\bf newExpression:}\NEW{} type (`{\escapegrammar .}' identifier)? arguments
-  .
+<newExpression> ::= \NEW{} <type> (`.' <identifier>)? <arguments>
 \end{grammar}
 
 \LMHash{}
@@ -5145,8 +5190,7 @@
 (\ref{constantConstructors}).
 
 \begin{grammar}
-{\bf constObjectExpression:}\NEW{} type (`{\escapegrammar .}' identifier)? arguments
-  .
+<constObjectExpression> ::= \CONST{} <type> (`.' <identifier>)? <arguments>
 \end{grammar}
 
 \LMHash{}
@@ -5306,17 +5350,17 @@
    \FINAL{} x;
    \CONST{} A(p): x = p * 10;
 \}
-
+\\
 \CLASS{} IntPair \{
   \CONST{} IntPair(\THIS{}.x, \THIS{}.y);
   \FINAL{} int x;
   \FINAL{} int y;
   \OPERATOR *(v) => \NEW{} IntPair(x*v, y*v);
 \}
-
-\CONST a1 = \CONST{} A(true); // compile-time error
-\CONST a2 = \CONST{} A(5); // legal
-\CONST a3 = \CONST{} A(\CONST{} IntPair(1,2)); // compile-time error
+\\
+\CONST a1 = \CONST{} A(true); // \comment{compile-time error}
+\CONST a2 = \CONST{} A(5); // \comment{legal}
+\CONST a3 = \CONST{} A(\CONST{} IntPair(1,2)); // \comment{compile-time error}
 \end{dartCode}
 
 \commentary{
@@ -5380,7 +5424,7 @@
 }
 
 \LMHash{}
-If $f$ is marked \SYNC* (\ref{functions}),
+If $f$ is marked \code{\SYNC*} (\ref{functions}),
 then a fresh instance (\ref{generativeConstructors}) $i$
 implementing \code{Iterable<$U$>} is immediately returned,
 where $U$ is determined as follows:
@@ -5389,7 +5433,7 @@
 otherwise $U$ is \code{Object}.
 
 \commentary{
-A Dart implementation will need to provide a specific implementation of \code{Iterable} that will be returned by \SYNC* methods.
+A Dart implementation will need to provide a specific implementation of \code{Iterable} that will be returned by \code{\SYNC*} methods.
 A typical strategy would be to produce an instance of a subclass of class \code{IterableBase} defined in \code{dart:core}.
 The only method that needs to be added by the Dart implementation in that case is \code{iterator}.
 }
@@ -5415,14 +5459,14 @@
 \end{itemize}
 
 Each iterator starts a separate computation.
-If the \SYNC* function is impure, the sequence of values yielded by each iterator may differ.
+If the \code{\SYNC*} function is impure, the sequence of values yielded by each iterator may differ.
 
 \commentary{
 One can derive more than one iterator from a given iterable.
 Note that operations on the iterable itself can create distinct iterators.
 An example would be \code{length}.
 It is conceivable that different iterators might yield sequences of different length.
-The same care needs to be taken when writing \SYNC* functions as when
+The same care needs to be taken when writing \code{\SYNC*} functions as when
 writing an \code{Iterator} class.
 In particular, it should handle multiple simultaneous iterators gracefully.
 If the iterator depends on external state that might change, it should check that the state is still valid after every yield (and maybe throw a \code{ConcurrentModificationError} if it isn't).
@@ -5458,7 +5502,7 @@
 }
 
 \LMHash{}
-If $f$ is marked \ASYNC* (\ref{functions}),
+If $f$ is marked \code{\ASYNC*} (\ref{functions}),
 then a fresh instance (\ref{generativeConstructors}) $s$
 implementing \code{Stream<$U$>} is immediately returned,
 where $U$ is determined as follows:
@@ -5497,19 +5541,16 @@
 Actual argument lists have the following syntax:
 
 \begin{grammar}
-{\bf arguments:}`(' (argumentList \gcomma{}?)? `)'
-  .
+<arguments> ::= `(' (<argumentList> `,'?)? `)'
 
-{\bf argumentList:}namedArgument (\gcomma{} namedArgument)*;
-  expressionList (\gcomma{} namedArgument)*
-  .
+<argumentList> ::= <namedArgument> (`,' <namedArgument>)*
+  \alt <expressionList> (`,' <namedArgument>)*
 
-{\bf namedArgument:}label expression
-  .
+<namedArgument> ::= <label> <expression>
 \end{grammar}
 
 \LMHash{}
-Argument lists allow an optional trailing comma after the last argument (\gcomma{}?).
+Argument lists allow an optional trailing comma after the last argument (\syntax{`,'?}).
 An argument list with such a trailing comma is equivalent in all ways to the same parameter list without the trailing comma.
 All argument lists in this specification are shown without a trailing comma,
 but the rules and semantics apply equally to the corresponding argument list with a trailing comma.
@@ -6323,18 +6364,15 @@
 where $e$ is an expression and \metavar{suffix} is a sequence of operator, method, getter or setter invocations.
 
 \begin{grammar}
-{\bf cascadeSection:}`{\escapegrammar ..}' (cascadeSelector argumentPart*)
-  \gnewline{} (assignableSelector argumentPart*)*
-  \gnewline{} (assignmentOperator expressionWithoutCascade)?
-  .
+<cascadeSection> ::= `..' (<cascadeSelector> <argumentPart>*)
+  \gnewline{} (<assignableSelector> <argumentPart>*)*
+  \gnewline{} (<assignmentOperator> <expressionWithoutCascade>)?
 
-{\bf cascadeSelector:}`[' expression `]';
-  identifier
-  .
+<cascadeSelector> ::= `[' <expression> `]'
+  \alt <identifier>
 
-{\bf argumentPart:}
-  typeArguments? arguments
-  .
+<argumentPart> ::=
+  <typeArguments>? <arguments>
 \end{grammar}
 
 \LMHash{}
@@ -6673,7 +6711,6 @@
 \item
 \begin{dartCode}
 <$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
-
 ($T_1\ r_1, \ldots,\ T_n\ r_n,\ $\{$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$\}) =>
     $u.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1$: $p_1, \ldots,\ p_k$: $p_k$);
 \end{dartCode}
@@ -6684,7 +6721,6 @@
 \item
 \begin{dartCode}
 <$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
-
 ($T_1\ r_1, \ldots,\ T_n\ r_n,\ $[$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$]) =>
     $u.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1, \ldots,\ p_k$);
 \end{dartCode}
@@ -6804,7 +6840,6 @@
 \item
 \begin{dartCode}
 <$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
-
 ($T_1\ r_1, \ldots,\ T_n\ r_n,\ $\{$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$\}) =>
     \SUPER$.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1$: $p_1, \ldots,\ p_k$: $p_k$);
 \end{dartCode}
@@ -6815,7 +6850,6 @@
 \item
 \begin{dartCode}
 <$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
-
 ($T_1\ r_1, \ldots,\ T_n\ r_n,\ $[$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$]) =>
     \SUPER.$m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1, \ldots,\ p_k$);
 \end{dartCode}
@@ -6887,9 +6921,8 @@
 An assignment changes the value associated with a mutable variable or property.
 
 \begin{grammar}
-{\bf assignmentOperator:}`=' ;
-  compoundAssignmentOperator
-  .
+<assignmentOperator> ::= `='
+  \alt <compoundAssignmentOperator>
 \end{grammar}
 
 \LMHash{}
@@ -7291,20 +7324,19 @@
 is equivalent to the expression \code{$C$.$v$ $op$ = $e_2$}.
 
 \begin{grammar}
-{\bf compoundAssignmentOperator:}`*=';
-  `/=';
-  `\~{}/=';
-  `\%=';
-  `+=';
-  `-=';
-  `{\escapegrammar \lt \lt}=';
-  `{\escapegrammar \gt \gt}=';
-  `{\escapegrammar \gt \gt \gt}=';
-  `\&=';
-  `\^{}=';
-  `$|$=';
-  `??='
-  .
+<compoundAssignmentOperator> ::= `*='
+  \alt `/='
+  \alt `~/='
+  \alt `\%='
+  \alt `+='
+  \alt `-='
+  \alt `\ltlt='
+  \alt `\gtgt='
+  \alt `\gtgtgt='
+  \alt `\&='
+  \alt `^='
+  \alt `|='
+  \alt `??='
 \end{grammar}
 
 
@@ -7315,9 +7347,8 @@
 A {\em conditional expression} evaluates one of two expressions based on a boolean condition.
 
 \begin{grammar}
-{\bf conditionalExpression:}ifNullExpression
-  \gnewline{} (`?' expressionWithoutCascade `{\escapegrammar :}' expressionWithoutCascade)?
-  .
+<conditionalExpression> ::= <ifNullExpression>
+  \gnewline{} (`?' <expressionWithoutCascade> `:' <expressionWithoutCascade>)?
 \end{grammar}
 
 \LMHash{}
@@ -7352,8 +7383,7 @@
 An {\em if-null expression} evaluates an expression and if the result is the null object (\ref{null}), evaluates another.
 
 \begin{grammar}
-{\bf ifNullExpression:}logicalOrExpression (`??' logicalOrExpression)*
-  .
+<ifNullExpression> ::= <logicalOrExpression> (`??' <logicalOrExpression>)*
 \end{grammar}
 
 \LMHash{}
@@ -7377,11 +7407,9 @@
 The logical boolean expressions combine boolean objects using the boolean conjunction and disjunction operators.
 
 \begin{grammar}
-{\bf logicalOrExpression:}logicalAndExpression (`$||$' logicalAndExpression)*
-  .
+<logicalOrExpression> ::= <logicalAndExpression> (`||' <logicalAndExpression>)*
 
-{\bf logicalAndExpression:}equalityExpression (`\&\&' equalityExpression)*
-  .
+<logicalAndExpression> ::= <equalityExpression> (`\&\&' <equalityExpression>)*
 \end{grammar}
 
 \LMHash{}
@@ -7432,13 +7460,11 @@
 Equality expressions test objects for equality.
 
 \begin{grammar}
-{\bf equalityExpression:}relationalExpression (equalityOperator relationalExpression)?;
-  \SUPER{} equalityOperator relationalExpression
-  .
+<equalityExpression> ::= <relationalExpression> (<equalityOperator> <relationalExpression>)?
+  \alt \SUPER{} <equalityOperator> <relationalExpression>
 
-{\bf equalityOperator:}`==';
-  `!='
-  .
+<equalityOperator> ::= `=='
+  \alt `!='
 \end{grammar}
 
 \LMHash{}
@@ -7488,16 +7514,14 @@
 Relational expressions invoke the relational operators on objects.
 
 \begin{grammar}
-{\bf relationalExpression:}bitwiseOrExpression (typeTest $|$ typeCast $|$
-  \gnewline{} relationalOperator bitwiseOrExpression)?;
-  \SUPER{} relationalOperator bitwiseOrExpression
-  .
+<relationalExpression> ::= <bitwiseOrExpression> (<typeTest> | <typeCast> |
+  \gnewline{} <relationalOperator> <bitwiseOrExpression>)?
+  \alt \SUPER{} <relationalOperator> <bitwiseOrExpression>
 
-{\bf relationalOperator:}`{\escapegrammar \gt=}';
-  `{\escapegrammar \gt}';
-  `{\escapegrammar \lt}=';
-  `{\escapegrammar \lt}'
-  .
+<relationalOperator> ::= `>='
+  \alt `>'
+  \alt `<='
+  \alt `<'
 \end{grammar}
 
 \LMHash{}
@@ -7515,22 +7539,18 @@
 Bitwise expressions invoke the bitwise operators on objects.
 
 \begin{grammar}
-{\bf bitwiseOrExpression:}bitwiseXorExpression (`$|$' bitwiseXorExpression)*;
-  \SUPER{} (`$|$' bitwiseXorExpression)+
-  .
+<bitwiseOrExpression> ::= <bitwiseXorExpression> (`|' <bitwiseXorExpression>)*
+  \alt \SUPER{} (`|' <bitwiseXorExpression>)+
 
-{\bf bitwiseXorExpression:}bitwiseAndExpression (`\^{}' bitwiseAndExpression)*;
-  \SUPER{} (`\^{}' bitwiseAndExpression)+
-  .
+<bitwiseXorExpression> ::= <bitwiseAndExpression> (`^' <bitwiseAndExpression>)*
+  \alt \SUPER{} (`^' <bitwiseAndExpression>)+
 
-{\bf bitwiseAndExpression:}shiftExpression (`\&' shiftExpression)*;
-  \SUPER{} (`\&' shiftExpression)+
-  .
+<bitwiseAndExpression> ::= <shiftExpression> (`\&' <shiftExpression>)*
+  \alt \SUPER{} (`\&' <shiftExpression>)+
 
-{\bf bitwiseOperator:}`\&';
-  `\^{}';
-  `$|$'
-  .
+<bitwiseOperator> ::= `\&'
+  \alt `^'
+  \alt `|'
 \end{grammar}
 
 \LMHash{}
@@ -7553,14 +7573,12 @@
 Shift expressions invoke the shift operators on objects.
 
 \begin{grammar}
-{\bf shiftExpression:}additiveExpression (shiftOperator additiveExpression)*;
-  \SUPER{} (shiftOperator additiveExpression)+
-  .
+<shiftExpression> ::= <additiveExpression> (<shiftOperator> <additiveExpression>)*
+  \alt \SUPER{} (<shiftOperator> <additiveExpression>)+
 
-{\bf shiftOperator:}`{\escapegrammar \lt\lt'};
-  `{\escapegrammar \gt\gt}';
-  `{\escapegrammar \gt \gt \gt}'
-  .
+<shiftOperator> ::= `\ltlt'
+  \alt `\gtgt'
+  \alt `\gtgtgt'
 \end{grammar}
 
 \LMHash{}
@@ -7572,10 +7590,10 @@
 
 \commentary{
 Note that this definition implies left-to-right evaluation order among shift expressions:
-
-$e_1 << e_2 << e_3$
-
-is evaluated as $(e_1 << e_2 ).<< (e_3)$ which is equivalent to $(e_1 << e_2) << e_3$.
+\code{$e_1$\,<\mbox<\,$e_2$\,<\mbox<\,$e_3$}
+is evaluated as
+\code{($e_1$\,<\mbox<\,$e_2$).<\mbox< ($e_3$)} which is equivalent to
+\code{($e_1$\,<\mbox<\,$e_2$)\,<\mbox<\,$e_3$}.
 The same holds for additive and multiplicative expressions.
 }
 
@@ -7587,14 +7605,12 @@
 Additive expressions invoke the addition operators on objects.
 
 \begin{grammar}
-{\bf additiveExpression:}multiplicativeExpression
-  \gnewline{} (additiveOperator multiplicativeExpression)*;
-  \SUPER{} (additiveOperator multiplicativeExpression)+
-  .
+<additiveExpression> ::= <multiplicativeExpression>
+  \gnewline{} (<additiveOperator> <multiplicativeExpression>)*
+  \alt \SUPER{} (<additiveOperator> <multiplicativeExpression>)+
 
-{\bf additiveOperator:}`+';
-  `-'
-  .
+<additiveOperator> ::= `+'
+  \alt `-'
 \end{grammar}
 
 \LMHash{}
@@ -7618,15 +7634,13 @@
 Multiplicative expressions invoke the multiplication operators on objects.
 
 \begin{grammar}
-{\bf multiplicativeExpression:}unaryExpression (multiplicativeOperator unaryExpression)*;
-  \SUPER{} (multiplicativeOperator unaryExpression)+
-  .
+<multiplicativeExpression> ::= <unaryExpression> (<multiplicativeOperator> <unaryExpression>)*
+  \alt \SUPER{} (<multiplicativeOperator> <unaryExpression>)+
 
-{\bf multiplicativeOperator:}`*';
-  `/';
-  `\%';
-  `\~{}/'
-  .
+<multiplicativeOperator> ::= `*'
+  \alt `/'
+  \alt `\%'
+  \alt `~/'
 \end{grammar}
 
 \LMHash{}
@@ -7649,39 +7663,32 @@
 Unary expressions invoke unary operators on objects.
 
 \begin{grammar}
-{\bf unaryExpression:}prefixOperator unaryExpression;
-  awaitExpression;
-  postfixExpression;
-  (minusOperator $|$ tildeOperator) \SUPER{};
-  incrementOperator assignableExpression
-  .
+<unaryExpression> ::= <prefixOperator> <unaryExpression>
+  \alt <awaitExpression>
+  \alt <postfixExpression>
+  \alt (<minusOperator> | <tildeOperator>) \SUPER{}
+  \alt <incrementOperator> <assignableExpression>
 
-{\bf prefixOperator:}minusOperator;
-  negationOperator;
-  tildeOperator
-  .
+<prefixOperator> ::= <minusOperator>
+  \alt <negationOperator>
+  \alt <tildeOperator>
 
-{\bf minusOperator:}`-'
-  .
+<minusOperator> ::= `-'
 
-{\bf negationOperator:}`!'
-  .
+<negationOperator> ::= `!'
 
-{\bf tildeOperator:}`\~{}'
-  .
+<tildeOperator> ::= `~'
 \end{grammar}
 
 \LMHash{}
 A {\em unary expression} is either a postfix expression (\ref{postfixExpressions}), an await expression (\ref{awaitExpressions}) or an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
 
 \LMHash{}
-The expression $!e$ is equivalent to the expression \code{$e$ ? \FALSE{} : \TRUE{}}.
+The expression $!e$ is equivalent to the expression \code{$e$\,?\,\FALSE\,:\,\TRUE}.
 
 \LMHash{}
-Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$ += 1}.
-Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$ -= 1}.
-
-%The expression $-e$ is equivalent to the method invocation \code{$e$.-()}.  The expression \code{-\SUPER{}} is equivalent to the method invocation \code{\SUPER{}.-()}.
+Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$\,+=\,1}.
+Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$\,-=\,1}.
 
 \LMHash{}
 If $e$ is an expression of the form \code{-$l$}
@@ -7721,8 +7728,7 @@
 An {\em await expression} allows code to yield control until an asynchronous operation (\ref{functions}) completes.
 
 \begin{grammar}
-{\bf awaitExpression:}\AWAIT{} unaryExpression
-  .
+<awaitExpression> ::= \AWAIT{} <unaryExpression>
 \end{grammar}
 
 \LMHash{}
@@ -7773,24 +7779,20 @@
 Postfix expressions invoke the postfix operators on objects.
 
 \begin{grammar}
-{\bf postfixExpression:}assignableExpression postfixOperator;
-  primary selector*
-  .
+<postfixExpression> ::= <assignableExpression> <postfixOperator>
+  \alt <primary> <selector>*
 
-{\bf postfixOperator:}incrementOperator
-  .
+<postfixOperator> ::= <incrementOperator>
 
-{\bf selector:}assignableSelector;
-  argumentPart
-  .
+<selector> ::= <assignableSelector>
+  \alt <argumentPart>
 
-{\bf incrementOperator:}`++';
-  `-{}-'
-  .
+<incrementOperator> ::= `++'
+  \alt `-\mbox-'
 \end{grammar}
 
 \LMHash{}
- A {\em postfix expression} is either a primary expression, a function, method or getter invocation, or an invocation of a postfix operator on an expression $e$.
+A {\em postfix expression} is either a primary expression, a function, method or getter invocation, or an invocation of a postfix operator on an expression $e$.
 
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$v$++}, where $v$ is an identifier, proceeds as follows:
@@ -7952,18 +7954,15 @@
 }
 
 \begin{grammar}
-{\bf assignableExpression:}primary (argumentPart* assignableSelector)+;
-  \SUPER{} unconditionalAssignableSelector;
-  identifier
-  .
+<assignableExpression> ::= <primary> (<argumentPart>* <assignableSelector>)+
+  \alt \SUPER{} <unconditionalAssignableSelector>
+  <identifier>
 
-{\bf unconditionalAssignableSelector:}`[' expression `]';
-  `{\escapegrammar .}' identifier
-  .
+<unconditionalAssignableSelector> ::= `[' <expression> `]'
+  \alt `.' <identifier>
 
-{\bf assignableSelector:}unconditionalAssignableSelector;
-  `{\escapegrammar ?.}' identifier
-  .
+<assignableSelector> ::= <unconditionalAssignableSelector>
+  \alt `?.' <identifier>
 \end{grammar}
 
 \LMHash{}
@@ -7999,56 +7998,48 @@
 An {\em identifier expression} consists of a single identifier; it provides access to an object via an unqualified name.
 
 \begin{grammar}
-{\bf identifier:}IDENTIFIER
+<identifier> ::= <IDENTIFIER>
   .
 
-{\bf IDENTIFIER\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR
-  \gnewline{} IDENTIFIER\_PART\_NO\_DOLLAR*
-  .
+<IDENTIFIER\_NO\_DOLLAR> ::= <IDENTIFIER\_START\_NO\_DOLLAR>
+  \gnewline{} <IDENTIFIER\_PART\_NO\_DOLLAR>*
 
-{\bf IDENTIFIER:}IDENTIFIER\_START IDENTIFIER\_PART*
-  .
+<IDENTIFIER> ::= <IDENTIFIER\_START IDENTIFIER\_PART>*
 
-{\bf BUILT\_IN\_IDENTIFIER:}\ABSTRACT{};
-  \AS{};
-  \COVARIANT{};
-  \DEFERRED{};
-  \DYNAMIC{};
-  \EXPORT{};
-  \EXTERNAL{};
-  \FACTORY{};
-  \FUNCTION{};
-  \GET{};
-  \IMPLEMENTS{};
-  \IMPORT{};
-  \INTERFACE{};
-  \LIBRARY{};
-  \OPERATOR{};
-  \MIXIN{};
-  \PART{};
-  \SET{};
-  \STATIC{};
-  \TYPEDEF{}
-  .
+<BUILT\_IN\_IDENTIFIER> ::= \ABSTRACT{}
+  \alt \AS{}
+  \alt \COVARIANT{}
+  \alt \DEFERRED{}
+  \alt \DYNAMIC{}
+  \alt \EXPORT{}
+  \alt \EXTERNAL{}
+  \alt \FACTORY{}
+  \alt \FUNCTION{}
+  \alt \GET{}
+  \alt \IMPLEMENTS{}
+  \alt \IMPORT{}
+  \alt \INTERFACE{}
+  \alt \LIBRARY{}
+  \alt \OPERATOR{}
+  \alt \MIXIN{}
+  \alt \PART{}
+  \alt \SET{}
+  \alt \STATIC{}
+  \alt \TYPEDEF{}
 
-{\bf IDENTIFIER\_START:}IDENTIFIER\_START\_NO\_DOLLAR;
-  `\$'
-  .
+<IDENTIFIER\_START> ::= <IDENTIFIER\_START\_NO\_DOLLAR>
+  \alt `$'
 
-{\bf IDENTIFIER\_START\_NO\_DOLLAR:}LETTER;
-  `\_'
-  .
+<IDENTIFIER\_START\_NO\_DOLLAR> ::= <LETTER>
+  \alt `_'
 
-{\bf IDENTIFIER\_PART\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR;
-  DIGIT
-  .
+<IDENTIFIER\_PART\_NO\_DOLLAR> ::= <IDENTIFIER\_START\_NO\_DOLLAR>
+  \alt <DIGIT>
 
-{\bf IDENTIFIER\_PART:}IDENTIFIER\_START;
-  DIGIT
-  .
+<IDENTIFIER\_PART> ::= <IDENTIFIER\_START>
+  \alt <DIGIT>
 
-{\bf qualified:}identifier (`{\escapegrammar .}' identifier)?
-  .
+<qualified> ::= <identifier> (`.' <identifier>)?
 \end{grammar}
 
 \LMHash{}
@@ -8067,7 +8058,7 @@
 }
 
 \LMHash{}
-It is a compile-time error if either of the identifiers \AWAIT{} or \YIELD{} is used as an identifier in a function body marked with either \ASYNC{}, \ASYNC* or \SYNC*.
+It is a compile-time error if either of the identifiers \AWAIT{} or \YIELD{} is used as an identifier in a function body marked with either \ASYNC{}, \code{\ASYNC*} or \code{\SYNC*}.
 
 \rationale{
 For compatibility reasons, new constructs cannot rely upon new reserved words or even built-in identifiers.
@@ -8148,11 +8139,9 @@
 The {\em is-expression} tests if an object is a member of a type.
 
 \begin{grammar}
-{\bf typeTest:}isOperator type
-  .
+<typeTest> ::= <isOperator> <type>
 
-{\bf isOperator:}\IS{} `!'?
-  .
+<isOperator> ::= \IS{} `!'?
 \end{grammar}
 
 \LMHash{}
@@ -8208,11 +8197,9 @@
 The {\em cast expression} ensures that an object is a member of a type.
 
 \begin{grammar}
-{\bf typeCast:}asOperator type
-  .
+<typeCast> ::= <asOperator> <type>
 
-{\bf asOperator:}\AS{}
-  .
+<asOperator> ::= \AS{}
 \end{grammar}
 
 \LMHash{}
@@ -8264,30 +8251,27 @@
 \LMHash{}
 
 \begin{grammar}
-{\bf statements:}statement*
-  .
+<statements> ::= <statement>*
 
-{\bf statement:}label* nonLabelledStatement
-  .
+<statement> ::= <label>* <nonLabelledStatement>
 
-{\bf nonLabelledStatement:}block;
-  localVariableDeclaration;
-  forStatement;
-  whileStatement;
-  doStatement;
-  switchStatement;
-  ifStatement;
-  rethrowStatement;
-  tryStatement;
-  breakStatement;
-  continueStatement;
-  returnStatement;
-  yieldStatement;
-  yieldEachStatement;
-  expressionStatement;
-  assertStatement;
-  localFunctionDeclaration
-  .
+<nonLabelledStatement> ::= <block>
+  \alt <localVariableDeclaration>
+  \alt <forStatement>
+  \alt <whileStatement>
+  \alt <doStatement>
+  \alt <switchStatement>
+  \alt <ifStatement>
+  \alt <rethrowStatement>
+  \alt <tryStatement>
+  \alt <breakStatement>
+  \alt <continueStatement>
+  \alt <returnStatement>
+  \alt <yieldStatement>
+  \alt <yieldEachStatement>
+  \alt <expressionStatement>
+  \alt <assertStatement>
+  \alt <localFunctionDeclaration>
 \end{grammar}
 
 
@@ -8312,23 +8296,22 @@
 
 \LMHash{}
 An {\em expression statement} consists of an expression that does not
-begin with a \{ character.
+begin with a \syntax{`{'} character.
 
 \begin{grammar}
-{\bf expressionStatement:}expression? `{\escapegrammar ;}'
-  .
+<expressionStatement> ::= <expression>? `;'
 \end{grammar}
 
 \LMHash{}
-The expression of an expression statement is not allowed to begin with a \{.
+The expression of an expression statement is not allowed to begin with a \syntax{`\{'}.
 \commentary{
 This means that if some source text could otherwise be parsed as an expression
-followed by a {\rm `$;$'}, then this grammar production does not apply
-when the expression starts with a \{.
+followed by a \syntax{`;'}, then this grammar production does not apply
+when the expression starts with a \syntax{`\{'}.
 }
 \rationale{
 The restriction resolves an ambiguity while parsing where a
-\{ can start either a block (\ref{blocks}) or a map literal (\ref{maps}).
+\syntax{`\{'} can start either a block (\ref{blocks}) or a map literal (\ref{maps}).
 By disallowing the latter from starting an expression statement,
 the parser does not need to look further ahead
 before deciding that it is parsing a block statement.
@@ -8349,8 +8332,7 @@
 has the following form:
 
 \begin{grammar}
-{\bf localVariableDeclaration:}initializedVariableDeclaration `{\escapegrammar ;}'
-  .
+<localVariableDeclaration> ::= <initializedVariableDeclaration> `;'
 \end{grammar}
 
 \LMHash{}
@@ -8419,14 +8401,14 @@
 
 \begin{dartCode}
 \VAR{} x = 0;
-
+\\
 f(y) \{
-  \VAR{} z = x; // compile-time error
+  \VAR{} z = x; // \comment{compile-time error}
   if (y) \{
-    x = x + 1; // two compile-time errors
-    print(x); // compile-time error
+    x = x + 1; // \comment{two compile-time errors}
+    print(x); // \comment{compile-time error}
   \}
-  \VAR{} x = x++; // compile-time error
+  \VAR{} x = x++; // \comment{compile-time error}
   print(x);
 \}
 \end{dartCode}
@@ -8467,8 +8449,8 @@
 \begin{dartCode}
 \CLASS{} C \{\}
 perverse() \{
-   \VAR{} v = \NEW{} C(); // compile-time error
-   C aC; // compile-time error
+   \VAR{} v = \NEW{} C(); // \comment{compile-time error}
+   C aC; // \comment{compile-time error}
    \VAR{} C = 10;
 \}
 \end{dartCode}
@@ -8510,8 +8492,7 @@
 A function declaration statement declares a new local function (\ref{functionDeclarations}).
 
 \begin{grammar}
-{\bf localFunctionDeclaration:}functionSignature functionBody
-  .
+<localFunctionDeclaration> ::= <functionSignature> <functionBody>
 \end{grammar}
 
 \LMHash{}
@@ -8528,19 +8509,20 @@
 }
 
 \begin{dartCode}
-f(x) => x++; // a top level function
-top() \{ // another top level function
-  f(3); // illegal
-  f(x) => x > 0? x*f(x-1): 1; // recursion is legal
-  g1(x) => h(x, 1); // error: h is not declared yet
-  h(x, n) => x > 1? h(x-1, n*x): n; // again, recursion is fine
-  g2(x) => h(x, 1); // legal
-
-  p1(x) => q(x,x); // illegal
-  q1(a, b)$ =>$ a > 0 ? p1(a-1): b; // fine
-
-  q2(a, b) => a > 0 ? p2(a-1): b; // illegal
-  p1(x) => q2(x,x); // fine
+f(x) => x++; // \comment{a top level function}
+\\
+top() \{ // \comment{another top level function}
+  f(3); // \comment{illegal}
+  f(x) => x > 0? x*f(x-1): 1; // \comment{recursion is legal}
+  g1(x) => h(x, 1); // \comment{error: h is not declared yet}
+  h(x, n) => x > 1? h(x-1, n*x): n; // \comment{again, recursion is fine}
+  g2(x) => h(x, 1); // \comment{legal}
+\\
+  p1(x) => q(x,x); // \comment{illegal}
+  q1(a, b)$ =>$ a > 0 ? p1(a-1): b; // \comment{fine}
+\\
+  q2(a, b) => a > 0 ? p2(a-1): b; // \comment{illegal}
+  p1(x) => q2(x,x); // \comment{fine}
 \}
 \end{dartCode}
 
@@ -8553,7 +8535,7 @@
 }
 
 \begin{dartCode}
-top2() \{ // a top level function
+top2() \{ // \comment{a top level function}
   \VAR{} p, q;
   p = (x) => q(x,x);
   q = (a, b) => a > 0 ? p(a-1): b;
@@ -8574,15 +8556,17 @@
 The {\em if statement} allows for conditional execution of statements.
 
 \begin{grammar}
-{\bf ifStatement:}\IF{} `(' expression `)' statement ( \ELSE{} statement)?
-  .
+<ifStatement> ::= \IF{} `(' <expression> `)' <statement> (\ELSE{} <statement>)?
 \end{grammar}
+
+\LMHash{}
 An if statement of the form \code{\IF{} ($e$) $s_1$ \ELSE{} $s_2$} where $s_1$ is not a block statement is equivalent to the statement \code{\IF{} ($e$) \{$s_1$\} \ELSE{} $s_2$}.
 An if statement of the form \code{\IF{} ($e$) $s_1$ \ELSE{} $s_2$} where $s_2$ is not a block statement is equivalent to the statement \code{\IF{} ($e$) $s_1$ \ELSE{} \{$s_2$\}}.
 
 \rationale{
 The reason for this equivalence is to catch errors such as
 }
+
 \begin{dartCode}
 \VOID{} main() \{
   \IF{} (somePredicate)
@@ -8634,17 +8618,14 @@
 The {\em for statement} supports iteration.
 
 \begin{grammar}
-{\bf forStatement:}\AWAIT? \FOR{} `(' forLoopParts `)' statement
-  .
+<forStatement> ::= \AWAIT? \FOR{} `(' <forLoopParts> `)' <statement>
 
-{\bf forLoopParts:}forInitializerStatement expression? `{\escapegrammar ;}' expressionList?;
-  declaredIdentifier \IN{} expression;
-  identifier \IN{} expression
-  .
+<forLoopParts> ::= <forInitializerStatement> <expression>? `;' <expressionList>?
+  \alt <declaredIdentifier> \IN{} <expression>
+  \alt <identifier> \IN{} <expression>
 
-{\bf forInitializerStatement:}localVariableDeclaration;
-  expression? `{\escapegrammar ;}'
-  .
+<forInitializerStatement> ::= <localVariableDeclaration>
+  \alt <expression>? `;'
 \end{grammar}
 
 \LMHash{}
@@ -8721,7 +8702,7 @@
 \LMLabel{for-in}
 
 \LMHash{}
-Let $D$ be derived from \code{finalConstVarOrType?}
+Let $D$ be derived from \syntax{<finalConstVarOrType>?}
 and let $n0$ be an identifier that does not occur anywhere in the program.
 A for statement of the form \code{\FOR{} ($D$ \id{} \IN{} $e$) $s$} is equivalent to the following code:
 
@@ -8751,7 +8732,7 @@
 An asynchronous for loop is distinguished by the keyword \AWAIT{} immediately preceding the keyword \FOR.
 
 \LMHash{}
-Let $D$ be derived from \code{finalConstVarOrType?}.
+Let $D$ be derived from \syntax{<finalConstVarOrType>?}.
 Execution of a for-in statement, $f$, of the form
 \code{\AWAIT{} \FOR{} ($D$ \id{} \IN{} $e$) $s$}
 proceeds as follows:
@@ -8835,8 +8816,7 @@
 The while statement supports conditional iteration, where the condition is evaluated prior to the loop.
 
 \begin{grammar}
-{\bf whileStatement:}\WHILE{} `(' expression `)' statement
-  .
+<whileStatement> ::= \WHILE{} `(' <expression> `)' <statement>
 \end{grammar}
 
 \LMHash{}
@@ -8869,8 +8849,7 @@
 The do statement supports conditional iteration, where the condition is evaluated after the loop.
 
 \begin{grammar}
-{\bf doStatement:}\DO{} statement \WHILE{} `(' expression `)' `{\escapegrammar ;}'
-  .
+<doStatement> ::= \DO{} <statement> \WHILE{} `(' <expression> `)' `;'
 \end{grammar}
 
 \LMHash{}
@@ -8897,14 +8876,11 @@
 The {\em switch statement} supports dispatching control among a large number of cases.
 
 \begin{grammar}
-{\bf switchStatement:}\SWITCH{} `(' expression `)' `\{' switchCase* defaultCase? `\}'
-  .
+<switchStatement> ::= \SWITCH{} `(' <expression> `)' `{' <switchCase>* <defaultCase>? `}'
 
-{\bf switchCase:}label* \CASE{} expression `{\escapegrammar :}' statements
-  .
+<switchCase> ::= <label>* \CASE{} <expression> `:' <statements>
 
-{\bf defaultCase:}label* \DEFAULT{} `{\escapegrammar :}' statements
-  .
+<defaultCase> ::= <label>* \DEFAULT{} `:' <statements>
 \end{grammar}
 
 \LMHash{}
@@ -9143,8 +9119,7 @@
 The {\em rethrow statement} is used to re-throw an exception and its associated stack trace.
 
 \begin{grammar}
-{\bf rethrowStatement:}\RETHROW{} `{\escapegrammar ;}'
-  .
+<rethrowStatement> ::= \RETHROW{} `;'
 \end{grammar}
 
 \LMHash{}
@@ -9172,18 +9147,14 @@
 The try statement supports the definition of exception handling code in a structured way.
 
 \begin{grammar}
-{\bf tryStatement:}\TRY{} block (onPart+ finallyPart? $|$ finallyPart)
-  .
+<tryStatement> ::= \TRY{} <block> (<onPart>+ <finallyPart>? | <finallyPart>)
 
-{\bf onPart:}catchPart block;
-  \ON{} type catchPart? block
-  .
+<onPart> ::= <catchPart> <block>
+  \alt \ON{} <type> <catchPart>? <block>
 
-{\bf catchPart:}\CATCH{} `(' identifier (\gcomma{} identifier)? `)'
-  .
+<catchPart> ::= \CATCH{} `(' <identifier> (`,' <identifier>)? `)'
 
-{\bf finallyPart:}\FINALLY{} block
-  .
+<finallyPart> ::= \FINALLY{} <block>
 \end{grammar}
 
 \LMHash{}
@@ -9221,6 +9192,7 @@
 
 \LMHash{}
 Execution of a \TRY{} statement $s$ of the form:
+
 \begin{dartCode}
 \TRY{} $b$
 \ON{} $T_1$ \CATCH{} ($e_1$, $t_1$) $c_1$
@@ -9251,6 +9223,7 @@
 
 \LMHash{}
 Matching an exception object $e$ and stack trace $t$ against a (potentially empty) sequence of \ON{}-\CATCH{} clauses of the form
+
 \begin{dartCode}
 \ON{} $T_1$ \CATCH{} ($e_1$, $st_1$) \{ $s_1$ \}
 \ldots
@@ -9270,6 +9243,7 @@
 
 \LMHash{}
 Otherwise, if the first clause did not match $e$, $e$ and $t$ are recursively matched against the remaining \ON{}-\CATCH{} clauses:
+
 \begin{dartCode}
 \ON{} $T_2$ \CATCH{} ($e_2$, $t_2$) \{ $s_2$ \}
 \ldots
@@ -9286,8 +9260,7 @@
 or terminates the stream or iterable associated with a generator (\ref{functions}).
 
 \begin{grammar}
-{\bf returnStatement:}\RETURN{} expression? `{\escapegrammar ;}'
-  .
+<returnStatement> ::= \RETURN{} <expression>? `;'
 \end{grammar}
 
 \LMHash{}
@@ -9422,8 +9395,7 @@
 }
 
 \begin{grammar}
-{\bf label:}identifier `{\escapegrammar :}'
-  .
+<label> ::= <identifier> `:'
 \end{grammar}
 
 \LMHash{}
@@ -9452,8 +9424,7 @@
 The {\em break statement} consists of the reserved word \BREAK{} and an optional label (\ref{labels}).
 
 \begin{grammar}
-{\bf breakStatement:}\BREAK{} identifier? `{\escapegrammar ;}'
-  .
+<breakStatement> ::= \BREAK{} <identifier>? `;'
 \end{grammar}
 
 \LMHash{}
@@ -9479,8 +9450,7 @@
 The {\em continue statement} consists of the reserved word \CONTINUE{} and an optional label (\ref{labels}).
 
 \begin{grammar}
-{\bf continueStatement:}\CONTINUE{} identifier? `{\escapegrammar ;}'
-  .
+<continueStatement> ::= \CONTINUE{} <identifier>? `;'
 \end{grammar}
 
 \LMHash{}
@@ -9513,8 +9483,7 @@
 The {\em yield statement} adds an element to the result of a generator function (\ref{functions}).
 
 \begin{grammar}
-{\bf yieldStatement:}\YIELD{} expression `{\escapegrammar ;}'
-  .
+<yieldStatement> ::= \YIELD{} <expression> `;'
 \end{grammar}
 
 \LMHash{}
@@ -9522,13 +9491,13 @@
 
 \LMHash{}
 First, the expression $e$ is evaluated to an object $o$.
-If the enclosing function $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused, then the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused and execution of $m$ is suspended until $u$ is resumed or canceled.
+If the enclosing function $m$ is marked \code{\ASYNC*} (\ref{functions}) and the stream $u$ associated with $m$ has been paused, then the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused and execution of $m$ is suspended until $u$ is resumed or canceled.
 
 \LMHash{}
 Next, $o$ is added to the iterable or stream associated with the immediately enclosing function.
 
 \LMHash{}
-If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then the \YIELD{} statement returns without a value (\ref{completion}), otherwise it completes normally.
+If the enclosing function $m$ is marked \code{\ASYNC*} and the stream $u$ associated with $m$ has been canceled, then the \YIELD{} statement returns without a value (\ref{completion}), otherwise it completes normally.
 
 \rationale{
 The stream associated with an asynchronous generator could be canceled by any code with a reference to that stream at any point where the generator was passivated.
@@ -9537,7 +9506,7 @@
 }
 
 \LMHash{}
-Otherwise, if the enclosing function $m$ is marked \ASYNC* (\ref{functions}) then the enclosing function may suspend, in which case the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused first.
+Otherwise, if the enclosing function $m$ is marked \code{\ASYNC*} (\ref{functions}) then the enclosing function may suspend, in which case the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused first.
 
 \rationale{
 If a \YIELD{} occurred inside an infinite loop and the enclosing function never suspended, there might not be an opportunity for consumers of the enclosing stream to run and access the data in the stream.
@@ -9550,7 +9519,7 @@
 }
 
 \LMHash{}
-If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then:
+If the enclosing function $m$ is marked \code{\SYNC*} (\ref{functions}) then:
 \begin{itemize}
 \item
 Execution of the function $m$ immediately enclosing $s$ is suspended until the nullary method \code{moveNext()} is invoked upon the iterator used to initiate the current invocation of $m$.
@@ -9566,9 +9535,9 @@
 It is a compile-time error if either:
 \begin{itemize}
 \item
-the body of $f$ is marked \ASYNC* and the type \code{Stream<T>} may not be assigned to the declared return type of $f$.
+the body of $f$ is marked \code{\ASYNC*} and the type \code{Stream<T>} may not be assigned to the declared return type of $f$.
 \item
-the body of $f$ is marked \SYNC* and the type \code{Iterable<T>} may not be assigned to the declared return type of $f$.
+the body of $f$ is marked \code{\SYNC*} and the type \code{Iterable<T>} may not be assigned to the declared return type of $f$.
 \end{itemize}
 
 
@@ -9579,8 +9548,7 @@
 The {\em yield-each statement} adds a series of values to the result of a generator function (\ref{functions}).
 
 \begin{grammar}
-{\bf yieldEachStatement:}\YIELD* expression `{\escapegrammar ;}'
-  .
+<yieldEachStatement> ::= \YIELD{} `*' <expression> `;'
 \end{grammar}
 
 \LMHash{}
@@ -9590,7 +9558,7 @@
 First, the expression $e$ is evaluated to an object $o$.
 
 \LMHash{}
-If the immediately enclosing function $m$ is marked \SYNC* (\ref{functions}), then:
+If the immediately enclosing function $m$ is marked \code{\SYNC*} (\ref{functions}), then:
 \begin{enumerate}
 \item It is a dynamic error if the class of $o$ does not implement \code{Iterable}.
 Otherwise
@@ -9607,7 +9575,7 @@
 \end{enumerate}
 
 \LMHash{}
-If $m$ is marked \ASYNC* (\ref{functions}), then:
+If $m$ is marked \code{\ASYNC*} (\ref{functions}), then:
 \begin{itemize}
 \item It is a dynamic error if the class of $o$ does not implement \code{Stream}.
 Otherwise
@@ -9644,11 +9612,9 @@
 An {\em assert statement} is used to disrupt normal execution if a given boolean condition does not hold.
 
 \begin{grammar}
-{\bf assertStatement:}assertion `{\escapegrammar ;}'
-  .
+<assertStatement> ::= <assertion> `;'
 
-{\bf assertion:}\ASSERT{} `(' expression (\gcomma{} expression )? \gcomma{}? `)'
-  .
+<assertion> ::= \ASSERT{} `(' <expression> (`,' <expression> )? `,'? `)'
 \end{grammar}
 
 \LMHash{}
@@ -9726,39 +9692,32 @@
 The members of a library $L$ are those top level declarations given within $L$.
 
 \begin{grammar}
-{\bf topLevelDefinition:}classDefinition;
-  enumType;
-  typeAlias;
-  \EXTERNAL{}? functionSignature `{\escapegrammar ;}';
-  \EXTERNAL{}? getterSignature `{\escapegrammar ;}';
-  \EXTERNAL{}? setterSignature `{\escapegrammar ;}';
-  functionSignature functionBody;
-  returnType? \GET{} identifier functionBody;
-  returnType? \SET{} identifier formalParameterList functionBody;
-  (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList `{\escapegrammar ;}';
-  variableDeclaration `{\escapegrammar ;}'
-  .
+<topLevelDefinition> ::= <classDefinition>
+  \alt <enumType>
+  \alt <typeAlias>
+  \alt \EXTERNAL{}? <functionSignature> `;'
+  \alt \EXTERNAL{}? <getterSignature> `;'
+  \alt \EXTERNAL{}? <setterSignature> `;'
+  \alt <functionSignature> <functionBody>
+  \alt <returnType>? \GET{} <identifier> <functionBody>
+  \alt <returnType>? \SET{} <identifier> <formalParameterList> <functionBody>
+  \alt (\FINAL{} | \CONST{}) <type> <staticFinalDeclarationList> `;'
+  \alt <variableDeclaration> `;'
 
-{\bf getOrSet:}\GET{};
-  \SET{}
-  .
+<getOrSet> ::= \GET{}
+  \alt \SET{}
 
-{\bf libraryDefinition:}scriptTag? libraryName? importOrExport* partDirective*
-  \gnewline{} topLevelDefinition*
-  .
+<libraryDefinition> ::= <scriptTag>? <libraryName>? <importOrExport>* <partDirective>*
+  \gnewline{} <topLevelDefinition>*
 
-{\bf scriptTag:}`\#!' {\escapegrammar (\~{}NEWLINE)*} NEWLINE
-  .
+<scriptTag> ::= `#!' (\~{}<NEWLINE>)* <NEWLINE>
 
-{\bf libraryName:}metadata \LIBRARY{} dottedIdentifierList `{\escapegrammar ;}'
-  .
+<libraryName> ::= <metadata> \LIBRARY{} <dottedIdentifierList> `;'
 
-{\bf importOrExport:}libraryImport;
-  libraryExport
-  .
+<importOrExport> ::= <libraryImport>
+  \alt <libraryExport>
 
-{\bf dottedIdentifierList:} identifier (`{\escapegrammar .}' identifier)*
-  .
+<dottedIdentifierList> ::= <identifier> (`.' <identifier>)*
 \end{grammar}
 
 \LMHash{}
@@ -9789,8 +9748,8 @@
 Script tags are intended for use with scripts (\ref{scripts}).
 A script tag can be used to identify the interpreter of the script to whatever computing environment the script is embedded in.
 The script tag must appear before any whitespace or comments.
-A script tag begins with the characters \#! and ends at the end of the line.
-Any characters that follow \#! in the script tag are ignored by the Dart implementation.
+A script tag begins with \syntax{`#!'} and ends at the end of the line.
+Any characters that follow \syntax{`#!'} in the script tag are ignored by the Dart implementation.
 
 \LMHash{}
 Libraries are units of privacy.
@@ -9812,19 +9771,15 @@
 \LMHash{}
 An {\em import} specifies a library to be used in the scope of another library.
 \begin{grammar}
-{\bf libraryImport:}metadata importSpecification
-  .
+<libraryImport> ::= <metadata> <importSpecification>
 
-{\bf importSpecification:}\IMPORT{} configurableUri (\AS{} identifier)? combinator* `{\escapegrammar ;}';
-  \IMPORT{} uri \DEFERRED{} \AS{} identifier combinator* `{\escapegrammar ;}'
-  .
+<importSpecification> ::= \IMPORT{} <configurableUri> (\AS{} <identifier>)? <combinator>* `;'
+  \alt \IMPORT{} <uri> \DEFERRED{} \AS{} <identifier> <combinator>* `;'
 
-{\bf combinator:}\SHOW{} identifierList;
-  \HIDE{} identifierList
-  .
+<combinator> ::= \SHOW{} <identifierList>
+  \alt \HIDE{} <identifierList>
 
-{\bf identifierList:}identifier (, identifier)*
-  .
+<identifierList> ::= <identifier> (, <identifier>)*
 \end{grammar}
 
 \LMHash{}
@@ -10077,8 +10032,7 @@
 The namespace that $L$ exports is known as its {\em exported namespace}.
 
 \begin{grammar}
-{\bf libraryExport:}metadata \EXPORT{} configurableUri combinator* `{\escapegrammar ;}'
-  .
+<libraryExport> ::= <metadata> \EXPORT{} <configurableUri> <combinator>* `;'
 \end{grammar}
 
 \LMHash{}
@@ -10155,14 +10109,11 @@
 A {\em part directive} specifies a URI where a Dart compilation unit that should be incorporated into the current library may be found.
 
 \begin{grammar}
-{\bf partDirective:}metadata \PART{} uri `{\escapegrammar ;}'
-  .
+<partDirective> ::= <metadata> \PART{} <uri> `;'
 
-{\bf partHeader:}metadata \PART{} \OF{} identifier (`{\escapegrammar .}' identifier)* `{\escapegrammar ;}'
-  .
+<partHeader> ::= <metadata> \PART{} \OF{} <identifier> (`.' <identifier>)* `;'
 
-{\bf partDeclaration:}partHeader topLevelDefinition* EOF
-  .
+<partDeclaration> ::= <partHeader> <topLevelDefinition>* <EOF>
 \end{grammar}
 
 \LMHash{}
@@ -10176,17 +10127,30 @@
 It is a compile-time error if the referenced part declaration $p$ names a library other than the current library as the library to which $p$ belongs.
 
 \LMHash{}
-Let $L$ be a library.
-It is a compile-time error if $L$ contains two part directives with the same URI.
-Furthermore,
-let $L_1$ be $L$ or any library which is directly or indirectly imported by $L$,
-and let $L_2$ be any library distinct from $L_1$ which is directly or indirectly imported by $L$
-(\ref{imports}).
-It is a compile-time error if $L_1$ and $L_2$ both contain a part directive with the same URI.
+It is a compile-time error if a library contains
+two part directives with the same URI.
+
+\LMHash{}
+We say that a library $L_1$ is {\em reachable from} a library $L$ if
+any of the following is true (\ref{imports}, \ref{exports}):
+\begin{itemize}
+\item $L$ and $L_1$ is the same library.
+\item $L$ imports or exports a library $L_2$, and $L_1$ is reachable from $L_2$.
+\end{itemize}
+
+\LMHash{}
+Let $L$ be a library, let $u$ be a URI,
+and let $L_1$ and $L_2$ be distinct libraries which are reachable from $L$.
+It is a compile-time error if $L_1$ and $L_2$ both contain
+a part directive with URI $u$.
 
 \commentary{
 In particular, it is an error to use the same part twice in the same program
 (\ref{scripts}).
+Note that a relative URI is interpreted as relative to the location of the
+enclosing library (\ref{uris}), which means that $L_1$ and $L_2$ may both
+have a part identified by \code{'myPart.dart'}, but they are not the same
+URI unless $L_1$ and $L_2$ have the same location.
 }
 
 
@@ -10248,14 +10212,13 @@
 URIs are specified by means of string literals:
 
 \begin{grammar}
-{\bf uri:}stringLiteral
-  .
-{\bf configurableUri:} uri configurationUri*
-  .
-{\bf configurationUri:} \IF{} `(' uriTest `)' uri
-  .
-{\bf uriTest:} dottedIdentifierList (`==' stringLiteral)?
-  .
+<uri> ::= <stringLiteral>
+
+<configurableUri> ::= <uri> <configurationUri>*
+
+<configurationUri> ::= \IF{} `(' <uriTest> `)' <uri>
+
+<uriTest> ::= <dottedIdentifierList> (`==' <stringLiteral>)?
 \end{grammar}
 
 \LMHash{}
@@ -10344,17 +10307,13 @@
 They have no effect whatsoever in production mode.
 
 \begin{grammar}
-{\bf type:}typeName typeArguments?
-  .
+<type> ::= <typeName> <typeArguments>?
 
-{\bf typeName:}qualified
-  .
+<typeName> ::= <qualified>
 
-{\bf typeArguments:}`<' typeList `>'
-  .
+<typeArguments> ::= `<' <typeList> `>'
 
-{\bf typeList:}type (\gcomma{} type)*
-  .
+<typeList> ::= <type> (`,' <type>)*
 \end{grammar}
 
 \LMHash{}
@@ -10563,17 +10522,13 @@
 A {\em type alias} declares a name for a type expression.
 
 \begin{grammar}
-{\bf typeAlias:}metadata \TYPEDEF{} typeAliasBody
-  .
+<typeAlias> ::= <metadata> \TYPEDEF{} <typeAliasBody>
 
-{\bf typeAliasBody:}functionTypeAlias
-  .
+<typeAliasBody> ::= <functionTypeAlias>
 
-{\bf functionTypeAlias:}functionPrefix typeParameters? formalParameterList `{\escapegrammar ;}'
-  .
+<functionTypeAlias> ::= <functionPrefix> <typeParameters>? <formalParameterList> `;'
 
-{\bf functionPrefix:}returnType? identifier
-  .
+<functionPrefix> ::= <returnType>? <identifier>
 \end{grammar}
 
 % TODO(eernst): Introduce new type aliases and new function type syntax, then
@@ -10643,7 +10598,9 @@
 This is because $<:$ is not transitive.
 If it was, the subtype rule would have a cycle.
 For example:
-$List <: List<String>$ and $List<int> <: List$, but $List<int>$ is not a subtype of $List<String>$.
+\code{List $<:$ List<String>} and
+\code{List<int> $<:$ List}, but
+\code{List<int>} is not a subtype of \code{List<String>}.
 Although $<:$ is not a partial order on types, it does contain a partial order, namely $<<$.
 This means that, barring raw types, intuition about classical subtype rules does apply.
 }
@@ -10920,7 +10877,7 @@
 This would lead to earlier error detection in checked mode, and more aggressive errors during static typechecking.
 For example:
 
-(1) \code{typedAPI(G\lt{String}\gt g)\{...\}}
+(1) \code{typedAPI(G<String> g)\{...\}}
 
 (2) \code{typedAPI(new G()); }
 
@@ -10928,7 +10885,7 @@
 This seems desirable from the perspective of error localization.
 However, when a dynamic error is thrown at (2), the only way to keep running is rewriting (2) into
 
-(3) \code{typedAPI(new G\lt{String}\gt());}
+(3) \code{typedAPI(new G<String>());}
 
 This forces users to write type information in their client code just because they are calling a typed API.
 We do not want to impose this on Dart programmers, some of which may be blissfully unaware of types in general, and genericity in particular.
@@ -10967,9 +10924,14 @@
         then \code{FutureOr<$T$>} <: $S$.
         \commentary{In particular, \code{FutureOr<$T$>} <: \code{Object}.}
 \end{itemize}.
-\commentary{The last point guarantees that generic type \code{FutureOr} is
+
+\commentary{
+The last point guarantees that generic type \code{FutureOr} is
 {\em covariant} in its type parameter, just like class types.
-That is, if $S$ <: $T$ then \code{FutureOr<$S$>} <: \code{FutureOr<$T$>}.}
+That is, if $S$ <: $T$ then \code{FutureOr<$S$>} <: \code{FutureOr<$T$>}.
+}
+
+\LMHash{}
 If the type arguments passed to \code{FutureOr} would incur compile-time errors
 if applied to a normal generic class with one type parameter,
 the same compile-time errors are issued for \code{FutureOr}.
@@ -10988,15 +10950,17 @@
 \LMHash{}
 The type \code{FutureOr<$T$>} has an interface that is identical to that
 of \code{Object}.
+
 \commentary{
 The only members that can be invoked on a value with static type
 \code{FutureOr<$T$>} are members that are also on \code{Object}.
 }
+
 \rationale{
 We only want to allow invocations of members that are inherited from
 a common supertype of both $T$ and \code{Future<$T$>}.
 In most cases the only common supertype is \code{Object}. The exceptions, like
-\code{FutureOr<Future<Object>>} which has \code{Future<Object>} as common
+\code{FutureOr<Future<Object\gtgt} which has \code{Future<Object>} as common
 supertype, are few and not practically useful, so for now we choose to
 only allow invocations of members inherited from \code{Object}.
 }
@@ -11017,11 +10981,11 @@
 
 The only subtype relations that pertain to void are therefore:
 \begin{itemize}
-\item
+\item[$\bullet$]
 $\VOID{} <: \VOID{}$ (by reflexivity)
-\item
+\item[$\bullet$]
 $\bot <: \VOID{}$ (as bottom is a subtype of all types).
-\item
+\item[$\bullet$]
 $\VOID{} <: \DYNAMIC{}$ (as \DYNAMIC{} is a supertype of all types)
 \end{itemize}
 
@@ -11277,15 +11241,12 @@
 \ASSERT{}, \BREAK{}, \CASE{}, \CATCH{}, \CLASS{}, \CONST{}, \CONTINUE{}, \DEFAULT{}, \DO{}, \ELSE{}, \ENUM{}, \EXTENDS{}, \FALSE{}, \FINAL{}, \FINALLY{}, \FOR{}, \IF{}, \IN{}, \IS{}, \NEW{}, \NULL{}, \RETHROW, \RETURN{}, \SUPER{}, \SWITCH{}, \THIS{}, \THROW{}, \TRUE{}, \TRY{}, \VAR{}, \VOID{}, \WHILE{}, \WITH{}.
 
 \begin{grammar}
-{\bf LETTER:}`a' {\escapegrammar ..} `z';
-  `A' {\escapegrammar ..}`Z'
-  .
+<LETTER> ::= `a' .. `z'
+  \alt `A' .. `Z'
 
-{\bf DIGIT:}`0' {\escapegrammar ..} `9'
-  .
+<DIGIT> ::= `0' .. `9'
 
-{\bf WHITESPACE:}(`$\backslash$t' $|$ ` ' $|$ NEWLINE)+
-  .
+<WHITESPACE> ::= (`\\t' | ` ' | <NEWLINE>)+
 \end{grammar}
 
 
@@ -11296,11 +11257,9 @@
 {\em Comments} are sections of program text that are used for documentation.
 
 \begin{grammar}
-{\bf SINGLE\_LINE\_COMMENT:}`//' \~{}(NEWLINE)* (NEWLINE)?
-  .
+<SINGLE\_LINE\_COMMENT> ::= `//' \~{}(<NEWLINE>)* (<NEWLINE>)?
 
-{\bf MULTI\_LINE\_COMMENT:}`/*' (MULTI\_LINE\_COMMENT $|$ \~{} `*/')* `*/'
-  .
+<MULTI\_LINE\_COMMENT> ::= `/*' (<MULTI\_LINE\_COMMENT> | \~{} `*/')* `*/'
 \end{grammar}
 
 \LMHash{}
@@ -11338,37 +11297,38 @@
 \hline
 Description & Operator & Associativity & Precedence \\
 \hline
-Unary postfix & ., ?., e++, e--, e1[e2], e1() , () & None & 16 \\
+Unary postfix & \code{$e$.}, \code{$e$?.}, \code{$e$++}, \code{$e$-{}-}, \code{$e1$[$e2$]},
+\code{$e$()} & None & 16 \\
 \hline
-Unary prefix & -e, !e, \~{}e, ++e, --e & None & 15\\
+Unary prefix & \code{-$e$}, \code{!$e$}, \code{\~{}$e$}, \code{++$e$}, \code{-{}-$e$} & None & 15\\
 \hline
-Multiplicative & *, /, \~/, \% & Left & 14\\
+Multiplicative & \code{*}, \code{/}, \code{\~{}/}, \code{\%} & Left & 14\\
 \hline
-Additive & +, - & Left & 13\\
+Additive & \code{+}, \code{-} & Left & 13\\
 \hline
-Shift & $<<$, $>>$, $>>>$& Left & 12\\
+Shift & \code{\ltlt}, \code{\gtgt}, \code{\gtgtgt} & Left & 12\\
 \hline
-Bitwise AND & \& & Left & 11\\
+Bitwise AND & \code{\&} & Left & 11\\
 \hline
-Bitwise XOR & \^{} & Left & 10\\
+Bitwise XOR & \code{\^{}} & Left & 10\\
 \hline
-Bitwise Or & $|$ & Left & 9\\
+Bitwise Or & \code{|} & Left & 9\\
 \hline
-Relational & <, >, $<=$, $>=$, \AS{}, \IS{}, \IS{}! & None & 8\\
+Relational & \code{<}, \code{>}, \code{<=}, \code{>=}, \AS{}, \IS{}, \code{\IS{}!} & None & 8\\
 \hline
-Equality & ==, != & None & 7\\
+Equality & \code{==}, \code{!=} & None & 7\\
 \hline
-Logical AND & \&\& & Left & 6\\
+Logical AND & \code{\&\&} & Left & 6\\
 \hline
-Logical Or & $||$ & Left & 5\\
+Logical Or & \code{||} & Left & 5\\
 \hline
-If-null & ?? & Left & 4\\
+If-null & \code{??} & Left & 4\\
 \hline
-Conditional & e1? e2: e3 & Right & 3\\
+Conditional & \code{$e1$\,?\,$e2$\,:\,$e3$} & Right & 3\\
 \hline
-Cascade & .. & Left & 2\\
+Cascade & \code{..} & Left & 2\\
 \hline
-Assignment & =, *=, /=, +=, -= ,\&=, \^{}= etc. & Right & 1\\
+Assignment & \code{=}, \code{*=}, \code{/=}, \code{+=}, \code{-=}, \code{\&=}, \code{\^{}=}, etc. & Right & 1\\
 \hline
 \end{tabular}
 }
@@ -11386,7 +11346,8 @@
 
 This introduces a number of differencs:
 \begin{itemize}
-\item Valid values of JavaScript \code{int} are any
+\item[$\bullet$]
+Valid values of JavaScript \code{int} are any
 IEEE-754 64-bit floating point number with no fractional part.
 This includes positive and negative {\em infinity},
 which can be reached by overflowing
@@ -11396,15 +11357,18 @@
 cannot be compiled to JavaScript.
 Operations on integers may lose precision since 64-bit floating point numbers
 are limited to 53 significant bits.
-\item JavaScript \code{int} instances also implement \code{double},
+\item[$\bullet$]
+JavaScript \code{int} instances also implement \code{double},
 and integer-valued \code{double} instances also implement \code{int}.
 The \code{int} and \code{double} class are still separate subclasses of the
 class \code{num}, but {\em instances} of either class that represent an integer,
 act as if they are actually instances of a common subclass implementing both
 \code{int} and \code{double}. Fractional numbers only implement \code{double}.
-\item Bitwise operations on integers (and, or, xor, negate and shifts)
+\item[$\bullet$]
+Bitwise operations on integers (and, or, xor, negate and shifts)
 all truncate the operands to 32-bit values.
-\item The \code{identical} method cannot distinguish the values $0.0$ and $-0.0$,
+\item[$\bullet$]
+The \code{identical} method cannot distinguish the values $0.0$ and $-0.0$,
 and it cannot recognize any {\em NaN} value as identical to itself.
 For efficiency, the \code{identical} operation uses the JavaScript \code{===}
 operator.
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 5cfd272..f9056d7 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -1851,6 +1851,7 @@
   
   
   
+  
 <h3>Requests</h3><dl><dt class="request"><a name="request_edit.format">edit.format</a></dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "edit.format"
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index af80d5a..40d0ca6 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -125,6 +125,8 @@
 const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT = 'diagnostic.getServerPort';
 const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS = 'contexts';
 const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT = 'port';
+const String EDIT_REQUEST_DARTFIX = 'edit.dartfix';
+const String EDIT_REQUEST_DARTFIX_INCLUDED = 'included';
 const String EDIT_REQUEST_FORMAT = 'edit.format';
 const String EDIT_REQUEST_FORMAT_FILE = 'file';
 const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
@@ -171,6 +173,8 @@
 const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE = 'file';
 const String EDIT_REQUEST_SORT_MEMBERS = 'edit.sortMembers';
 const String EDIT_REQUEST_SORT_MEMBERS_FILE = 'file';
+const String EDIT_RESPONSE_DARTFIX_DESCRIPTION = 'description';
+const String EDIT_RESPONSE_DARTFIX_FIXES = 'fixes';
 const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
 const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
 const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index b1f5dce..aa83274 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -6166,6 +6166,218 @@
 }
 
 /**
+ * edit.dartfix params
+ *
+ * {
+ *   "included": List<FilePath>
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class EditDartfixParams implements RequestParams {
+  List<String> _included;
+
+  /**
+   * A list of the files and directories for which edits should be suggested.
+   * If a request is made for a file which does not exist, or which is not
+   * currently subject to analysis (e.g. because it is not associated with any
+   * analysis root specified to analysis.setAnalysisRoots), an error of type
+   * FORMAT_INVALID_FILE will be generated.
+   */
+  List<String> get included => _included;
+
+  /**
+   * A list of the files and directories for which edits should be suggested.
+   * If a request is made for a file which does not exist, or which is not
+   * currently subject to analysis (e.g. because it is not associated with any
+   * analysis root specified to analysis.setAnalysisRoots), an error of type
+   * FORMAT_INVALID_FILE will be generated.
+   */
+  void set included(List<String> value) {
+    assert(value != null);
+    this._included = value;
+  }
+
+  EditDartfixParams(List<String> included) {
+    this.included = included;
+  }
+
+  factory EditDartfixParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      List<String> included;
+      if (json.containsKey("included")) {
+        included = jsonDecoder.decodeList(
+            jsonPath + ".included", json["included"], jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "included");
+      }
+      return new EditDartfixParams(included);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "edit.dartfix params", json);
+    }
+  }
+
+  factory EditDartfixParams.fromRequest(Request request) {
+    return new EditDartfixParams.fromJson(
+        new RequestDecoder(request), "params", request.params);
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["included"] = included;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return new Request(id, "edit.dartfix", toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditDartfixParams) {
+      return listEqual(
+          included, other.included, (String a, String b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, included.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * edit.dartfix result
+ *
+ * {
+ *   "description": List<String>
+ *   "fixes": List<SourceFileEdit>
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class EditDartfixResult implements ResponseResult {
+  List<String> _description;
+
+  List<SourceFileEdit> _fixes;
+
+  /**
+   * A list of human readable changes made by applying the fixes.
+   */
+  List<String> get description => _description;
+
+  /**
+   * A list of human readable changes made by applying the fixes.
+   */
+  void set description(List<String> value) {
+    assert(value != null);
+    this._description = value;
+  }
+
+  /**
+   * The suggested fixes.
+   */
+  List<SourceFileEdit> get fixes => _fixes;
+
+  /**
+   * The suggested fixes.
+   */
+  void set fixes(List<SourceFileEdit> value) {
+    assert(value != null);
+    this._fixes = value;
+  }
+
+  EditDartfixResult(List<String> description, List<SourceFileEdit> fixes) {
+    this.description = description;
+    this.fixes = fixes;
+  }
+
+  factory EditDartfixResult.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      List<String> description;
+      if (json.containsKey("description")) {
+        description = jsonDecoder.decodeList(jsonPath + ".description",
+            json["description"], jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "description");
+      }
+      List<SourceFileEdit> fixes;
+      if (json.containsKey("fixes")) {
+        fixes = jsonDecoder.decodeList(
+            jsonPath + ".fixes",
+            json["fixes"],
+            (String jsonPath, Object json) =>
+                new SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "fixes");
+      }
+      return new EditDartfixResult(description, fixes);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "edit.dartfix result", json);
+    }
+  }
+
+  factory EditDartfixResult.fromResponse(Response response) {
+    return new EditDartfixResult.fromJson(
+        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        "result",
+        response.result);
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["description"] = description;
+    result["fixes"] =
+        fixes.map((SourceFileEdit value) => value.toJson()).toList();
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return new Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditDartfixResult) {
+      return listEqual(
+              description, other.description, (String a, String b) => a == b) &&
+          listEqual(fixes, other.fixes,
+              (SourceFileEdit a, SourceFileEdit b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, description.hashCode);
+    hash = JenkinsSmiHash.combine(hash, fixes.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
  * edit.format params
  *
  * {
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 88d5252..2069432 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -38,6 +38,7 @@
 import 'package:analysis_server/src/plugin/plugin_watcher.dart';
 import 'package:analysis_server/src/protocol_server.dart' as server;
 import 'package:analysis_server/src/search/search_domain.dart';
+import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
 import 'package:analysis_server/src/server/diagnostic_server.dart';
 import 'package:analysis_server/src/services/correction/namespace.dart';
 import 'package:analysis_server/src/services/search/element_visitors.dart';
@@ -338,6 +339,8 @@
    */
   DiagnosticServer diagnosticServer;
 
+  final DetachableFileSystemManager detachableFileSystemManager;
+
   /**
    * Initialize a newly created server to receive requests from and send
    * responses to the given [channel].
@@ -347,12 +350,17 @@
    * exceptions to show up in unit tests, but it should be set to false when
    * running a full analysis server.
    */
-  AnalysisServer(this.channel, this.resourceProvider, this.options,
-      this.sdkManager, this.instrumentationService,
-      {this.diagnosticServer,
-      ResolverProvider fileResolverProvider: null,
-      ResolverProvider packageResolverProvider: null})
-      : notificationManager =
+  AnalysisServer(
+    this.channel,
+    this.resourceProvider,
+    this.options,
+    this.sdkManager,
+    this.instrumentationService, {
+    this.diagnosticServer,
+    ResolverProvider fileResolverProvider: null,
+    ResolverProvider packageResolverProvider: null,
+    this.detachableFileSystemManager: null,
+  }) : notificationManager =
             new NotificationManager(channel, resourceProvider) {
     _performance = performanceDuringStartup;
 
@@ -1006,7 +1014,7 @@
     return contextManager.isInAnalysisRoot(file);
   }
 
-  Future<void> shutdown() async {
+  Future<void> shutdown() {
     running = false;
 
     if (options.analytics != null) {
@@ -1017,12 +1025,18 @@
       });
     }
 
+    if (options.enableUXExperiment2) {
+      detachableFileSystemManager?.dispose();
+    }
+
     // Defer closing the channel and shutting down the instrumentation server so
     // that the shutdown response can be sent and logged.
     new Future(() {
       instrumentationService.shutdown();
       channel.close();
     });
+
+    return new Future.value();
   }
 
   /**
@@ -1147,7 +1161,7 @@
     return flutterServices[service]?.contains(file) ?? false;
   }
 
-  _scheduleAnalysisImplementedNotification() async {
+  Future<void> _scheduleAnalysisImplementedNotification() async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     Set<String> files = analysisServices[AnalysisService.IMPLEMENTED];
@@ -1190,6 +1204,19 @@
    * Whether to enable parsing via the Fasta parser.
    */
   bool useFastaParser = true;
+
+  /**
+   * User Experience, Experiment #1. This experiment changes the notion of
+   * what analysis roots are and priority files: the analysis root is set to be
+   * the priority files' containing directory.
+   */
+  bool enableUXExperiment1 = false;
+
+  /**
+   * User Experience, Experiment #2. This experiment introduces the notion of an
+   * intermittent file system.
+   */
+  bool enableUXExperiment2 = false;
 }
 
 /**
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index a8e0598..8cfedbb 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -28,6 +28,7 @@
 import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
+import 'package:path/path.dart';
 
 // TODO(devoncarew): See #31456 for the tracking issue to remove this flag.
 final bool disableManageImportsOnPaste = true;
@@ -361,6 +362,10 @@
    * Implement the 'analysis.setAnalysisRoots' request.
    */
   Response setAnalysisRoots(Request request) {
+    if (server.options.enableUXExperiment1) {
+      return new AnalysisSetAnalysisRootsResult().toResponse(request.id);
+    }
+
     var params = new AnalysisSetAnalysisRootsParams.fromRequest(request);
     List<String> includedPathList = params.included;
     List<String> excludedPathList = params.excluded;
@@ -379,9 +384,17 @@
         return new Response.invalidFilePathFormat(request, path);
       }
     }
-    // continue in server
-    server.setAnalysisRoots(request.id, includedPathList, excludedPathList,
-        params.packageRoots ?? <String, String>{});
+    Map<String, String> packageRoots =
+        params.packageRoots ?? <String, String>{};
+
+    if (server.options.enableUXExperiment2 &&
+        server.detachableFileSystemManager != null) {
+      server.detachableFileSystemManager.setAnalysisRoots(
+          request.id, includedPathList, excludedPathList, packageRoots);
+    } else {
+      server.setAnalysisRoots(
+          request.id, includedPathList, excludedPathList, packageRoots);
+    }
     return new AnalysisSetAnalysisRootsResult().toResponse(request.id);
   }
 
@@ -400,6 +413,46 @@
    */
   Response setPriorityFiles(Request request) {
     var params = new AnalysisSetPriorityFilesParams.fromRequest(request);
+
+    if (server.options.enableUXExperiment1) {
+      // If this experiment is enabled, set the analysis root to be the
+      // containing directory.
+
+      List<String> includedPathList = new List<String>();
+
+      // Reference the priority files, remove files that don't end in dart, yaml
+      // or html suffixes and sort from shortest to longest file paths.
+      List<String> priorityFiles = params.files;
+      priorityFiles.removeWhere((s) =>
+          !s.endsWith('.dart') && !s.endsWith('.yaml') && !s.endsWith('.html'));
+
+      Context pathContext = server.resourceProvider.pathContext;
+      List<String> containingDirectories = <String>[];
+      for (String filePath in priorityFiles) {
+        containingDirectories.add(pathContext.dirname(filePath));
+      }
+      containingDirectories.sort();
+
+      // For each file, add the contained directory to includedPathList iff
+      // some other parent containing directory has not already been added.
+      for (String containedDir in containingDirectories) {
+        // Check that no parent directories have already been added (we have
+        // guarantees here as the list was sorted above.)
+        bool parentDirectoryInListAlready = false;
+        for (int i = 0; i < includedPathList.length; i++) {
+          if (containedDir.startsWith(includedPathList[i])) {
+            parentDirectoryInListAlready = true;
+          }
+        }
+        if (!parentDirectoryInListAlready) {
+          includedPathList.add(containedDir);
+        }
+      }
+
+      server.setAnalysisRoots(
+          request.id, includedPathList, <String>[], <String, String>{});
+    }
+
     server.setPriorityFiles(request.id, params.files);
     //
     // Forward the request to the plugins.
diff --git a/pkg/analysis_server/lib/src/server/detachable_filesystem_manager.dart b/pkg/analysis_server/lib/src/server/detachable_filesystem_manager.dart
new file mode 100644
index 0000000..dc2cead
--- /dev/null
+++ b/pkg/analysis_server/lib/src/server/detachable_filesystem_manager.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/analysis_server.dart';
+
+/**
+ * A class that can be used to confirm an analysis server instance to better
+ * support intermittent file systems.
+ *
+ * See also [AnalysisServerOptions.detachableFileSystemManager].
+ */
+abstract class DetachableFileSystemManager {
+  /**
+   * Indicate that the [DetachableFileSystemManager] and the containing analysis
+   * server are being shut down.
+   */
+  void dispose();
+
+  /**
+   * Forward on the 'analysis.setAnalysisRoots' request.
+   *
+   * This class can choose to pass through all [setAnalysisRoots] calls to the
+   * underlying analysis server, it can choose to modify the given
+   * [includedPaths] and other parameters, or it could choose to delays calls to
+   * [setAnalysisRoots].
+   */
+  void setAnalysisRoots(String requestId, List<String> includedPaths,
+      List<String> excludedPaths, Map<String, String> packageRoots);
+
+  /**
+   * Called exactly once before any calls to [setAnalysisRoots].
+   */
+  void setAnalysisServer(AnalysisServer server);
+}
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 59a43f0..0ee7c49 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -7,6 +7,7 @@
 import 'dart:math';
 
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
 import 'package:analysis_server/src/server/dev_server.dart';
 import 'package:analysis_server/src/server/diagnostic_server.dart';
 import 'package:analysis_server/src/server/http_server.dart';
@@ -265,6 +266,19 @@
   static const String TRAIN_USING = "train-using";
 
   /**
+   * User Experience, Experiment #1. This experiment changes the notion of
+   * what analysis roots are and priority files: the analysis root is set to be
+   * the priority files' containing directory.
+   */
+  static const String UX_EXPERIMENT_1 = "ux-experiment-1";
+
+  /**
+   * User Experience, Experiment #2. This experiment introduces the notion of an
+   * intermittent file system.
+   */
+  static const String UX_EXPERIMENT_2 = "ux-experiment-2";
+
+  /**
    * The instrumentation server that is to be used by the analysis server.
    */
   InstrumentationServer instrumentationServer;
@@ -281,6 +295,12 @@
    */
   ResolverProvider packageResolverProvider;
 
+  /***
+   * An optional manager to handle file systems which may not always be
+   * available.
+   */
+  DetachableFileSystemManager detachableFileSystemManager;
+
   SocketServer socketServer;
 
   HttpAnalysisServer httpServer;
@@ -308,6 +328,8 @@
     analysisServerOptions.clientVersion = results[CLIENT_VERSION];
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
     analysisServerOptions.useFastaParser = results[USE_FASTA_PARSER];
+    analysisServerOptions.enableUXExperiment1 = results[UX_EXPERIMENT_1];
+    analysisServerOptions.enableUXExperiment2 = results[UX_EXPERIMENT_2];
 
     bool disableAnalyticsForSession = results[SUPPRESS_ANALYTICS_FLAG];
     if (results.wasParsed(TRAIN_USING)) {
@@ -431,7 +453,8 @@
         instrumentationService,
         diagnosticServer,
         fileResolverProvider,
-        packageResolverProvider);
+        packageResolverProvider,
+        detachableFileSystemManager);
     httpServer = new HttpAnalysisServer(socketServer);
 
     diagnosticServer.httpServer = httpServer;
@@ -465,6 +488,8 @@
         }
         await instrumentationService.shutdown();
 
+        socketServer.analysisServer.shutdown();
+
         try {
           tempDriverDir.deleteSync(recursive: true);
         } catch (_) {
@@ -479,10 +504,12 @@
         stdioServer.serveStdio().then((_) async {
           // TODO(brianwilkerson) Determine whether this await is necessary.
           await null;
+
           if (serve_http) {
             httpServer.close();
           }
           await instrumentationService.shutdown();
+          socketServer.analysisServer.shutdown();
           exit(0);
         });
       },
@@ -588,6 +615,16 @@
     parser.addOption(TRAIN_USING,
         help: "Pass in a directory to analyze for purposes of training an "
             "analysis server snapshot.");
+    parser.addFlag(UX_EXPERIMENT_1,
+        help: "User Experience, Experiment #1, "
+            "this experiment changes the notion of analysis roots and priority "
+            "files.",
+        hide: true);
+    parser.addFlag(UX_EXPERIMENT_2,
+        help: "User Experience, Experiment #2, "
+            "this experiment introduces the notion of an intermittent file "
+            "system.",
+        hide: true);
 
     return parser;
   }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 41a4803..e2ade9f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -227,6 +227,15 @@
    * location of this [Expression] in AST allows extracting.
    */
   RefactoringStatus _checkSelection() {
+    if (selectionOffset <= 0) {
+      return new RefactoringStatus.fatal(
+          'The selection offset must be greater than zero.');
+    }
+    if (selectionOffset + selectionLength >= resolveResult.content.length) {
+      return new RefactoringStatus.fatal(
+          'The selection end offset must be less then the length of the file.');
+    }
+
     String selectionStr;
     // exclude whitespaces
     {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index aa110e0..3b201fb 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -15,6 +15,46 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 /**
+ * Helper for renaming one or more [Element]s.
+ */
+class RenameProcessor {
+  final SearchEngine searchEngine;
+  final SourceChange change;
+  final String newName;
+
+  RenameProcessor(this.searchEngine, this.change, this.newName);
+
+  /**
+   * Add the edit that updates the [element] declaration.
+   */
+  void addDeclarationEdit(Element element) {
+    if (element != null) {
+      SourceEdit edit =
+          newSourceEdit_range(range.elementName(element), newName);
+      doSourceChange_addElementEdit(change, element, edit);
+    }
+  }
+
+  /**
+   * Add edits that update [matches].
+   */
+  void addReferenceEdits(List<SearchMatch> matches) {
+    List<SourceReference> references = getSourceReferences(matches);
+    for (SourceReference reference in references) {
+      reference.addEdit(change, newName);
+    }
+  }
+
+  /**
+   * Update the [element] declaration and reference to it.
+   */
+  Future<void> renameElement(Element element) {
+    addDeclarationEdit(element);
+    return searchEngine.searchReferences(element).then(addReferenceEdits);
+  }
+}
+
+/**
  * An abstract implementation of [RenameRefactoring].
  */
 abstract class RenameRefactoringImpl extends RefactoringImpl
@@ -36,27 +76,6 @@
 
   Element get element => _element;
 
-  /**
-   * Adds a [SourceEdit] to update [element] name to [change].
-   */
-  void addDeclarationEdit(Element element) {
-    if (element != null) {
-      SourceEdit edit =
-          newSourceEdit_range(range.elementName(element), newName);
-      doSourceChange_addElementEdit(change, element, edit);
-    }
-  }
-
-  /**
-   * Adds [SourceEdit]s to update [matches] to [change].
-   */
-  void addReferenceEdits(List<SearchMatch> matches) {
-    List<SourceReference> references = getSourceReferences(matches);
-    for (SourceReference reference in references) {
-      reference.addEdit(change, newName);
-    }
-  }
-
   @override
   Future<RefactoringStatus> checkInitialConditions() {
     RefactoringStatus result = new RefactoringStatus();
@@ -100,7 +119,7 @@
   /**
    * Adds individual edits to [change].
    */
-  Future fillChange();
+  Future<void> fillChange();
 
   @override
   bool requiresPreview() {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index cf80af9..d085e78 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -86,20 +86,19 @@
   }
 
   @override
-  Future fillChange() async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
+  Future<void> fillChange() async {
+    var processor = new RenameProcessor(searchEngine, change, newName);
     // update declarations
     for (Element renameElement in _validator.elements) {
       if (renameElement.isSynthetic && renameElement is FieldElement) {
-        addDeclarationEdit(renameElement.getter);
-        addDeclarationEdit(renameElement.setter);
+        processor.addDeclarationEdit(renameElement.getter);
+        processor.addDeclarationEdit(renameElement.setter);
       } else {
-        addDeclarationEdit(renameElement);
+        processor.addDeclarationEdit(renameElement);
       }
     }
     // update references
-    addReferenceEdits(_validator.references);
+    processor.addReferenceEdits(_validator.references);
     // potential matches
     List<SearchMatch> nameMatches =
         await searchEngine.searchMemberReferences(oldName);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
index ff84856..755ebff 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -56,7 +56,7 @@
   }
 
   @override
-  Future fillChange() async {
+  Future<void> fillChange() async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     // prepare references
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 2ebf57a..53e382b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -52,7 +52,7 @@
   }
 
   @override
-  Future fillChange() async {
+  Future<void> fillChange() async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     // update declaration
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
index e8a62c9..643be1f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
@@ -38,8 +38,8 @@
   }
 
   @override
-  Future fillChange() {
-    addDeclarationEdit(element);
-    return searchEngine.searchReferences(element).then(addReferenceEdits);
+  Future<void> fillChange() {
+    var processor = new RenameProcessor(searchEngine, change, newName);
+    return processor.renameElement(element);
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
index ac8326b..e270f82 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
@@ -40,8 +40,8 @@
   }
 
   @override
-  Future fillChange() {
-    addDeclarationEdit(element);
-    return searchEngine.searchReferences(element).then(addReferenceEdits);
+  Future<void> fillChange() async {
+    var processor = new RenameProcessor(searchEngine, change, newName);
+    await processor.renameElement(element);
   }
 }
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 ce99486..369b832 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -75,11 +75,10 @@
   }
 
   @override
-  Future fillChange() async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
+  Future<void> fillChange() async {
+    var processor = new RenameProcessor(searchEngine, change, newName);
     for (Element element in elements) {
-      addDeclarationEdit(element);
+      processor.addDeclarationEdit(element);
       var references = await searchEngine.searchReferences(element);
 
       // Exclude "implicit" references to optional positional parameters.
@@ -87,7 +86,7 @@
         references.removeWhere((match) => match.sourceRange.length == 0);
       }
 
-      addReferenceEdits(references);
+      processor.addReferenceEdits(references);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
index db3ad4e..88cac3a 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
@@ -13,6 +13,7 @@
 import 'package:analysis_server/src/services/refactoring/rename.dart';
 import 'package:analysis_server/src/services/search/element_visitors.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analysis_server/src/utilities/flutter.dart' as flutter;
 import 'package:analyzer/dart/ast/ast.dart' show Identifier;
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/java_core.dart';
@@ -42,6 +43,13 @@
  * A [Refactoring] for renaming compilation unit member [Element]s.
  */
 class RenameUnitMemberRefactoringImpl extends RenameRefactoringImpl {
+  /// If the [element] is a Flutter `StatefulWidget` declaration, this is the
+  /// corresponding `State` declaration.
+  ClassElement _flutterWidgetState;
+
+  /// If [_flutterWidgetState] is set, this is the new name of it.
+  String _flutterWidgetStateNewName;
+
   RenameUnitMemberRefactoringImpl(
       RefactoringWorkspace workspace, Element element)
       : super(workspace, element);
@@ -61,8 +69,25 @@
   }
 
   @override
-  Future<RefactoringStatus> checkFinalConditions() {
-    return validateRenameTopLevel(searchEngine, element, newName);
+  Future<RefactoringStatus> checkFinalConditions() async {
+    var status = await validateRenameTopLevel(searchEngine, element, newName);
+    if (_flutterWidgetState != null) {
+      _updateFlutterWidgetStateName();
+      status.addStatus(
+        await validateRenameTopLevel(
+          searchEngine,
+          _flutterWidgetState,
+          _flutterWidgetStateNewName,
+        ),
+      );
+    }
+    return status;
+  }
+
+  @override
+  Future<RefactoringStatus> checkInitialConditions() {
+    _findFlutterStateClass();
+    return super.checkInitialConditions();
   }
 
   @override
@@ -84,7 +109,7 @@
   }
 
   @override
-  Future fillChange() {
+  Future<void> fillChange() async {
     // prepare elements
     List<Element> elements = [];
     if (element is PropertyInducingElement && element.isSynthetic) {
@@ -100,11 +125,41 @@
     } else {
       elements.add(element);
     }
-    // update each element
-    return Future.forEach(elements, (Element element) {
-      addDeclarationEdit(element);
-      return searchEngine.searchReferences(element).then(addReferenceEdits);
-    });
+
+    // Rename each element and references to it.
+    var processor = new RenameProcessor(searchEngine, change, newName);
+    for (var element in elements) {
+      await processor.renameElement(element);
+    }
+
+    // If a StatefulWidget is being renamed, rename also its State.
+    if (_flutterWidgetState != null) {
+      _updateFlutterWidgetStateName();
+      await new RenameProcessor(
+        searchEngine,
+        change,
+        _flutterWidgetStateNewName,
+      ).renameElement(_flutterWidgetState);
+    }
+  }
+
+  void _findFlutterStateClass() {
+    if (flutter.isStatefulWidgetDeclaration(element)) {
+      var oldStateName = oldName + 'State';
+      _flutterWidgetState = element.library.getType(oldStateName) ??
+          element.library.getType('_' + oldStateName);
+    }
+  }
+
+  void _updateFlutterWidgetStateName() {
+    if (_flutterWidgetState != null) {
+      _flutterWidgetStateNewName = newName + 'State';
+      // If the State was private, ensure that it stays private.
+      if (_flutterWidgetState.name.startsWith('_') &&
+          !_flutterWidgetStateNewName.startsWith('_')) {
+        _flutterWidgetStateNewName = '_' + _flutterWidgetStateNewName;
+      }
+    }
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index 250c072..4fd78db 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
 import 'package:analysis_server/src/server/diagnostic_server.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -31,6 +32,7 @@
   final DiagnosticServer diagnosticServer;
   final ResolverProvider fileResolverProvider;
   final ResolverProvider packageResolverProvider;
+  final DetachableFileSystemManager detachableFileSystemManager;
 
   /**
    * The analysis server that was created when a client established a
@@ -45,7 +47,8 @@
       this.instrumentationService,
       this.diagnosticServer,
       this.fileResolverProvider,
-      this.packageResolverProvider);
+      this.packageResolverProvider,
+      this.detachableFileSystemManager);
 
   /**
    * Create an analysis server which will communicate with the client using the
@@ -75,10 +78,17 @@
           'File read mode was set to the unknown mode: $analysisServerOptions.fileReadMode');
     }
 
-    analysisServer = new AnalysisServer(serverChannel, resourceProvider,
-        analysisServerOptions, sdkManager, instrumentationService,
-        diagnosticServer: diagnosticServer,
-        fileResolverProvider: fileResolverProvider,
-        packageResolverProvider: packageResolverProvider);
+    analysisServer = new AnalysisServer(
+      serverChannel,
+      resourceProvider,
+      analysisServerOptions,
+      sdkManager,
+      instrumentationService,
+      diagnosticServer: diagnosticServer,
+      fileResolverProvider: fileResolverProvider,
+      packageResolverProvider: packageResolverProvider,
+      detachableFileSystemManager: detachableFileSystemManager,
+    );
+    detachableFileSystemManager?.setAnalysisServer(analysisServer);
   }
 }
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 7fc00fd..4628c6f 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -1307,6 +1307,14 @@
         diagnosticsSite.socketServer.analysisServerOptions.useFastaParser));
     buf.writeln(writeOption('Instrumentation enabled',
         AnalysisEngine.instance.instrumentationService.isActive));
+    bool uxExp1 =
+        diagnosticsSite.socketServer.analysisServerOptions.enableUXExperiment1;
+    bool uxExp2 =
+        diagnosticsSite.socketServer.analysisServerOptions.enableUXExperiment2;
+    if (uxExp1 || uxExp2) {
+      buf.writeln(writeOption('UX Experiment 1', uxExp1));
+      buf.writeln(writeOption('ux Experiment 2', uxExp2));
+    }
     buf.writeln(writeOption('Server process ID', pid));
     buf.writeln('</div>');
 
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index db72512..06c3d3c 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -319,6 +319,17 @@
 }
 
 /**
+ * Return `true` if the given [element] is a [ClassElement] that extends
+ * the Flutter class `StatefulWidget`.
+ */
+bool isStatefulWidgetDeclaration(Element element) {
+  if (element is ClassElement) {
+    return isExactlyStatefulWidgetType(element.supertype);
+  }
+  return false;
+}
+
+/**
  * Return `true` if the given [element] is the Flutter class `Widget`, or its
  * subtype.
  */
diff --git a/pkg/analysis_server/lib/starter.dart b/pkg/analysis_server/lib/starter.dart
index 5059a59..aa4a30e 100644
--- a/pkg/analysis_server/lib/starter.dart
+++ b/pkg/analysis_server/lib/starter.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
 import 'package:analysis_server/src/server/driver.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/plugin/resolver_provider.dart';
@@ -19,6 +20,12 @@
    */
   factory ServerStarter() = Driver;
 
+  /***
+   * An optional manager to handle file systems which may not always be
+   * available.
+   */
+  void set detachableFileSystemManager(DetachableFileSystemManager manager);
+
   /**
    * Set the file resolver provider used to override the way file URI's
    * are resolved in some contexts. The provider should return `null` if the
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 48b395c..5a877b3 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -180,7 +180,6 @@
     expect(suggestions, hasLength(2));
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor() async {
     addTestFile('class A {bool foo; A() : ^;}');
     await getSuggestions();
@@ -190,7 +189,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor2() async {
     addTestFile('class A {bool foo; A() : s^;}');
     await getSuggestions();
@@ -200,7 +198,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor3() async {
     addTestFile('class A {bool foo; A() : a=7,^;}');
     await getSuggestions();
@@ -210,7 +207,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor4() async {
     addTestFile('class A {bool foo; A() : a=7,s^;}');
     await getSuggestions();
@@ -220,7 +216,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor5() async {
     addTestFile('class A {bool foo; A() : a=7,s^}');
     await getSuggestions();
@@ -230,7 +225,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor6() async {
     addTestFile('class A {bool foo; A() : a=7,^ void bar() {}}');
     await getSuggestions();
@@ -538,11 +532,11 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_inherited() {
-    newFile('/libA.dart', content: 'class A {m() {}}');
     addTestFile('''
-import ${convertPathForImport('/libA.dart')};
+class A {
+  m() {}
+}
 class B extends A {
   x() {^}
 }
diff --git a/pkg/analysis_server/test/integration/coverage.md b/pkg/analysis_server/test/integration/coverage.md
index 2dbaa43..dcec50a 100644
--- a/pkg/analysis_server/test/integration/coverage.md
+++ b/pkg/analysis_server/test/integration/coverage.md
@@ -38,6 +38,7 @@
 - [x] diagnostic.getServerPort
 
 ## edit domain
+- [ ] edit.dartfix
 - [x] edit.format
 - [x] edit.getAssists
 - [x] edit.getAvailableRefactorings
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 3433f34..0d95b2b 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -1495,6 +1495,39 @@
   }
 
   /**
+   * Analyze the specified sources for recommended changes and return a set of
+   * suggested edits for those sources. These edits may include changes to
+   * sources outside the set of specified sources if a change in a specified
+   * source requires it.
+   *
+   * Parameters
+   *
+   * included: List<FilePath>
+   *
+   *   A list of the files and directories for which edits should be suggested.
+   *   If a request is made for a file which does not exist, or which is not
+   *   currently subject to analysis (e.g. because it is not associated with
+   *   any analysis root specified to analysis.setAnalysisRoots), an error of
+   *   type FORMAT_INVALID_FILE will be generated.
+   *
+   * Returns
+   *
+   * description: List<String>
+   *
+   *   A list of human readable changes made by applying the fixes.
+   *
+   * fixes: List<SourceFileEdit>
+   *
+   *   The suggested fixes.
+   */
+  Future<EditDartfixResult> sendEditDartfix(List<String> included) async {
+    var params = new EditDartfixParams(included).toJson();
+    var result = await server.send("edit.dartfix", params);
+    ResponseDecoder decoder = new ResponseDecoder(null);
+    return new EditDartfixResult.fromJson(decoder, 'result', result);
+  }
+
+  /**
    * Return the set of fixes that are available for the errors at a given
    * offset in a given file.
    *
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 11b741a..26ecc39 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -2122,6 +2122,28 @@
     new MatchesJsonObject("diagnostic.getServerPort result", {"port": isInt}));
 
 /**
+ * edit.dartfix params
+ *
+ * {
+ *   "included": List<FilePath>
+ * }
+ */
+final Matcher isEditDartfixParams = new LazyMatcher(() => new MatchesJsonObject(
+    "edit.dartfix params", {"included": isListOf(isFilePath)}));
+
+/**
+ * edit.dartfix result
+ *
+ * {
+ *   "description": List<String>
+ *   "fixes": List<SourceFileEdit>
+ * }
+ */
+final Matcher isEditDartfixResult = new LazyMatcher(() => new MatchesJsonObject(
+    "edit.dartfix result",
+    {"description": isListOf(isString), "fixes": isListOf(isSourceFileEdit)}));
+
+/**
  * edit.format params
  *
  * {
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 5799565..67f5ca5 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -507,7 +507,7 @@
         expect(location.startColumn, 7);
       }
       expect(element.parameters, isNull);
-      expect(element.flags, 0);
+      expect(element.flags, Element.FLAG_ABSTRACT);
     }
   }
 
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index df1e893c..fd048d2 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -52,6 +52,28 @@
         expectedMessage: "The name 'res' is already used in the scope.");
   }
 
+  test_checkInitialCondition_false_outOfRange_length() async {
+    await indexTestUnit('''
+main() {
+  print(1 + 2);
+}
+''');
+    _createRefactoring(0, 1 << 20);
+    RefactoringStatus status = await refactoring.checkAllConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
+  }
+
+  test_checkInitialCondition_outOfRange_offset() async {
+    await indexTestUnit('''
+main() {
+  print(1 + 2);
+}
+''');
+    _createRefactoring(-10, 20);
+    RefactoringStatus status = await refactoring.checkAllConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
+  }
+
   test_checkInitialConditions_assignmentLeftHandSize() async {
     await indexTestUnit('''
 main() {
@@ -68,8 +90,7 @@
 
   test_checkInitialConditions_namePartOfDeclaration_function() async {
     await indexTestUnit('''
-main() {
-}
+void main() {}
 ''');
     _createRefactoringWithSuffix('main', '()');
     // check conditions
@@ -695,6 +716,24 @@
     expect(refactoring.names, unorderedEquals(['helloBob', 'bob']));
   }
 
+  test_isAvailable_false_notPartOfFunction() async {
+    await indexTestUnit('''
+var v = 1 + 2;
+''');
+    _createRefactoringForString('1 + 2');
+    expect(refactoring.isAvailable(), isFalse);
+  }
+
+  test_isAvailable_true() async {
+    await indexTestUnit('''
+main() {
+  print(1 + 2);
+}
+''');
+    _createRefactoringForString('1 + 2');
+    expect(refactoring.isAvailable(), isTrue);
+  }
+
   test_occurrences_differentVariable() async {
     await indexTestUnit('''
 main() {
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index e5c22bf..1db7113 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -367,6 +367,129 @@
 ''');
   }
 
+  test_createChange_ClassElement_flutterWidget() async {
+    addFlutterPackage();
+    await indexTestUnit('''
+import 'package:flutter/material.dart';
+
+class TestPage extends StatefulWidget {
+  const TestPage();
+
+  @override
+  TestPageState createState() => new TestPageState();
+}
+
+class TestPageState extends State<TestPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+    createRenameRefactoringAtString('TestPage extends');
+
+    expect(refactoring.refactoringName, 'Rename Class');
+    expect(refactoring.elementKindName, 'class');
+    expect(refactoring.oldName, 'TestPage');
+    refactoring.newName = 'NewPage';
+
+    return assertSuccessfulRefactoring('''
+import 'package:flutter/material.dart';
+
+class NewPage extends StatefulWidget {
+  const NewPage();
+
+  @override
+  NewPageState createState() => new NewPageState();
+}
+
+class NewPageState extends State<NewPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+  }
+
+  test_createChange_ClassElement_flutterWidget_privateBoth() async {
+    addFlutterPackage();
+    await indexTestUnit('''
+import 'package:flutter/material.dart';
+
+class _TestPage extends StatefulWidget {
+  const _TestPage();
+
+  @override
+  _TestPageState createState() => new _TestPageState();
+}
+
+class _TestPageState extends State<_TestPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+    createRenameRefactoringAtString('_TestPage extends');
+
+    expect(refactoring.refactoringName, 'Rename Class');
+    expect(refactoring.elementKindName, 'class');
+    expect(refactoring.oldName, '_TestPage');
+    refactoring.newName = '_NewPage';
+
+    return assertSuccessfulRefactoring('''
+import 'package:flutter/material.dart';
+
+class _NewPage extends StatefulWidget {
+  const _NewPage();
+
+  @override
+  _NewPageState createState() => new _NewPageState();
+}
+
+class _NewPageState extends State<_NewPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+  }
+
+  test_createChange_ClassElement_flutterWidget_privateState() async {
+    addFlutterPackage();
+    await indexTestUnit('''
+import 'package:flutter/material.dart';
+
+class TestPage extends StatefulWidget {
+  const TestPage();
+
+  @override
+  _TestPageState createState() => new _TestPageState();
+}
+
+class _TestPageState extends State<TestPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+    createRenameRefactoringAtString('TestPage extends');
+
+    expect(refactoring.refactoringName, 'Rename Class');
+    expect(refactoring.elementKindName, 'class');
+    expect(refactoring.oldName, 'TestPage');
+    refactoring.newName = 'NewPage';
+
+    return assertSuccessfulRefactoring('''
+import 'package:flutter/material.dart';
+
+class NewPage extends StatefulWidget {
+  const NewPage();
+
+  @override
+  _NewPageState createState() => new _NewPageState();
+}
+
+class _NewPageState extends State<NewPage> {
+  @override
+  Widget build(BuildContext context) => null;
+}
+''');
+  }
+
   test_createChange_ClassElement_invocation() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit('''
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index 931d87e7..d6957be 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -117,6 +117,7 @@
         InstrumentationService.NULL_SERVICE,
         null,
         null,
+        null,
         null);
   }
 }
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index 8a410b7..551d5dd 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -406,6 +406,20 @@
   public void diagnostic_getServerPort(GetServerPortConsumer consumer);
 
   /**
+   * {@code edit.dartfix}
+   *
+   * Analyze the specified sources for recommended changes and return a set of suggested edits for
+   * those sources. These edits may include changes to sources outside the set of specified sources
+   * if a change in a specified source requires it.
+   *
+   * @param included A list of the files and directories for which edits should be suggested. If a
+   *         request is made for a file which does not exist, or which is not currently subject to
+   *         analysis (e.g. because it is not associated with any analysis root specified to
+   *         analysis.setAnalysisRoots), an error of type FORMAT_INVALID_FILE will be generated.
+   */
+  public void edit_dartfix(List<String> included, DartfixConsumer consumer);
+
+  /**
    * {@code edit.format}
    *
    * Format the contents of a single file. The currently selected region of text is passed in so that
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 2334b39..d5b0623 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -1933,6 +1933,46 @@
       </field>
     </result>
   </request>
+  <request method="dartfix" experimental="true">
+    <p>
+      Analyze the specified sources for recommended changes
+      and return a set of suggested edits for those sources.
+      These edits may include changes to sources outside the set
+      of specified sources if a change in a specified source requires it.
+    </p>
+    <params>
+      <field name="included">
+        <list>
+          <ref>FilePath</ref>
+        </list>
+        <p>
+          A list of the files and directories for which edits should be suggested.
+          If a request is made for a file which does not exist, or which is not
+          currently subject to analysis (e.g. because it is not associated with
+          any analysis root specified to analysis.setAnalysisRoots), an error of
+          type <tt>FORMAT_INVALID_FILE</tt> will be generated.
+        </p>
+      </field>
+    </params>
+    <result>
+      <field name="description">
+        <list>
+          <ref>String</ref>
+        </list>
+        <p>
+          A list of human readable changes made by applying the fixes.
+        </p>
+      </field>
+      <field name="fixes">
+        <list>
+          <ref>SourceFileEdit</ref>
+        </list>
+        <p>
+          The suggested fixes.
+        </p>
+      </field>
+    </result>
+  </request>
   <request method="getFixes">
     <p>
       Return the set of fixes that are available for the errors at
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index ed74e72..fdc7100 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -267,12 +267,6 @@
   PropertyAccessorElement getSetter(String name);
 
   /**
-   * Determine whether the given [constructor], which exists in the superclass
-   * of this class, is accessible to constructors in this class.
-   */
-  bool isSuperConstructorAccessible(ConstructorElement constructor);
-
-  /**
    * Return the element representing the method that results from looking up the
    * given [methodName] in this class with respect to the given [library],
    * ignoring abstract methods, or `null` if the look up fails. The behavior of
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 5759b93..7292017 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -181,7 +181,6 @@
   CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR,
   CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
   CompileTimeErrorCode.MIXIN_DEFERRED_CLASS,
-  CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
   CompileTimeErrorCode.MIXIN_INFERENCE_INCONSISTENT_MATCHING_CLASSES,
   CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS,
   CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index fc72f2b..3269d69 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -93,7 +93,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 69;
+  static const int DATA_VERSION = 70;
 
   /**
    * The number of exception contexts allowed to write. Once this field is
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 6fc964a..5d62f06 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -126,7 +126,6 @@
   Set<String> _definedClassMemberNames;
   Set<String> _definedTopLevelNames;
   Set<String> _referencedNames;
-  Set<String> _subtypedNames;
   AnalysisDriverUnlinkedUnit _driverUnlinkedUnit;
   UnlinkedUnit _unlinked;
   List<int> _apiSignature;
@@ -270,14 +269,6 @@
     return _referencedNames ??= _driverUnlinkedUnit.referencedNames.toSet();
   }
 
-  /**
-   * The names which are used in `extends`, `with` or `implements` clauses in
-   * the file. Import prefixes and type arguments are not included.
-   */
-  Set<String> get subtypedNames {
-    return _subtypedNames ??= _driverUnlinkedUnit.subtypedNames.toSet();
-  }
-
   @visibleForTesting
   FileStateTestView get test => new FileStateTestView(this);
 
@@ -412,6 +403,8 @@
    * Return `true` if the API signature changed since the last refresh.
    */
   bool refresh({bool allowCached: false}) {
+    _invalidateCurrentUnresolvedData();
+
     {
       var rawFileState = _fsState._fileContentCache.get(path, allowCached);
       _content = rawFileState.content;
@@ -469,13 +462,6 @@
     _unlinked = _driverUnlinkedUnit.unit;
     _lineInfo = new LineInfo(_unlinked.lineStarts);
 
-    // Invalidate unlinked information.
-    _definedTopLevelNames = null;
-    _definedClassMemberNames = null;
-    _referencedNames = null;
-    _subtypedNames = null;
-    _topLevelDeclarations = null;
-
     // Prepare API signature.
     bool apiSignatureChanged = _apiSignature != null &&
         !_equalByteLists(_apiSignature, apiSignatureBytes);
@@ -548,6 +534,16 @@
       }
     }
 
+    // Update mapping from subtyped names to files.
+    for (var name in _driverUnlinkedUnit.subtypedNames) {
+      var files = _fsState._subtypedNameToFiles[name];
+      if (files == null) {
+        files = new Set<FileState>();
+        _fsState._subtypedNameToFiles[name] = files;
+      }
+      files.add(this);
+    }
+
     // Return whether the API signature changed.
     return apiSignatureChanged;
   }
@@ -643,6 +639,25 @@
     return _fsState.getFileForUri(absoluteUri);
   }
 
+  /**
+   * Invalidate any data that depends on the current unlinked data of the file,
+   * because [refresh] is going to recompute the unlinked data.
+   */
+  void _invalidateCurrentUnresolvedData() {
+    // Invalidate unlinked information.
+    _definedTopLevelNames = null;
+    _definedClassMemberNames = null;
+    _referencedNames = null;
+    _topLevelDeclarations = null;
+
+    if (_driverUnlinkedUnit != null) {
+      for (var name in _driverUnlinkedUnit.subtypedNames) {
+        var files = _fsState._subtypedNameToFiles[name];
+        files?.remove(this);
+      }
+    }
+  }
+
   CompilationUnit _parse(AnalysisErrorListener errorListener) {
     if (source == null) {
       return _createEmptyCompilationUnit();
@@ -766,6 +781,11 @@
   final Map<FileState, List<FileState>> _partToLibraries = {};
 
   /**
+   * The map of subtyped names to files where these names are subtyped.
+   */
+  final Map<String, Set<FileState>> _subtypedNameToFiles = {};
+
+  /**
    * The value of this field is incremented when the set of files is updated.
    */
   int fileStamp = 0;
@@ -902,6 +922,14 @@
   }
 
   /**
+   * Return files where the given [name] is subtyped, i.e. used in `extends`,
+   * `with` or `implements` clauses.
+   */
+  Set<FileState> getFilesSubtypingName(String name) {
+    return _subtypedNameToFiles[name];
+  }
+
+  /**
    * Return `true` if there is a URI that can be resolved to the [path].
    *
    * When a file exists, but for the URI that corresponds to the file is
@@ -940,6 +968,7 @@
     _pathToFiles.clear();
     _pathToCanonicalFile.clear();
     _partToLibraries.clear();
+    _subtypedNameToFiles.clear();
   }
 
   /**
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 69dd439..4e620344 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -212,7 +212,7 @@
   /**
    * All subtypes declared in the unit.
    */
-  final List<AnalysisDriverSubtypeBuilder> subtypes = [];
+  final List<_SubtypeInfo> subtypes = [];
 
   /**
    * The [_StringInfo] to use for `null` strings.
@@ -236,12 +236,25 @@
     nameRelations.add(new _NameRelationInfo(nameId, kind, offset, isQualified));
   }
 
+  void addSubtype(String name, List<String> members, List<String> supertypes) {
+    for (var supertype in supertypes) {
+      subtypes.add(
+        new _SubtypeInfo(
+          _getStringInfo(supertype),
+          _getStringInfo(name),
+          members.map(_getStringInfo).toList(),
+        ),
+      );
+    }
+  }
+
   /**
    * Index the [unit] and assemble a new [AnalysisDriverUnitIndexBuilder].
    */
   AnalysisDriverUnitIndexBuilder assemble(CompilationUnit unit) {
     unit.accept(new _IndexContributor(this));
-    // sort strings end set IDs
+
+    // Sort strings and set IDs.
     List<_StringInfo> stringInfoList = stringMap.values.toList();
     stringInfoList.sort((a, b) {
       return a.value.compareTo(b.value);
@@ -249,16 +262,17 @@
     for (int i = 0; i < stringInfoList.length; i++) {
       stringInfoList[i].id = i;
     }
-    // sort elements and set IDs
+
+    // Sort elements and set IDs.
     List<_ElementInfo> elementInfoList = elementMap.values.toList();
     elementInfoList.sort((a, b) {
       int delta;
       delta = a.nameIdUnitMember.id - b.nameIdUnitMember.id;
-      if (delta != null) {
+      if (delta != 0) {
         return delta;
       }
       delta = a.nameIdClassMember.id - b.nameIdClassMember.id;
-      if (delta != null) {
+      if (delta != 0) {
         return delta;
       }
       return a.nameIdParameter.id - b.nameIdParameter.id;
@@ -266,6 +280,7 @@
     for (int i = 0; i < elementInfoList.length; i++) {
       elementInfoList[i].id = i;
     }
+
     // Sort element and name relations.
     elementRelations.sort((a, b) {
       return a.elementInfo.id - b.elementInfo.id;
@@ -273,6 +288,12 @@
     nameRelations.sort((a, b) {
       return a.nameInfo.id - b.nameInfo.id;
     });
+
+    // Sort subtypes by supertypes.
+    subtypes.sort((a, b) {
+      return a.supertype.id - b.supertype.id;
+    });
+
     return new AnalysisDriverUnitIndexBuilder(
         strings: stringInfoList.map((s) => s.value).toList(),
         nullStringId: nullString.id,
@@ -297,7 +318,13 @@
         usedNameOffsets: nameRelations.map((r) => r.offset).toList(),
         usedNameIsQualifiedFlags:
             nameRelations.map((r) => r.isQualified).toList(),
-        subtypes: subtypes);
+        supertypes: subtypes.map((subtype) => subtype.supertype.id).toList(),
+        subtypes: subtypes.map((subtype) {
+          return new AnalysisDriverSubtypeBuilder(
+            name: subtype.name.id,
+            members: subtype.members.map((member) => member.id).toList(),
+          );
+        }).toList());
   }
 
   /**
@@ -806,8 +833,7 @@
     supertypes.sort();
     members.sort();
 
-    assembler.subtypes.add(new AnalysisDriverSubtypeBuilder(
-        name: name, supertypes: supertypes, members: members));
+    assembler.addSubtype(name, members, supertypes);
   }
 
   /**
@@ -938,3 +964,25 @@
 
   _StringInfo(this.value);
 }
+
+/**
+ * Information about a subtype in the index.
+ */
+class _SubtypeInfo {
+  /**
+   * The identifier of a direct supertype.
+   */
+  final _StringInfo supertype;
+
+  /**
+   * The name of the class.
+   */
+  final _StringInfo name;
+
+  /**
+   * The names of defined instance members.
+   */
+  final List<_StringInfo> members;
+
+  _SubtypeInfo(this.supertype, this.name, this.members);
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 658298a..9d1ff41 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -378,8 +378,6 @@
    */
   Future<List<SubtypeResult>> subtypes(
       {ClassElement type, SubtypeResult subtype}) async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
     String name;
     String id;
     if (type != null) {
@@ -395,23 +393,14 @@
     final List<SubtypeResult> results = [];
 
     // Note, this is a defensive copy.
-    List<FileState> knownFiles = _driver.fsState.knownFiles.toList();
+    var files = _driver.fsState.getFilesSubtypingName(name)?.toList();
 
-    for (FileState file in knownFiles) {
-      if (file.subtypedNames.contains(name)) {
+    if (files != null) {
+      for (FileState file in files) {
         AnalysisDriverUnitIndex index = await _driver.getIndex(file.path);
         if (index != null) {
-          for (AnalysisDriverSubtype subtype in index.subtypes) {
-            if (subtype.supertypes.contains(id)) {
-              FileState library = file.library ?? file;
-              results.add(new SubtypeResult(
-                library.uriStr,
-                '${library.uriStr};${file.uriStr};${subtype.name}',
-                subtype.name,
-                subtype.members,
-              ));
-            }
-          }
+          var request = new _IndexRequest(index);
+          request.addSubtypes(id, results, file);
         }
       }
     }
@@ -987,6 +976,32 @@
 
   _IndexRequest(this.index);
 
+  void addSubtypes(
+      String superIdString, List<SubtypeResult> results, FileState file) {
+    var superId = getStringId(superIdString);
+    if (superId == -1) {
+      return;
+    }
+
+    var superIndex = _findFirstOccurrence(index.supertypes, superId);
+    if (superIndex == -1) {
+      return;
+    }
+
+    var library = file.library ?? file;
+    for (; index.supertypes[superIndex] == superId; superIndex++) {
+      var subtype = index.subtypes[superIndex];
+      var name = index.strings[subtype.name];
+      var subId = '${library.uriStr};${file.uriStr};$name';
+      results.add(new SubtypeResult(
+        library.uriStr,
+        subId,
+        name,
+        subtype.members.map((m) => index.strings[m]).toList(),
+      ));
+    }
+  }
+
   /**
    * Return the [element]'s identifier in the [index] or `-1` if the
    * [element] is not referenced in the [index].
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 627ce03..63b3281 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/handle.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart' show CompileTimeErrorCode;
 import 'package:analyzer/src/generated/constant.dart' show EvaluationResultImpl;
 import 'package:analyzer/src/generated/engine.dart'
     show AnalysisContext, AnalysisEngine;
@@ -614,50 +613,6 @@
     return super.documentationComment;
   }
 
-  /**
-   * Return `true` if [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS] should
-   * be reported for this class.
-   */
-  bool get doesMixinLackConstructors {
-    if (!isMixinApplication && mixins.isEmpty) {
-      // This class is not a mixin application and it doesn't have a "with"
-      // clause, so CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS is
-      // inapplicable.
-      return false;
-    }
-    if (supertype == null) {
-      // Should never happen, since Object and mixins are the only classes that
-      // have no supertype, and they should have been caught by the test above.
-      assert(false);
-      return false;
-    }
-    // Find the nearest class in the supertype chain that is not a mixin
-    // application.
-    ClassElement nearestNonMixinClass = supertype.element;
-    if (nearestNonMixinClass.isMixinApplication) {
-      // Use a list to keep track of the classes we've seen, so that we won't
-      // go into an infinite loop in the event of a non-trivial loop in the
-      // class hierarchy.
-      List<ClassElement> classesSeen = <ClassElement>[this];
-      while (nearestNonMixinClass.isMixinApplication) {
-        if (classesSeen.contains(nearestNonMixinClass)) {
-          // Loop in the class hierarchy (which is reported elsewhere).  Don't
-          // confuse the user with further errors.
-          return false;
-        }
-        classesSeen.add(nearestNonMixinClass);
-        if (nearestNonMixinClass.supertype == null) {
-          // Should never happen, since Object and mixins are the only classes that
-          // have no supertype, and they are not mixin applications.
-          assert(false);
-          return false;
-        }
-        nearestNonMixinClass = nearestNonMixinClass.supertype.element;
-      }
-    }
-    return !nearestNonMixinClass.constructors.any(isSuperConstructorAccessible);
-  }
-
   @override
   TypeParameterizedElementMixin get enclosingTypeParameterContext => null;
 
@@ -1067,26 +1022,6 @@
       getNamedConstructorFromList(name, constructors);
 
   @override
-  bool isSuperConstructorAccessible(ConstructorElement constructor) {
-    if (!constructor.isAccessibleIn(library)) {
-      return false;
-    }
-    // If this class has no mixins, then all superclass constructors are
-    // accessible.
-    if (mixins.isEmpty) {
-      return true;
-    }
-    // Otherwise only constructors that lack optional parameters are
-    // accessible (see dartbug.com/19576).
-    for (ParameterElement parameter in constructor.parameters) {
-      if (parameter.isOptional) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @override
   void visitChildren(ElementVisitor visitor) {
     super.visitChildren(visitor);
     safelyVisitChildren(constructors, visitor);
@@ -1112,12 +1047,9 @@
       assert(false);
       constructorsToForward = <ConstructorElement>[];
     } else if (!supertype.element.isMixinApplication) {
-      List<ConstructorElement> superclassConstructors =
-          supertype.element.constructors;
-      // Filter out any constructors with optional parameters (see
-      // dartbug.com/15101).
-      constructorsToForward =
-          superclassConstructors.where(isSuperConstructorAccessible);
+      var library = this.library;
+      constructorsToForward = supertype.element.constructors
+          .where((constructor) => constructor.isAccessibleIn(library));
     } else {
       if (visitedClasses == null) {
         visitedClasses = <ClassElementImpl>[this];
@@ -1170,8 +1102,15 @@
             new List<ParameterElement>(count);
         for (int i = 0; i < count; i++) {
           ParameterElement superParameter = superParameters[i];
-          ParameterElementImpl implicitParameter =
-              new ParameterElementImpl(superParameter.name, -1);
+          ParameterElementImpl implicitParameter;
+          if (superParameter is DefaultParameterElementImpl) {
+            implicitParameter =
+                new DefaultParameterElementImpl(superParameter.name, -1)
+                  ..constantInitializer = superParameter.constantInitializer;
+          } else {
+            implicitParameter =
+                new ParameterElementImpl(superParameter.name, -1);
+          }
           implicitParameter.isConst = superParameter.isConst;
           implicitParameter.isFinal = superParameter.isFinal;
           // ignore: deprecated_member_use
@@ -3809,9 +3748,6 @@
   @override
   ConstructorElement getNamedConstructor(String name) => null;
 
-  @override
-  bool isSuperConstructorAccessible(ConstructorElement constructor) => false;
-
   void _resynthesizeMembers() {
     List<FieldElementImpl> fields = <FieldElementImpl>[];
     // Build the 'index' field.
@@ -6645,6 +6581,9 @@
       : super.forSerialized(unlinkedClass, enclosingUnit);
 
   @override
+  bool get isAbstract => true;
+
+  @override
   bool get isMixin => true;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/handle.dart b/pkg/analyzer/lib/src/dart/element/handle.dart
index f2929a7..8d6f5f0 100644
--- a/pkg/analyzer/lib/src/dart/element/handle.dart
+++ b/pkg/analyzer/lib/src/dart/element/handle.dart
@@ -139,10 +139,6 @@
       actualElement.getSetter(setterName);
 
   @override
-  bool isSuperConstructorAccessible(ConstructorElement constructor) =>
-      actualElement.isSuperConstructorAccessible(constructor);
-
-  @override
   MethodElement lookUpConcreteMethod(
           String methodName, LibraryElement library) =>
       actualElement.lookUpConcreteMethod(methodName, library);
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index b8a110c..617f5a5 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -1389,6 +1389,9 @@
         _typeArguments = _typeArgumentsComputer();
       } on RecursiveInstantiateToBounds {
         _hasTypeParameterReferenceInBound = true;
+        _typeArguments = new List<DartType>.filled(
+            element.typeParameters.length,
+            element.context.typeProvider.dynamicType);
       }
       _typeArgumentsComputer = null;
     }
@@ -1505,9 +1508,11 @@
     //
     List<DartType> jArgs = j.typeArguments;
     List<DartType> jVars = jElement.type.typeArguments;
-    supertype = supertype.substitute2(jArgs, jVars);
-    if (supertype == i) {
-      return true;
+    if (supertype != null) {
+      supertype = supertype.substitute2(jArgs, jVars);
+      if (supertype == i) {
+        return true;
+      }
     }
     //
     // I is listed in the on clause of J.
@@ -1761,11 +1766,13 @@
   }
 
   ExecutableElement lookUpInheritedMember(String name, LibraryElement library,
-      {bool concrete: false, bool setter: false}) {
+      {bool concrete: false, int stopMixinIndex, bool setter: false}) {
     HashSet<ClassElement> visitedClasses = new HashSet<ClassElement>();
 
     ExecutableElement lookUpImpl(InterfaceTypeImpl type,
-        {bool acceptAbstract: false, bool includeType: true}) {
+        {bool acceptAbstract: false,
+        bool includeType: true,
+        int stopMixinIndex}) {
       if (type == null || !visitedClasses.add(type.element)) {
         return null;
       }
@@ -1782,15 +1789,15 @@
           if (!concrete || acceptAbstract || !result.isAbstract) {
             return result;
           }
-          ClassElementImpl elementImpl = type.element;
-          if (elementImpl.hasNoSuchMethod) {
-            return result;
-          }
         }
       }
 
-      for (InterfaceType mixin in type.mixins.reversed) {
-        var result = lookUpImpl(mixin, acceptAbstract: acceptAbstract);
+      var mixins = type.mixins;
+      for (var i = 0; i < mixins.length; i++) {
+        if (stopMixinIndex != null && i >= stopMixinIndex) {
+          break;
+        }
+        var result = lookUpImpl(mixins[i], acceptAbstract: acceptAbstract);
         if (result != null) {
           return result;
         }
@@ -1819,7 +1826,11 @@
       }
       return null;
     } else {
-      return lookUpImpl(this, includeType: false);
+      return lookUpImpl(
+        this,
+        includeType: false,
+        stopMixinIndex: stopMixinIndex,
+      );
     }
   }
 
@@ -2380,6 +2391,13 @@
         return member;
       }
     }
+    for (InterfaceType constraint in targetType.superclassConstraints) {
+      ExecutableElement member = _lookUpMemberInInterfaces(
+          constraint, true, library, visitedInterfaces, getMember);
+      if (member != null) {
+        return member;
+      }
+    }
     for (InterfaceType mixinType in targetType.mixins.reversed) {
       ExecutableElement member = _lookUpMemberInInterfaces(
           mixinType, true, library, visitedInterfaces, getMember);
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index b75e8d1..45a79c0 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -449,10 +449,7 @@
           correction:
               "Try using a generic function type (returnType 'Function(' parameters ')').");
 
-  static const ParserErrorCode INVALID_HEX_ESCAPE = const ParserErrorCode(
-      'INVALID_HEX_ESCAPE',
-      "An escape sequence starting with '\\x' "
-      "must be followed by 2 hexadecimal digits.");
+  static const ParserErrorCode INVALID_HEX_ESCAPE = _INVALID_HEX_ESCAPE;
 
   static const ParserErrorCode INVALID_LITERAL_IN_CONFIGURATION =
       const ParserErrorCode('INVALID_LITERAL_IN_CONFIGURATION',
@@ -463,8 +460,7 @@
    * Parameters:
    * 0: the operator that is invalid
    */
-  static const ParserErrorCode INVALID_OPERATOR = const ParserErrorCode(
-      'INVALID_OPERATOR', "The string '{0}' isn't a user-definable operator.");
+  static const ParserErrorCode INVALID_OPERATOR = _INVALID_OPERATOR;
 
   /**
    * Parameters:
@@ -484,16 +480,10 @@
       "The modifier 'sync' isn't allowed for an expression function body.",
       correction: "Try converting the body to a block.");
 
-  static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode(
-      'INVALID_UNICODE_ESCAPE',
-      "An escape sequence starting with '\\u' must be followed by 4 "
-      "hexadecimal digits or from 1 to 6 digits between '{' and '}'.");
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE = _INVALID_UNICODE_ESCAPE;
 
   static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST =
-      const ParserErrorCode('LIBRARY_DIRECTIVE_NOT_FIRST',
-          "The library directive must appear before all other directives.",
-          correction:
-              "Try moving the library directive before any other directives.");
+      _LIBRARY_DIRECTIVE_NOT_FIRST;
 
   static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
       const ParserErrorCode('LOCAL_FUNCTION_DECLARATION_MODIFIER',
@@ -501,14 +491,10 @@
           correction: "Try removing the modifier.");
 
   static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR =
-      const ParserErrorCode('MISSING_ASSIGNABLE_SELECTOR',
-          "Missing selector such as '.<identifier>' or '[0]'.",
-          correction: "Try adding a selector.");
+      _MISSING_ASSIGNABLE_SELECTOR;
 
   static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
-      const ParserErrorCode('MISSING_ASSIGNMENT_IN_INITIALIZER',
-          "Expected an assignment after the field name.",
-          correction: "Try adding an assignment to initialize the field.");
+      _MISSING_ASSIGNMENT_IN_INITIALIZER;
 
   static const ParserErrorCode MISSING_CATCH_OR_FINALLY = const ParserErrorCode(
       'MISSING_CATCH_OR_FINALLY',
@@ -527,11 +513,8 @@
           'MISSING_CLOSING_PARENTHESIS', "The closing parenthesis is missing.",
           correction: "Try adding the closing parenthesis.");
 
-  static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE = const ParserErrorCode(
-      'MISSING_CONST_FINAL_VAR_OR_TYPE',
-      "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
-      correction:
-          "Try adding the name of the type of the variable or the keyword 'var'.");
+  static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
+      _MISSING_CONST_FINAL_VAR_OR_TYPE;
 
   static const ParserErrorCode MISSING_ENUM_BODY = const ParserErrorCode(
       'MISSING_ENUM_BODY',
@@ -545,9 +528,7 @@
               "remove the assignment operator.");
 
   static const ParserErrorCode MISSING_EXPRESSION_IN_THROW =
-      const ParserErrorCode(
-          'MISSING_EXPRESSION_IN_THROW', "Missing expression after 'throw'.",
-          correction: "Try using 'rethrow' to throw the caught exception.");
+      _MISSING_EXPRESSION_IN_THROW;
 
   static const ParserErrorCode MISSING_FUNCTION_BODY = const ParserErrorCode(
       'MISSING_FUNCTION_BODY', "A function body must be provided.",
@@ -571,13 +552,10 @@
   static const ParserErrorCode MISSING_IDENTIFIER =
       const ParserErrorCode('MISSING_IDENTIFIER', "Expected an identifier.");
 
-  static const ParserErrorCode MISSING_INITIALIZER =
-      const ParserErrorCode('MISSING_INITIALIZER', "Expected an initializer.");
+  static const ParserErrorCode MISSING_INITIALIZER = _MISSING_INITIALIZER;
 
-  static const ParserErrorCode MISSING_KEYWORD_OPERATOR = const ParserErrorCode(
-      'MISSING_KEYWORD_OPERATOR',
-      "Operator declarations must be preceeded by the keyword 'operator'.",
-      correction: "Try adding the keyword 'operator'.");
+  static const ParserErrorCode MISSING_KEYWORD_OPERATOR =
+      _MISSING_KEYWORD_OPERATOR;
 
   static const ParserErrorCode MISSING_METHOD_PARAMETERS =
       const ParserErrorCode('MISSING_METHOD_PARAMETERS',
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 4c26c3a..ad89d34 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -38,152 +38,210 @@
   _MULTIPLE_EXTENDS_CLAUSES,
   _MISSING_STATEMENT,
   _MISSING_PREFIX_IN_DEFERRED_IMPORT,
+  _MISSING_KEYWORD_OPERATOR,
+  _MISSING_EXPRESSION_IN_THROW,
+  _MISSING_CONST_FINAL_VAR_OR_TYPE,
+  _MISSING_ASSIGNMENT_IN_INITIALIZER,
+  _MISSING_ASSIGNABLE_SELECTOR,
+  _MISSING_INITIALIZER,
+  _LIBRARY_DIRECTIVE_NOT_FIRST,
+  _INVALID_UNICODE_ESCAPE,
+  _INVALID_OPERATOR,
+  _INVALID_HEX_ESCAPE,
 ];
 
 const ParserErrorCode _CONTINUE_OUTSIDE_OF_LOOP = const ParserErrorCode(
     'CONTINUE_OUTSIDE_OF_LOOP',
-    "A continue statement can't be used outside of a loop or switch statement.",
+    r"A continue statement can't be used outside of a loop or switch statement.",
     correction: "Try removing the continue statement.");
 
 const ParserErrorCode _COVARIANT_AFTER_VAR = const ParserErrorCode(
     'COVARIANT_AFTER_VAR',
-    "The modifier 'covariant' should be before the modifier 'var'.",
+    r"The modifier 'covariant' should be before the modifier 'var'.",
     correction: "Try re-ordering the modifiers.");
 
 const ParserErrorCode _EQUALITY_CANNOT_BE_EQUALITY_OPERAND = const ParserErrorCode(
     'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
-    "An equality expression can't be an operand of another equality expression.",
+    r"An equality expression can't be an operand of another equality expression.",
     correction: "Try re-writing the expression.");
 
 const ParserErrorCode _EXTERNAL_CLASS = const ParserErrorCode(
-    'EXTERNAL_CLASS', "Classes can't be declared to be 'external'.",
+    'EXTERNAL_CLASS', r"Classes can't be declared to be 'external'.",
     correction: "Try removing the keyword 'external'.");
 
 const ParserErrorCode _EXTERNAL_ENUM = const ParserErrorCode(
-    'EXTERNAL_ENUM', "Enums can't be declared to be 'external'.",
+    'EXTERNAL_ENUM', r"Enums can't be declared to be 'external'.",
     correction: "Try removing the keyword 'external'.");
 
 const ParserErrorCode _IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
     const ParserErrorCode('IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-        "Import directives must preceed part directives.",
+        r"Import directives must preceed part directives.",
         correction:
             "Try moving the import directives before the part directives.");
 
 const ParserErrorCode _INVALID_AWAIT_IN_FOR = const ParserErrorCode(
     'INVALID_AWAIT_IN_FOR',
-    "The keyword 'await' isn't allowed for a normal 'for' statement.",
+    r"The keyword 'await' isn't allowed for a normal 'for' statement.",
     correction: "Try removing the keyword, or use a for-each statement.");
 
+const ParserErrorCode _INVALID_HEX_ESCAPE = const ParserErrorCode(
+    'INVALID_HEX_ESCAPE',
+    r"An escape sequence starting with '\x' must be followed by 2 hexadecimal digits.");
+
+const ParserErrorCode _INVALID_OPERATOR = const ParserErrorCode(
+    'INVALID_OPERATOR',
+    r"The string '#lexeme' isn't a user-definable operator.");
+
+const ParserErrorCode _INVALID_UNICODE_ESCAPE = const ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE',
+    r"An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.");
+
+const ParserErrorCode _LIBRARY_DIRECTIVE_NOT_FIRST = const ParserErrorCode(
+    'LIBRARY_DIRECTIVE_NOT_FIRST',
+    r"The library directive must appear before all other directives.",
+    correction:
+        "Try moving the library directive before any other directives.");
+
+const ParserErrorCode _MISSING_ASSIGNABLE_SELECTOR = const ParserErrorCode(
+    'MISSING_ASSIGNABLE_SELECTOR',
+    r"Missing selector such as '.<identifier>' or '[0]'.",
+    correction: "Try adding a selector.");
+
+const ParserErrorCode _MISSING_ASSIGNMENT_IN_INITIALIZER =
+    const ParserErrorCode('MISSING_ASSIGNMENT_IN_INITIALIZER',
+        r"Expected an assignment after the field name.",
+        correction: "To initialize a field, use the syntax 'name = value'.");
+
+const ParserErrorCode _MISSING_CONST_FINAL_VAR_OR_TYPE = const ParserErrorCode(
+    'MISSING_CONST_FINAL_VAR_OR_TYPE',
+    r"Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
+    correction:
+        "Try adding the name of the type of the variable or the keyword 'var'.");
+
+const ParserErrorCode _MISSING_EXPRESSION_IN_THROW = const ParserErrorCode(
+    'MISSING_EXPRESSION_IN_THROW', r"Missing expression after 'throw'.",
+    correction:
+        "Add an expression after 'throw' or use 'rethrow' to throw a caught exception");
+
+const ParserErrorCode _MISSING_INITIALIZER =
+    const ParserErrorCode('MISSING_INITIALIZER', r"Expected an initializer.");
+
+const ParserErrorCode _MISSING_KEYWORD_OPERATOR = const ParserErrorCode(
+    'MISSING_KEYWORD_OPERATOR',
+    r"Operator declarations must be preceeded by the keyword 'operator'.",
+    correction: "Try adding the keyword 'operator'.");
+
 const ParserErrorCode _MISSING_PREFIX_IN_DEFERRED_IMPORT =
     const ParserErrorCode('MISSING_PREFIX_IN_DEFERRED_IMPORT',
-        "Deferred imports should have a prefix.",
+        r"Deferred imports should have a prefix.",
         correction: "Try adding a prefix to the import.");
 
 const ParserErrorCode _MISSING_STATEMENT =
-    const ParserErrorCode('MISSING_STATEMENT', "Expected a statement.");
+    const ParserErrorCode('MISSING_STATEMENT', r"Expected a statement.");
 
 const ParserErrorCode _MULTIPLE_EXTENDS_CLAUSES = const ParserErrorCode(
     'MULTIPLE_EXTENDS_CLAUSES',
-    "Each class definition can have at most one extends clause.",
+    r"Each class definition can have at most one extends clause.",
     correction:
         "Try choosing one superclass and define your class to implement (or mix in) the others.");
 
 const ParserErrorCode _MULTIPLE_LIBRARY_DIRECTIVES = const ParserErrorCode(
     'MULTIPLE_LIBRARY_DIRECTIVES',
-    "Only one library directive may be declared in a file.",
+    r"Only one library directive may be declared in a file.",
     correction: "Try removing all but one of the library directives.");
 
 const ParserErrorCode _MULTIPLE_ON_CLAUSES = const ParserErrorCode(
     'MULTIPLE_ON_CLAUSES',
-    "Each mixin definition can have at most one on clause.",
+    r"Each mixin definition can have at most one on clause.",
     correction: "Try combining all of the on clauses into a single clause.");
 
 const ParserErrorCode _MULTIPLE_PART_OF_DIRECTIVES = const ParserErrorCode(
     'MULTIPLE_PART_OF_DIRECTIVES',
-    "Only one part-of directive may be declared in a file.",
+    r"Only one part-of directive may be declared in a file.",
     correction: "Try removing all but one of the part-of directives.");
 
 const ParserErrorCode _MULTIPLE_WITH_CLAUSES = const ParserErrorCode(
     'MULTIPLE_WITH_CLAUSES',
-    "Each class definition can have at most one with clause.",
+    r"Each class definition can have at most one with clause.",
     correction: "Try combining all of the with clauses into a single clause.");
 
 const ParserErrorCode _NATIVE_CLAUSE_SHOULD_BE_ANNOTATION = const ParserErrorCode(
     'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
-    "Native clause in this form is deprecated.",
+    r"Native clause in this form is deprecated.",
     correction:
         "Try removing this native clause and adding @native() or @native('native-name') before the declaration.");
 
 const ParserErrorCode _PREFIX_AFTER_COMBINATOR = const ParserErrorCode(
     'PREFIX_AFTER_COMBINATOR',
-    "The prefix ('as' clause) should come before any show/hide combinators.",
+    r"The prefix ('as' clause) should come before any show/hide combinators.",
     correction: "Try moving the prefix before the combinators.");
 
 const ParserErrorCode _REDIRECTING_CONSTRUCTOR_WITH_BODY = const ParserErrorCode(
     'REDIRECTING_CONSTRUCTOR_WITH_BODY',
-    "Redirecting constructors can't have a body.",
+    r"Redirecting constructors can't have a body.",
     correction:
         "Try removing the body, or not making this a redirecting constructor.");
 
 const ParserErrorCode _REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
     const ParserErrorCode('REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
-        "Only factory constructor can specify '=' redirection.",
+        r"Only factory constructor can specify '=' redirection.",
         correction:
             "Try making this a factory constructor, or remove the redirection.");
 
 const ParserErrorCode _STATIC_AFTER_CONST = const ParserErrorCode(
     'STATIC_AFTER_CONST',
-    "The modifier 'static' should be before the modifier 'const'.",
+    r"The modifier 'static' should be before the modifier 'const'.",
     correction: "Try re-ordering the modifiers.");
 
 const ParserErrorCode _STATIC_AFTER_FINAL = const ParserErrorCode(
     'STATIC_AFTER_FINAL',
-    "The modifier 'static' should be before the modifier 'final'.",
+    r"The modifier 'static' should be before the modifier 'final'.",
     correction: "Try re-ordering the modifiers.");
 
 const ParserErrorCode _STATIC_AFTER_VAR = const ParserErrorCode(
     'STATIC_AFTER_VAR',
-    "The modifier 'static' should be before the modifier 'var'.",
+    r"The modifier 'static' should be before the modifier 'var'.",
     correction: "Try re-ordering the modifiers.");
 
 const ParserErrorCode _STATIC_CONSTRUCTOR = const ParserErrorCode(
-    'STATIC_CONSTRUCTOR', "Constructors can't be static.",
+    'STATIC_CONSTRUCTOR', r"Constructors can't be static.",
     correction: "Try removing the keyword 'static'.");
 
 const ParserErrorCode _STATIC_OPERATOR = const ParserErrorCode(
-    'STATIC_OPERATOR', "Operators can't be static.",
+    'STATIC_OPERATOR', r"Operators can't be static.",
     correction: "Try removing the keyword 'static'.");
 
 const ParserErrorCode _SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
     const ParserErrorCode('SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
-        "The default case should be the last case in a switch statement.",
+        r"The default case should be the last case in a switch statement.",
         correction:
             "Try moving the default case after the other case clauses.");
 
 const ParserErrorCode _SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
     const ParserErrorCode('SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
-        "The 'default' case can only be declared once.",
+        r"The 'default' case can only be declared once.",
         correction: "Try removing all but one default case.");
 
 const ParserErrorCode _TOP_LEVEL_OPERATOR = const ParserErrorCode(
-    'TOP_LEVEL_OPERATOR', "Operators must be declared within a class.",
+    'TOP_LEVEL_OPERATOR', r"Operators must be declared within a class.",
     correction:
         "Try removing the operator, moving it to a class, or converting it to be a function.");
 
 const ParserErrorCode _TYPEDEF_IN_CLASS = const ParserErrorCode(
-    'TYPEDEF_IN_CLASS', "Typedefs can't be declared inside classes.",
+    'TYPEDEF_IN_CLASS', r"Typedefs can't be declared inside classes.",
     correction: "Try moving the typedef to the top-level.");
 
 const ParserErrorCode _TYPE_ARGUMENTS_ON_TYPE_VARIABLE = const ParserErrorCode(
     'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
-    "Can't use type arguments with type variable '#name'.",
+    r"Can't use type arguments with type variable '#name'.",
     correction: "Try removing the type arguments.");
 
 const ParserErrorCode _VAR_RETURN_TYPE = const ParserErrorCode(
-    'VAR_RETURN_TYPE', "The return type can't be 'var'.",
+    'VAR_RETURN_TYPE', r"The return type can't be 'var'.",
     correction:
         "Try removing the keyword 'var', or replacing it with the name of the return type.");
 
 const ParserErrorCode _WITH_BEFORE_EXTENDS = const ParserErrorCode(
-    'WITH_BEFORE_EXTENDS', "The extends clause must be before the with clause.",
+    'WITH_BEFORE_EXTENDS',
+    r"The extends clause must be before the with clause.",
     correction: "Try moving the extends clause before the with clause.");
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index a572b6a..37b838c 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1706,19 +1706,6 @@
           'MIXIN_DEFERRED_CLASS', "Classes can't mixin deferred classes.",
           correction: "Try changing the import to not be deferred.");
 
-  /**
-   * Not yet in the spec, but consistent with VM behavior.  It is a
-   * compile-time error if all of the constructors of a mixin's base class have
-   * at least one optional parameter (since only constructors that lack
-   * optional parameters can be forwarded to the mixin).  See
-   * https://code.google.com/p/dart/issues/detail?id=15101#c4
-   */
-  static const CompileTimeErrorCode MIXIN_HAS_NO_CONSTRUCTORS =
-      const CompileTimeErrorCode(
-          'MIXIN_HAS_NO_CONSTRUCTORS',
-          "This mixin application is invalid because all of the constructors "
-          "in the base class '{0}' have optional parameters.");
-
   static const CompileTimeErrorCode
       MIXIN_INFERENCE_INCONSISTENT_MATCHING_CLASSES =
       const CompileTimeErrorCode(
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 3b43199..3740609 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1111,7 +1111,7 @@
       if (variableOrDeclaration is! SimpleIdentifier) {
         // Parser has already reported the error.
         if (!leftParenthesis.next.isIdentifier) {
-          parser.rewriter.insertTokenAfter(
+          parser.rewriter.insertToken(
               leftParenthesis,
               new SyntheticStringToken(
                   TokenType.IDENTIFIER, '', leftParenthesis.next.charOffset));
@@ -1305,15 +1305,37 @@
     debugEvent("SwitchCase");
 
     List<Statement> statements = popTypedList(statementCount);
-    List<SwitchMember> members = popTypedList(expressionCount) ?? [];
-    List<Label> labels = popTypedList(labelCount);
-    if (defaultKeyword != null) {
-      members.add(ast.switchDefault(
-          <Label>[], defaultKeyword, colonAfterDefault, <Statement>[]));
+    List<SwitchMember> members;
+
+    if (labelCount == 0 && defaultKeyword == null) {
+      // Common situation: case with no default and no labels.
+      members = popTypedList<SwitchMember>(expressionCount) ?? [];
+    } else {
+      // Labels and case statements may be intertwined
+      if (defaultKeyword != null) {
+        SwitchDefault member = ast.switchDefault(
+            <Label>[], defaultKeyword, colonAfterDefault, <Statement>[]);
+        while (peek() is Label) {
+          member.labels.insert(0, pop());
+          --labelCount;
+        }
+        members = new List<SwitchMember>(expressionCount + 1);
+        members[expressionCount] = member;
+      } else {
+        members = new List<SwitchMember>(expressionCount);
+      }
+      for (int index = expressionCount - 1; index >= 0; --index) {
+        SwitchMember member = pop();
+        while (peek() is Label) {
+          member.labels.insert(0, pop());
+          --labelCount;
+        }
+        members[index] = member;
+      }
+      assert(labelCount == 0);
     }
     if (members.isNotEmpty) {
       members.last.statements.addAll(statements);
-      members.first.labels.addAll(labels);
     }
     push(members);
   }
@@ -2814,6 +2836,11 @@
   void endElseStatement(Token token) {
     debugEvent("endElseStatement");
   }
+
+  List popList(int n, List list) {
+    if (n == 0) return null;
+    return stack.popList(n, list, null);
+  }
 }
 
 /// Data structure placed on the stack to represent the default parameter
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index d11fb57..eb12686 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -362,10 +362,6 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE, offset, length);
         return;
-      case "INVALID_HEX_ESCAPE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_HEX_ESCAPE, offset, length);
-        return;
       case "INVALID_METHOD_OVERRIDE":
         errorReporter?.reportErrorForOffset(
             StrongModeCode.INVALID_METHOD_OVERRIDE, offset, length);
@@ -374,10 +370,6 @@
         _reportByCode(CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER, message,
             offset, length);
         return;
-      case "INVALID_OPERATOR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_OPERATOR, offset, length, [lexeme()]);
-        return;
       case "INVALID_OPERATOR_FOR_SUPER":
         _reportByCode(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, message,
             offset, length);
@@ -386,22 +378,6 @@
         errorReporter?.reportErrorForOffset(
             StrongModeCode.INVALID_SUPER_INVOCATION, offset, length);
         return;
-      case "INVALID_UNICODE_ESCAPE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.INVALID_UNICODE_ESCAPE, offset, length);
-        return;
-      case "LIBRARY_DIRECTIVE_NOT_FIRST":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, offset, length);
-        return;
-      case "MISSING_ASSIGNABLE_SELECTOR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, offset, length);
-        return;
-      case "MISSING_ASSIGNMENT_IN_INITIALIZER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, offset, length);
-        return;
       case "MISSING_CATCH_OR_FINALLY":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_CATCH_OR_FINALLY, offset, length);
@@ -410,18 +386,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_CLASS_BODY, offset, length);
         return;
-      case "MISSING_CONST_FINAL_VAR_OR_TYPE":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, offset, length);
-        return;
       case "MISSING_DIGIT":
         errorReporter?.reportErrorForOffset(
             ScannerErrorCode.MISSING_DIGIT, offset, length);
         return;
-      case "MISSING_EXPRESSION_IN_THROW":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_EXPRESSION_IN_THROW, offset, length);
-        return;
       case "MISSING_ENUM_BODY":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_ENUM_BODY, offset, length);
@@ -442,14 +410,6 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_IDENTIFIER, offset, length);
         return;
-      case "MISSING_INITIALIZER":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_INITIALIZER, offset, length);
-        return;
-      case "MISSING_KEYWORD_OPERATOR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.MISSING_KEYWORD_OPERATOR, offset, length);
-        return;
       case "MISSING_METHOD_PARAMETERS":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_METHOD_PARAMETERS, offset, length);
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 4a24786..422c80d 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -17,39 +17,31 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
-/**
- * A visitor that resolves declarations in an AST structure to already built
- * elements.
- *
- * The resulting AST must have everything resolved that would have been resolved
- * by a [CompilationUnitBuilder] (that is, must be a valid [RESOLVED_UNIT1]).
- * This class must not assume that the [CompilationUnitElement] passed to it is
- * any more complete than a [COMPILATION_UNIT_ELEMENT].
- */
-class DeclarationResolver extends RecursiveAstVisitor<Object> {
-  /**
-   * The compilation unit containing the AST nodes being visited.
-   */
+/// A visitor that resolves declarations in an AST structure to already built
+/// elements.
+///
+/// The resulting AST must have everything resolved that would have been
+/// resolved by a [CompilationUnitBuilder] (that is, must be a valid
+/// [RESOLVED_UNIT1]). This class must not assume that the
+/// [CompilationUnitElement] passed to it is any more complete than a
+/// [COMPILATION_UNIT_ELEMENT].
+class DeclarationResolver extends RecursiveAstVisitor<void> {
+  /// The compilation unit containing the AST nodes being visited.
   CompilationUnitElementImpl _enclosingUnit;
 
-  /**
-   * The type provider used to access the known types.
-   */
+  /// The type provider used to access the known types.
   TypeProvider _typeProvider;
 
-  /**
-   * The [ElementWalker] we are using to keep track of progress through the
-   * element model.
-   */
+  /// The [ElementWalker] we are using to keep track of progress through the
+  /// element model.
   ElementWalker _walker;
 
   DeclarationResolver();
 
-  /**
-   * Resolve the declarations within the given compilation [unit] to the
-   * elements rooted at the given [element]. Throw an [ElementMismatchException]
-   * if the element model and compilation unit do not match each other.
-   */
+  /// Resolve the declarations within the given compilation [unit] to the
+  /// elements rooted at the given [element]. Throw an
+  /// [ElementMismatchException] if the element model and compilation unit do
+  /// not match each other.
   void resolve(CompilationUnit unit, CompilationUnitElement element) {
     _enclosingUnit = element;
     _typeProvider = _enclosingUnit.context?.typeProvider;
@@ -65,55 +57,51 @@
   }
 
   @override
-  Object visitAnnotation(Annotation node) {
+  void visitAnnotation(Annotation node) {
     // Annotations can only contain elements in certain erroneous situations,
     // in which case the elements are disconnected from the rest of the element
     // model, thus we can't reconnect to them.  To avoid crashes, just create
     // fresh elements.
     ElementHolder elementHolder = new ElementHolder();
     new ElementBuilder(elementHolder, _enclosingUnit).visitAnnotation(node);
-    return null;
   }
 
   @override
-  Object visitBlockFunctionBody(BlockFunctionBody node) {
+  void visitBlockFunctionBody(BlockFunctionBody node) {
     if (_isBodyToCreateElementsFor(node)) {
       _walker.consumeLocalElements();
       node.accept(_walker.elementBuilder);
-      return null;
     } else {
-      return super.visitBlockFunctionBody(node);
+      super.visitBlockFunctionBody(node);
     }
   }
 
   @override
-  Object visitCatchClause(CatchClause node) {
+  void visitCatchClause(CatchClause node) {
     _walker.elementBuilder.buildCatchVariableElements(node);
-    return super.visitCatchClause(node);
+    super.visitCatchClause(node);
   }
 
   @override
-  Object visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     ClassElement element = _match(node.name, _walker.getClass());
     _walk(new ElementWalker.forClass(element), () {
       super.visitClassDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(ClassTypeAlias node) {
     ClassElement element = _match(node.name, _walker.getClass());
     _walk(new ElementWalker.forClass(element), () {
       super.visitClassTypeAlias(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
     ConstructorElement element = _match(node.name, _walker.getConstructor(),
         offset: node.name?.offset ?? node.returnType.offset);
     _walk(new ElementWalker.forExecutable(element, _enclosingUnit), () {
@@ -121,18 +109,16 @@
       super.visitConstructorDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitDeclaredIdentifier(DeclaredIdentifier node) {
+  void visitDeclaredIdentifier(DeclaredIdentifier node) {
     // Declared identifiers can only occur inside executable elements.
     _walker.elementBuilder.visitDeclaredIdentifier(node);
-    return null;
   }
 
   @override
-  Object visitDefaultFormalParameter(DefaultFormalParameter node) {
+  void visitDefaultFormalParameter(DefaultFormalParameter node) {
     NormalFormalParameter normalParameter = node.parameter;
     ParameterElement element =
         _match(normalParameter.identifier, _walker.getParameter());
@@ -161,11 +147,10 @@
     });
 
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitEnumDeclaration(EnumDeclaration node) {
+  void visitEnumDeclaration(EnumDeclaration node) {
     ClassElement element = _match(node.name, _walker.getEnum());
     node.name.staticType = _typeProvider.typeType;
     resolveMetadata(node, node.metadata, element);
@@ -179,11 +164,10 @@
       _walker.getFunction(); // toString()
       super.visitEnumDeclaration(node);
     });
-    return null;
   }
 
   @override
-  Object visitExportDirective(ExportDirective node) {
+  void visitExportDirective(ExportDirective node) {
     super.visitExportDirective(node);
     List<ElementAnnotation> annotations =
         _enclosingUnit.getAnnotations(node.offset);
@@ -196,30 +180,27 @@
       annotations = _walker.element.library.exports[index].metadata;
     }
     resolveAnnotations(node, node.metadata, annotations);
-    return null;
   }
 
   @override
-  Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
+  void visitExpressionFunctionBody(ExpressionFunctionBody node) {
     if (_isBodyToCreateElementsFor(node)) {
       _walker.consumeLocalElements();
       node.accept(_walker.elementBuilder);
-      return null;
     } else {
-      return super.visitExpressionFunctionBody(node);
+      super.visitExpressionFunctionBody(node);
     }
   }
 
   @override
-  Object visitFieldDeclaration(FieldDeclaration node) {
+  void visitFieldDeclaration(FieldDeclaration node) {
     super.visitFieldDeclaration(node);
     FieldElement firstFieldElement = node.fields.variables[0].declaredElement;
     resolveMetadata(node, node.metadata, firstFieldElement);
-    return null;
   }
 
   @override
-  Object visitFieldFormalParameter(FieldFormalParameter node) {
+  void visitFieldFormalParameter(FieldFormalParameter node) {
     if (node.parent is! DefaultFormalParameter) {
       ParameterElement element =
           _match(node.identifier, _walker.getParameter());
@@ -229,14 +210,13 @@
       });
       resolveMetadata(node, node.metadata, element);
       _setGenericFunctionType(node.type, element.type);
-      return null;
     } else {
-      return super.visitFieldFormalParameter(node);
+      super.visitFieldFormalParameter(node);
     }
   }
 
   @override
-  Object visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     SimpleIdentifier functionName = node.name;
     Token property = node.propertyKeyword;
     ExecutableElement element;
@@ -260,31 +240,28 @@
       super.visitFunctionDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(FunctionExpression node) {
     if (node.parent is! FunctionDeclaration) {
       node.accept(_walker.elementBuilder);
-      return null;
     } else {
-      return super.visitFunctionExpression(node);
+      super.visitFunctionExpression(node);
     }
   }
 
   @override
-  Object visitFunctionTypeAlias(FunctionTypeAlias node) {
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
     FunctionTypeAliasElement element = _match(node.name, _walker.getTypedef());
     _walk(new ElementWalker.forTypedef(element), () {
       super.visitFunctionTypeAlias(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
+  void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     if (node.parent is! DefaultFormalParameter) {
       ParameterElement element =
           _match(node.identifier, _walker.getParameter());
@@ -292,14 +269,13 @@
         super.visitFunctionTypedFormalParameter(node);
       });
       resolveMetadata(node, node.metadata, element);
-      return null;
     } else {
-      return super.visitFunctionTypedFormalParameter(node);
+      super.visitFunctionTypedFormalParameter(node);
     }
   }
 
   @override
-  Object visitGenericFunctionType(GenericFunctionType node) {
+  void visitGenericFunctionType(GenericFunctionType node) {
     if (_walker.elementBuilder != null) {
       _walker.elementBuilder.visitGenericFunctionType(node);
     } else {
@@ -314,11 +290,10 @@
         }
       }
     }
-    return null;
   }
 
   @override
-  Object visitGenericTypeAlias(GenericTypeAlias node) {
+  void visitGenericTypeAlias(GenericTypeAlias node) {
     GenericTypeAliasElementImpl element =
         _match(node.name, _walker.getTypedef());
     _setGenericFunctionType(node.functionType, element.function?.type);
@@ -326,11 +301,10 @@
       super.visitGenericTypeAlias(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     super.visitImportDirective(node);
     List<ElementAnnotation> annotations =
         _enclosingUnit.getAnnotations(node.offset);
@@ -343,19 +317,18 @@
       annotations = _walker.element.library.imports[index].metadata;
     }
     resolveAnnotations(node, node.metadata, annotations);
-    return null;
   }
 
   @override
-  Object visitLabeledStatement(LabeledStatement node) {
+  void visitLabeledStatement(LabeledStatement node) {
     bool onSwitchStatement = node.statement is SwitchStatement;
     _walker.elementBuilder
         .buildLabelElements(node.labels, onSwitchStatement, false);
-    return super.visitLabeledStatement(node);
+    super.visitLabeledStatement(node);
   }
 
   @override
-  Object visitLibraryDirective(LibraryDirective node) {
+  void visitLibraryDirective(LibraryDirective node) {
     super.visitLibraryDirective(node);
     List<ElementAnnotation> annotations =
         _enclosingUnit.getAnnotations(node.offset);
@@ -363,11 +336,10 @@
       annotations = _walker.element.library.metadata;
     }
     resolveAnnotations(node, node.metadata, annotations);
-    return null;
   }
 
   @override
-  Object visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(MethodDeclaration node) {
     Token property = node.propertyKeyword;
     SimpleIdentifier methodName = node.name;
     String nameOfMethod = methodName.name;
@@ -394,21 +366,19 @@
       super.visitMethodDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitMixinDeclaration(MixinDeclaration node) {
+  void visitMixinDeclaration(MixinDeclaration node) {
     ClassElement element = _match(node.name, _walker.getMixin());
     _walk(new ElementWalker.forClass(element), () {
       super.visitMixinDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitPartDirective(PartDirective node) {
+  void visitPartDirective(PartDirective node) {
     super.visitPartDirective(node);
     List<ElementAnnotation> annotations =
         _enclosingUnit.getAnnotations(node.offset);
@@ -421,17 +391,16 @@
       annotations = _walker.element.library.parts[index].metadata;
     }
     resolveAnnotations(node, node.metadata, annotations);
-    return null;
   }
 
   @override
-  Object visitPartOfDirective(PartOfDirective node) {
+  void visitPartOfDirective(PartOfDirective node) {
     node.element = _enclosingUnit.library;
-    return super.visitPartOfDirective(node);
+    super.visitPartOfDirective(node);
   }
 
   @override
-  Object visitSimpleFormalParameter(SimpleFormalParameter node) {
+  void visitSimpleFormalParameter(SimpleFormalParameter node) {
     if (node.parent is! DefaultFormalParameter) {
       ParameterElement element =
           _match(node.identifier, _walker.getParameter());
@@ -441,52 +410,49 @@
         super.visitSimpleFormalParameter(node);
       });
       resolveMetadata(node, node.metadata, element);
-      return null;
     } else {
-      return super.visitSimpleFormalParameter(node);
+      super.visitSimpleFormalParameter(node);
     }
   }
 
   @override
-  Object visitSwitchCase(SwitchCase node) {
+  void visitSwitchCase(SwitchCase node) {
     _walker.elementBuilder.buildLabelElements(node.labels, false, true);
-    return super.visitSwitchCase(node);
+    super.visitSwitchCase(node);
   }
 
   @override
-  Object visitSwitchDefault(SwitchDefault node) {
+  void visitSwitchDefault(SwitchDefault node) {
     _walker.elementBuilder.buildLabelElements(node.labels, false, true);
-    return super.visitSwitchDefault(node);
+    super.visitSwitchDefault(node);
   }
 
   @override
-  Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
+  void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
     super.visitTopLevelVariableDeclaration(node);
     VariableElement firstElement = node.variables.variables[0].declaredElement;
     resolveMetadata(node, node.metadata, firstElement);
-    return null;
   }
 
   @override
-  Object visitTypeParameter(TypeParameter node) {
+  void visitTypeParameter(TypeParameter node) {
     if (node.parent.parent is FunctionTypedFormalParameter) {
       // Work around dartbug.com/28515.
       // TODO(paulberry): remove this once dartbug.com/28515 is fixed.
       var element = new TypeParameterElementImpl.forNode(node.name);
       element.type = new TypeParameterTypeImpl(element);
       node.name?.staticElement = element;
-      return null;
+    } else {
+      TypeParameterElement element =
+          _match(node.name, _walker.getTypeParameter());
+      _setGenericFunctionType(node.bound, element.bound);
+      super.visitTypeParameter(node);
+      resolveMetadata(node, node.metadata, element);
     }
-    TypeParameterElement element =
-        _match(node.name, _walker.getTypeParameter());
-    _setGenericFunctionType(node.bound, element.bound);
-    super.visitTypeParameter(node);
-    resolveMetadata(node, node.metadata, element);
-    return null;
   }
 
   @override
-  Object visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     VariableElement element = _match(node.name, _walker.getVariable());
     Expression initializer = node.initializer;
     if (initializer != null) {
@@ -498,13 +464,12 @@
     } else {
       super.visitVariableDeclaration(node);
     }
-    return null;
   }
 
   @override
-  Object visitVariableDeclarationList(VariableDeclarationList node) {
+  void visitVariableDeclarationList(VariableDeclarationList node) {
     if (_walker.elementBuilder != null) {
-      return _walker.elementBuilder.visitVariableDeclarationList(node);
+      _walker.elementBuilder.visitVariableDeclarationList(node);
     } else {
       node.variables.accept(this);
       VariableElement firstVariable = node.variables[0].declaredElement;
@@ -514,20 +479,17 @@
           node.parent is! TopLevelVariableDeclaration) {
         resolveMetadata(node, node.metadata, firstVariable);
       }
-      return null;
     }
   }
 
-  /**
-   * Updates [identifier] to point to [element], after ensuring that the
-   * element has the expected name.
-   *
-   * If no [elementName] is given, it defaults to the name of the [identifier]
-   * (or the empty string if [identifier] is `null`).
-   *
-   * If [identifier] is `null`, nothing is updated, but the element name is
-   * still checked.
-   */
+  /// Updates [identifier] to point to [element], after ensuring that the
+  /// element has the expected name.
+  ///
+  /// If no [elementName] is given, it defaults to the name of the [identifier]
+  /// (or the empty string if [identifier] is `null`).
+  ///
+  /// If [identifier] is `null`, nothing is updated, but the element name is
+  /// still checked.
   E _match<E extends Element>(SimpleIdentifier identifier, E element,
       {String elementName, int offset}) {
     elementName ??= identifier?.name ?? '';
@@ -549,9 +511,7 @@
     }
   }
 
-  /**
-   * If the given [typeNode] is a [GenericFunctionType], set its [type].
-   */
+  /// If the given [typeNode] is a [GenericFunctionType], set its [type].
   void _setGenericFunctionType(TypeAnnotation typeNode, DartType type) {
     if (typeNode is GenericFunctionTypeImpl) {
       typeNode.type = type;
@@ -570,15 +530,13 @@
     }
   }
 
-  /**
-   * Recurses through the element model and AST, verifying that all elements are
-   * matched.
-   *
-   * Executes [callback] with [_walker] pointing to the given [walker] (which
-   * should be a new instance of [ElementWalker]).  Once [callback] returns,
-   * uses [ElementWalker.validate] to verify that all expected elements have
-   * been matched.
-   */
+  /// Recurses through the element model and AST, verifying that all elements
+  /// are matched.
+  ///
+  /// Executes [callback] with [_walker] pointing to the given [walker] (which
+  /// should be a new instance of [ElementWalker]).  Once [callback] returns,
+  /// uses [ElementWalker.validate] to verify that all expected elements have
+  /// been matched.
   void _walk(ElementWalker walker, void callback()) {
     ElementWalker outerWalker = _walker;
     _walker = walker;
@@ -749,11 +707,9 @@
     }
   }
 
-  /**
-   * Associate each of the annotation [nodes] with the corresponding
-   * [ElementAnnotation] in [annotations]. If there is a problem, report it
-   * against the given [parent] node.
-   */
+  /// Associate each of the annotation [nodes] with the corresponding
+  /// [ElementAnnotation] in [annotations]. If there is a problem, report it
+  /// against the given [parent] node.
   static void resolveAnnotations(AstNode parent, NodeList<Annotation> nodes,
       List<ElementAnnotation> annotations) {
     int nodeCount = nodes.length;
@@ -766,15 +722,13 @@
     }
   }
 
-  /**
-   * If [element] is not `null`, associate each of the annotation [nodes] with
-   * the corresponding [ElementAnnotation] in [element.metadata]. If there is a
-   * problem, report it against the given [parent] node.
-   *
-   * If [element] is `null`, do nothing--this allows us to be robust in the
-   * case where we are operating on an element model that hasn't been fully
-   * built.
-   */
+  /// If [element] is not `null`, associate each of the annotation [nodes] with
+  /// the corresponding [ElementAnnotation] in [element.metadata]. If there is a
+  /// problem, report it against the given [parent] node.
+  ///
+  /// If [element] is `null`, do nothing--this allows us to be robust in the
+  /// case where we are operating on an element model that hasn't been fully
+  /// built.
   static void resolveMetadata(
       AstNode parent, NodeList<Annotation> nodes, Element element) {
     if (element != null) {
@@ -816,27 +770,19 @@
   }
 }
 
-/**
- * Keeps track of the set of non-synthetic child elements of an element,
- * yielding them one at a time in response to "get" method calls.
- */
+/// Keeps track of the set of non-synthetic child elements of an element,
+/// yielding them one at a time in response to "get" method calls.
 class ElementWalker {
-  /**
-   * The element whose child elements are being walked.
-   */
+  /// The element whose child elements are being walked.
   final Element element;
 
-  /**
-   * If [element] is an executable element, an element builder which is
-   * accumulating the executable element's local variables and labels.
-   * Otherwise `null`.
-   */
+  /// If [element] is an executable element, an element builder which is
+  /// accumulating the executable element's local variables and labels.
+  /// Otherwise `null`.
   LocalElementBuilder elementBuilder;
 
-  /**
-   * If [element] is an executable element, the element holder associated with
-   * [elementBuilder].  Otherwise `null`.
-   */
+  /// If [element] is an executable element, the element holder associated with
+  /// [elementBuilder].  Otherwise `null`.
   ElementHolder _elementHolder;
 
   List<PropertyAccessorElement> _accessors;
@@ -860,10 +806,8 @@
   List<VariableElement> _variables;
   int _variableIndex = 0;
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a class
-   * element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a class
+  /// element.
   ElementWalker.forClass(ClassElement element)
       : element = element,
         _accessors = element.accessors.where(_isNotSynthetic).toList(),
@@ -874,10 +818,8 @@
         _typeParameters = element.typeParameters,
         _variables = element.fields.where(_isNotSynthetic).toList();
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a compilation
-   * unit element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a compilation
+  /// unit element.
   ElementWalker.forCompilationUnit(CompilationUnitElement compilationUnit)
       : element = compilationUnit,
         _accessors = compilationUnit.accessors.where(_isNotSynthetic).toList(),
@@ -889,35 +831,27 @@
         _variables =
             compilationUnit.topLevelVariables.where(_isNotSynthetic).toList();
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a compilation
-   * unit element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a compilation
+  /// unit element.
   ElementWalker.forExecutable(
       ExecutableElement element, CompilationUnitElement compilationUnit)
       : this._forExecutable(element, compilationUnit, new ElementHolder());
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a typedef
-   * element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a typedef
+  /// element.
   ElementWalker.forGenericFunctionType(GenericFunctionTypeElement element)
       : element = element,
         _parameters = element.parameters,
         _typeParameters = element.typeParameters;
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a typedef
-   * element defined using a generic function type.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a typedef
+  /// element defined using a generic function type.
   ElementWalker.forGenericTypeAlias(FunctionTypeAliasElement element)
       : element = element,
         _typeParameters = element.typeParameters;
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a parameter
-   * element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a parameter
+  /// element.
   ElementWalker.forParameter(ParameterElement element, bool functionTyped)
       : element = element,
         _parameters = element.parameters,
@@ -931,10 +865,8 @@
     }
   }
 
-  /**
-   * Creates an [ElementWalker] which walks the child elements of a typedef
-   * element.
-   */
+  /// Creates an [ElementWalker] which walks the child elements of a typedef
+  /// element.
   ElementWalker.forTypedef(GenericTypeAliasElementImpl element)
       : element = element,
         _parameters = element.parameters,
@@ -958,73 +890,52 @@
     _parameterIndex = _parameters.length;
   }
 
-  /**
-   * Returns the next non-synthetic child of [element] which is an accessor;
-   * throws an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is an accessor;
+  /// throws an [IndexError] if there are no more.
   PropertyAccessorElement getAccessor() => _accessors[_accessorIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a class; throws
-   * an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a class; throws
+  /// an [IndexError] if there are no more.
   ClassElement getClass() => _classes[_classIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a constructor;
-   * throws an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a constructor;
+  /// throws an [IndexError] if there are no more.
   ConstructorElement getConstructor() => _constructors[_constructorIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is an enum; throws
-   * an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is an enum; throws
+  /// an [IndexError] if there are no more.
   ClassElement getEnum() => _enums[_enumIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a top level
-   * function, method, or local function; throws an [IndexError] if there are no
-   * more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a top level
+  /// function, method, or local function; throws an [IndexError] if there are
+  /// no more.
   ExecutableElement getFunction() => _functions[_functionIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a mixin; throws
-   * an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a mixin; throws
+  /// an [IndexError] if there are no more.
   ClassElement getMixin() => _mixins[_mixinIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a parameter;
-   * throws an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a parameter;
+  /// throws an [IndexError] if there are no more.
   ParameterElement getParameter() => _parameters[_parameterIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a typedef;
-   * throws an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a typedef;
+  /// throws an [IndexError] if there are no more.
   FunctionTypeAliasElement getTypedef() => _typedefs[_typedefIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a type
-   * parameter; throws an [IndexError] if there are no more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a type
+  /// parameter; throws an [IndexError] if there are no more.
   TypeParameterElement getTypeParameter() =>
       _typeParameters[_typeParameterIndex++];
 
-  /**
-   * Returns the next non-synthetic child of [element] which is a top level
-   * variable, field, or local variable; throws an [IndexError] if there are no
-   * more.
-   */
+  /// Returns the next non-synthetic child of [element] which is a top level
+  /// variable, field, or local variable; throws an [IndexError] if there are no
+  /// more.
   VariableElement getVariable() => _variables[_variableIndex++];
 
-  /**
-   * Verifies that all non-synthetic children of [element] have been obtained
-   * from their corresponding "get" method calls; if not, throws a [StateError].
-   */
+  /// Verifies that all non-synthetic children of [element] have been obtained
+  /// from their corresponding "get" method calls; if not, throws a
+  /// [StateError].
   void validate() {
     void check(List<Element> elements, int index) {
       if (elements != null && elements.length != index) {
@@ -1054,10 +965,8 @@
 }
 
 class _ElementMismatchException extends AnalysisException {
-  /**
-   * Creates an exception to refer to the given [compilationUnit], [element],
-   * and [cause].
-   */
+  /// Creates an exception to refer to the given [compilationUnit], [element],
+  /// and [cause].
   _ElementMismatchException(
       CompilationUnitElement compilationUnit, Element element,
       [CaughtException cause = null])
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index cc387c5..286a2f7 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -1052,9 +1052,7 @@
     String superName = name?.name;
     ConstructorElement element =
         superType.lookUpConstructor(superName, _definingLibrary);
-    if (element == null ||
-        (!enclosingClass.doesMixinLackConstructors &&
-            !enclosingClass.isSuperConstructorAccessible(element))) {
+    if (element == null || !element.isAccessibleIn(_definingLibrary)) {
       if (name != null) {
         _resolver.errorReporter.reportErrorForNode(
             CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER,
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index a38db59..cf3cc20 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -16,6 +16,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/handle.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/inheritance_manager.dart';
@@ -1101,6 +1102,7 @@
       _checkForAssignmentToFinal(operand);
     }
     _checkForIntNotAssignable(operand);
+    _checkForUseOfVoidResult(operand);
     return super.visitPrefixExpression(node);
   }
 
@@ -1354,7 +1356,6 @@
       _checkForRepeatedType(implementsClause?.interfaces,
           CompileTimeErrorCode.IMPLEMENTS_REPEATED);
       _checkImplementsSuperClass(implementsClause);
-      _checkForMixinHasNoConstructors(node);
       _checkMixinInference(node, withClause);
       _checkForMixinWithConflictingPrivateMember(withClause, superclass);
       if (!disableConflictingGenericsCheck) {
@@ -1927,7 +1928,7 @@
             if (_checkForMixinSuperclassConstraints(mixinName, i)) {
               problemReported = true;
             }
-            if (_checkForMixinSuperInvokedMembers(mixinName, mixinElement)) {
+            if (_checkForMixinSuperInvokedMembers(i, mixinName, mixinElement)) {
               problemReported = true;
             }
           } else {
@@ -2545,7 +2546,7 @@
         var oldType = interfaces[element];
         if (oldType == null) {
           interfaces[element] = type;
-        } else if (oldType != type) {
+        } else if (!oldType.isEquivalentTo(type)) {
           _errorReporter.reportErrorForNode(
               CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
               node,
@@ -2731,7 +2732,7 @@
       InstanceCreationExpression expression,
       TypeName typeName,
       InterfaceType type) {
-    if (type.element.isAbstract) {
+    if (type.element.isAbstract && !type.element.isMixin) {
       ConstructorElement element = expression.staticElement;
       if (element != null && !element.isFactory) {
         bool isImplicit =
@@ -4204,18 +4205,6 @@
   }
 
   /**
-   * Report the error [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS] if
-   * appropriate.
-   */
-  void _checkForMixinHasNoConstructors(AstNode node) {
-    if (_enclosingClass.doesMixinLackConstructors) {
-      ErrorCode errorCode = CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS;
-      _errorReporter
-          .reportErrorForNode(errorCode, node, [_enclosingClass.supertype]);
-    }
-  }
-
-  /**
    * Verify that the given mixin has the 'Object' superclass. The [mixinName] is
    * the node to report problem on. The [mixinElement] is the mixing to
    * evaluate.
@@ -4281,15 +4270,21 @@
     return false;
   }
 
-  /// Check that the [_enclosingClass] has concrete implementations of all
-  /// the super-invoked members of the [mixinElement].
+  /// Check that the superclass of the given [mixinElement] at the given
+  /// [mixinIndex] in the list of mixins of [_enclosingClass] has concrete
+  /// implementations of all the super-invoked members of the [mixinElement].
   bool _checkForMixinSuperInvokedMembers(
-      TypeName mixinName, ClassElementImpl mixinElement) {
+      int mixinIndex, TypeName mixinName, ClassElement mixinElement) {
+    ClassElementImpl mixinElementImpl = mixinElement is ClassElementHandle
+        ? mixinElement.actualElement
+        : mixinElement;
     InterfaceTypeImpl enclosingType = _enclosingClass.type;
-    for (var name in mixinElement.superInvokedNames) {
+    for (var name in mixinElementImpl.superInvokedNames) {
       var superMember = enclosingType.lookUpInheritedMember(
           name, _currentLibrary,
-          concrete: true, setter: name.endsWith('='));
+          concrete: true,
+          stopMixinIndex: mixinIndex,
+          setter: name.endsWith('='));
       if (superMember == null) {
         _errorReporter.reportErrorForNode(
             CompileTimeErrorCode
@@ -4487,10 +4482,6 @@
    */
   void _checkForNoDefaultSuperConstructorImplicit(
       ClassDeclaration declaration) {
-    // do nothing if mixin errors have already been reported for this class.
-    if (_enclosingClass.doesMixinLackConstructors) {
-      return;
-    }
     // do nothing if there is explicit constructor
     List<ConstructorElement> constructors = _enclosingClass.constructors;
     if (!constructors[0].isSynthetic) {
@@ -4513,9 +4504,7 @@
             [superUnnamedConstructor]);
         return;
       }
-      if (superUnnamedConstructor.isDefaultConstructor &&
-          _enclosingClass
-              .isSuperConstructorAccessible(superUnnamedConstructor)) {
+      if (superUnnamedConstructor.isDefaultConstructor) {
         return;
       }
     }
@@ -5491,10 +5480,6 @@
     if (_enclosingClass == null) {
       return;
     }
-    // do nothing if mixin errors have already been reported for this class.
-    if (_enclosingClass.doesMixinLackConstructors) {
-      return;
-    }
 
     // Ignore if the constructor is not generative.
     if (constructor.factoryKeyword != null) {
@@ -5526,9 +5511,7 @@
             CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
             constructor.returnType,
             [superUnnamedConstructor]);
-      } else if (!superUnnamedConstructor.isDefaultConstructor ||
-          !_enclosingClass
-              .isSuperConstructorAccessible(superUnnamedConstructor)) {
+      } else if (!superUnnamedConstructor.isDefaultConstructor) {
         Identifier returnType = constructor.returnType;
         SimpleIdentifier name = constructor.name;
         int offset = returnType.offset;
@@ -5822,7 +5805,7 @@
 
   void _checkMixinInference(
       NamedCompilationUnitMember node, WithClause withClause) {
-    if (withClause == null || !_options.enableSuperMixins) {
+    if (withClause == null) {
       return;
     }
     ClassElement classElement = node.declaredElement;
@@ -5832,11 +5815,12 @@
     ClassElementImpl.collectAllSupertypes(
         supertypesForMixinInference, supertype, type);
     for (var typeName in withClause.mixinTypes) {
-      var mixinElement = typeName.name.staticElement;
+      var mixinType = typeName.type;
+      var mixinElement = mixinType.element;
       if (mixinElement is ClassElement) {
         if (typeName.typeArguments == null) {
-          var mixinSupertypeConstraints =
-              _typeSystem.gatherMixinSupertypeConstraints(mixinElement);
+          var mixinSupertypeConstraints = _typeSystem
+              .gatherMixinSupertypeConstraintsForInference(mixinElement);
           if (mixinSupertypeConstraints.isNotEmpty) {
             var matchingInterfaceTypes = _findInterfaceTypesForConstraints(
                 typeName,
@@ -5861,7 +5845,7 @@
           }
         }
         ClassElementImpl.collectAllSupertypes(
-            supertypesForMixinInference, mixinElement.type, type);
+            supertypesForMixinInference, mixinType, type);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 8eed8da..2a8bf95 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -38,17 +38,13 @@
 export 'package:analyzer/src/dart/resolver/scope.dart';
 export 'package:analyzer/src/generated/type_system.dart';
 
-/**
- * A visitor that will re-write an AST to support the optional `new` and `const`
- * feature.
- */
+/// A visitor that will re-write an AST to support the optional `new` and
+/// `const` feature.
 class AstRewriteVisitor extends ScopedVisitor {
   final bool addConstKeyword;
   final TypeSystem typeSystem;
 
-  /**
-   * Initialize a newly created visitor.
-   */
+  /// Initialize a newly created visitor.
   AstRewriteVisitor(
       this.typeSystem,
       LibraryElement definingLibrary,
@@ -208,20 +204,16 @@
     return null;
   }
 
-  /**
-   * Return the token that should be used in the [InstanceCreationExpression]
-   * that corresponds to the given invocation [node].
-   */
+  /// Return the token that should be used in the [InstanceCreationExpression]
+  /// that corresponds to the given invocation [node].
   Token _getKeyword(MethodInvocation node) {
     return addConstKeyword
         ? new KeywordToken(Keyword.CONST, node.offset)
         : null;
   }
 
-  /**
-   * Return the type of the given class [element] after substituting any type
-   * arguments from the list of [typeArguments] for the class' type parameters.
-   */
+  /// 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;
@@ -242,10 +234,8 @@
   }
 }
 
-/**
- * Instances of the class `BestPracticesVerifier` traverse an AST structure looking for
- * violations of Dart best practices.
- */
+/// Instances of the class `BestPracticesVerifier` traverse an AST structure
+/// looking for violations of Dart best practices.
 class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
 //  static String _HASHCODE_GETTER_NAME = "hashCode";
 
@@ -259,54 +249,36 @@
 
   static final _testingDir = '${path.separator}testing${path.separator}';
 
-  /**
-   * The class containing the AST nodes being visited, or `null` if we are not in the scope of
-   * a class.
-   */
+  /// The class containing the AST nodes being visited, or `null` if we are not
+  /// in the scope of a class.
   ClassElementImpl _enclosingClass;
 
-  /**
-   * A flag indicating whether a surrounding member (compilation unit or class)
-   * is deprecated.
-   */
+  /// A flag indicating whether a surrounding member (compilation unit or class)
+  /// is deprecated.
   bool inDeprecatedMember;
 
-  /**
-   * The error reporter by which errors will be reported.
-   */
+  /// The error reporter by which errors will be reported.
   final ErrorReporter _errorReporter;
 
-  /**
-   * The type [Null].
-   */
+  /// The type [Null].
   final InterfaceType _nullType;
 
-  /**
-   * The type Future<Null>, which is needed for determining whether it is safe
-   * to have a bare "return;" in an async method.
-   */
+  /// The type Future<Null>, which is needed for determining whether it is safe
+  /// to have a bare "return;" in an async method.
   final InterfaceType _futureNullType;
 
-  /**
-   * The type system primitives
-   */
+  /// The type system primitives
   TypeSystem _typeSystem;
 
-  /**
-   * The current library
-   */
+  /// The current library
   LibraryElement _currentLibrary;
 
-  /**
-   * The inheritance manager used to find overridden methods.
-   */
+  /// The inheritance manager used to find overridden methods.
   InheritanceManager _manager;
 
-  /**
-   * Create a new instance of the [BestPracticesVerifier].
-   *
-   * @param errorReporter the error reporter
-   */
+  /// Create a new instance of the [BestPracticesVerifier].
+  ///
+  /// @param errorReporter the error reporter
   BestPracticesVerifier(this._errorReporter, TypeProvider typeProvider,
       this._currentLibrary, this._manager,
       {TypeSystem typeSystem})
@@ -538,16 +510,14 @@
     return super.visitVariableDeclaration(node);
   }
 
-  /**
-   * Check for the passed is expression for the unnecessary type check hint codes as well as null
-   * checks expressed using an is expression.
-   *
-   * @param node the is expression to check
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.TYPE_CHECK_IS_NOT_NULL], [HintCode.TYPE_CHECK_IS_NULL],
-   * [HintCode.UNNECESSARY_TYPE_CHECK_TRUE], and
-   * [HintCode.UNNECESSARY_TYPE_CHECK_FALSE].
-   */
+  /// Check for the passed is expression for the unnecessary type check hint
+  /// codes as well as null checks expressed using an is expression.
+  ///
+  /// @param node the is expression to check
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.TYPE_CHECK_IS_NOT_NULL], [HintCode.TYPE_CHECK_IS_NULL],
+  /// [HintCode.UNNECESSARY_TYPE_CHECK_TRUE], and
+  /// [HintCode.UNNECESSARY_TYPE_CHECK_FALSE].
   bool _checkAllTypeChecks(IsExpression node) {
     Expression expression = node.expression;
     TypeAnnotation typeName = node.type;
@@ -601,14 +571,12 @@
     return false;
   }
 
-  /**
-   * Given some [Element], look at the associated metadata and report the use of the member if
-   * it is declared as deprecated.
-   *
-   * @param element some element to check for deprecated use of
-   * @param node the node use for the location of the error
-   * See [HintCode.DEPRECATED_MEMBER_USE].
-   */
+  /// Given some [Element], look at the associated metadata and report the use
+  /// of the member if it is declared as deprecated.
+  ///
+  /// @param element some element to check for deprecated use of
+  /// @param node the node use for the location of the error
+  /// See [HintCode.DEPRECATED_MEMBER_USE].
   void _checkForDeprecatedMemberUse(Element element, AstNode node) {
     bool isDeprecated(Element element) {
       if (element is PropertyAccessorElement && element.isSynthetic) {
@@ -670,20 +638,18 @@
     }
   }
 
-  /**
-   * For [SimpleIdentifier]s, only call [checkForDeprecatedMemberUse]
-   * if the node is not in a declaration context.
-   *
-   * Also, if the identifier is a constructor name in a constructor invocation, then calls to the
-   * deprecated constructor will be caught by
-   * [visitInstanceCreationExpression] and
-   * [visitSuperConstructorInvocation], and can be ignored by
-   * this visit method.
-   *
-   * @param identifier some simple identifier to check for deprecated use of
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.DEPRECATED_MEMBER_USE].
-   */
+  /// For [SimpleIdentifier]s, only call [checkForDeprecatedMemberUse]
+  /// if the node is not in a declaration context.
+  ///
+  /// Also, if the identifier is a constructor name in a constructor invocation,
+  /// then calls to the deprecated constructor will be caught by
+  /// [visitInstanceCreationExpression] and
+  /// [visitSuperConstructorInvocation], and can be ignored by
+  /// this visit method.
+  ///
+  /// @param identifier some simple identifier to check for deprecated use of
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.DEPRECATED_MEMBER_USE].
   void _checkForDeprecatedMemberUseAtIdentifier(SimpleIdentifier identifier) {
     if (identifier.inDeclarationContext()) {
       return;
@@ -700,13 +666,12 @@
     _checkForDeprecatedMemberUse(identifier.staticElement, identifier);
   }
 
-  /**
-   * Check for the passed binary expression for the [HintCode.DIVISION_OPTIMIZATION].
-   *
-   * @param node the binary expression to check
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.DIVISION_OPTIMIZATION].
-   */
+  /// Check for the passed binary expression for the
+  /// [HintCode.DIVISION_OPTIMIZATION].
+  ///
+  /// @param node the binary expression to check
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.DIVISION_OPTIMIZATION].
   bool _checkForDivisionOptimizationHint(BinaryExpression node) {
     // Return if the operator is not '/'
     if (node.operator.type != TokenType.SLASH) {
@@ -741,10 +706,8 @@
   }
 
   void _checkForImmutable(ClassDeclaration node) {
-    /**
-     * Return `true` if the given class [element] is annotated with the
-     * `@immutable` annotation.
-     */
+    /// Return `true` if the given class [element] is annotated with the
+    /// `@immutable` annotation.
     bool isImmutable(ClassElement element) {
       for (ElementAnnotation annotation in element.metadata) {
         if (annotation.isImmutable) {
@@ -754,10 +717,8 @@
       return false;
     }
 
-    /**
-     * Return `true` if the given class [element] or any superclass of it is
-     * annotated with the `@immutable` annotation.
-     */
+    /// Return `true` if the given class [element] or any superclass of it is
+    /// annotated with the `@immutable` annotation.
     bool isOrInheritsImmutable(
         ClassElement element, HashSet<ClassElement> visited) {
       if (visited.add(element)) {
@@ -781,10 +742,8 @@
       return false;
     }
 
-    /**
-     * Return `true` if the given class [element] defines a non-final instance
-     * field.
-     */
+    /// Return `true` if the given class [element] defines a non-final instance
+    /// field.
     bool hasNonFinalInstanceField(ClassElement element) {
       for (FieldElement field in element.fields) {
         if (!field.isSynthetic && !field.isFinal && !field.isStatic) {
@@ -794,10 +753,8 @@
       return false;
     }
 
-    /**
-     * Return `true` if the given class [element] defines or inherits a
-     * non-final field.
-     */
+    /// Return `true` if the given class [element] defines or inherits a
+    /// non-final field.
     bool hasOrInheritsNonFinalInstanceField(
         ClassElement element, HashSet<ClassElement> visited) {
       if (visited.add(element)) {
@@ -974,16 +931,16 @@
     }
   }
 
-  /**
-   * This verifies that the passed left hand side and right hand side represent a valid assignment.
-   *
-   * This method corresponds to ErrorVerifier.checkForInvalidAssignment.
-   *
-   * @param lhs the left hand side expression
-   * @param rhs the right hand side expression
-   * @return `true` if and only if an error code is generated on the passed node
-   * See [HintCode.INVALID_ASSIGNMENT].
-   */
+  /// This verifies that the passed left hand side and right hand side represent
+  /// a valid assignment.
+  ///
+  /// This method corresponds to ErrorVerifier.checkForInvalidAssignment.
+  ///
+  /// @param lhs the left hand side expression
+  /// @param rhs the right hand side expression
+  /// @return `true` if and only if an error code is generated on the passed
+  ///         node
+  /// See [HintCode.INVALID_ASSIGNMENT].
   bool _checkForInvalidAssignment(Expression lhs, Expression rhs) {
     if (lhs == null || rhs == null) {
       return false;
@@ -1049,15 +1006,14 @@
         decl.name, [decl.name.toString()]);
   }
 
-  /**
-   * Check that the imported library does not define a loadLibrary function. The import has already
-   * been determined to be deferred when this is called.
-   *
-   * @param node the import directive to evaluate
-   * @param importElement the [ImportElement] retrieved from the node
-   * @return `true` if and only if an error code is generated on the passed node
-   * See [CompileTimeErrorCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION].
-   */
+  /// Check that the imported library does not define a loadLibrary function.
+  /// The import has already been determined to be deferred when this is called.
+  ///
+  /// @param node the import directive to evaluate
+  /// @param importElement the [ImportElement] retrieved from the node
+  /// @return `true` if and only if an error code is generated on the passed
+  ///         node
+  /// See [CompileTimeErrorCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION].
   bool _checkForLoadLibraryFunction(
       ImportDirective node, ImportElement importElement) {
     LibraryElement importedLibrary = importElement.importedLibrary;
@@ -1074,19 +1030,18 @@
     return false;
   }
 
-  /**
-   * Generate a hint for functions or methods that have a return type, but do not have a return
-   * statement on all branches. At the end of blocks with no return, Dart implicitly returns
-   * `null`, avoiding these implicit returns is considered a best practice.
-   *
-   * Note: for async functions/methods, this hint only applies when the
-   * function has a return type that Future<Null> is not assignable to.
-   *
-   * @param node the binary expression to check
-   * @param body the function body
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.MISSING_RETURN].
-   */
+  /// Generate a hint for functions or methods that have a return type, but do
+  /// not have a return statement on all branches. At the end of blocks with no
+  /// return, Dart implicitly returns `null`, avoiding these implicit returns is
+  /// considered a best practice.
+  ///
+  /// Note: for async functions/methods, this hint only applies when the
+  /// function has a return type that Future<Null> is not assignable to.
+  ///
+  /// @param node the binary expression to check
+  /// @param body the function body
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.MISSING_RETURN].
   void _checkForMissingReturn(TypeAnnotation returnNode, FunctionBody body,
       ExecutableElement element, AstNode functionNode) {
     if (body is BlockFunctionBody) {
@@ -1149,9 +1104,7 @@
     }
   }
 
-  /**
-   * Produce several null-aware related hints.
-   */
+  /// Produce several null-aware related hints.
   void _checkForNullAwareHints(Expression node, Token operator) {
     if (operator == null || operator.type != TokenType.QUESTION_PERIOD) {
       return;
@@ -1221,13 +1174,12 @@
     }
   }
 
-  /**
-   * Check for the passed as expression for the [HintCode.UNNECESSARY_CAST] hint code.
-   *
-   * @param node the as expression to check
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.UNNECESSARY_CAST].
-   */
+  /// Check for the passed as expression for the [HintCode.UNNECESSARY_CAST]
+  /// hint code.
+  ///
+  /// @param node the as expression to check
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.UNNECESSARY_CAST].
   bool _checkForUnnecessaryCast(AsExpression node) {
     // TODO(jwren) After dartbug.com/13732, revisit this, we should be able to
     // remove the (x is! TypeParameterType) checks.
@@ -1270,13 +1222,11 @@
     return false;
   }
 
-  /**
-   * Generate a hint for `noSuchMethod` methods that do nothing except of
-   * calling another `noSuchMethod` that is not defined by `Object`.
-   *
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.UNNECESSARY_NO_SUCH_METHOD].
-   */
+  /// Generate a hint for `noSuchMethod` methods that do nothing except of
+  /// calling another `noSuchMethod` that is not defined by `Object`.
+  ///
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.UNNECESSARY_NO_SUCH_METHOD].
   bool _checkForUnnecessaryNoSuchMethod(MethodDeclaration node) {
     if (node.name.name != FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
       return false;
@@ -1337,14 +1287,12 @@
     }
   }
 
-  /**
-   * Check for the passed class declaration for the
-   * [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE] hint code.
-   *
-   * @param node the class declaration to check
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE].
-   */
+  /// Check for the passed class declaration for the
+  /// [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE] hint code.
+  ///
+  /// @param node the class declaration to check
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE].
 //  bool _checkForOverrideEqualsButNotHashCode(ClassDeclaration node) {
 //    ClassElement classElement = node.element;
 //    if (classElement == null) {
@@ -1376,9 +1324,7 @@
             .any((InterfaceType t) => t.element == typeElement);
   }
 
-  /**
-   * Return `true` if the given [type] represents `Future<void>`.
-   */
+  /// Return `true` if the given [type] represents `Future<void>`.
   bool _isFutureVoid(DartType type) {
     if (type.isDartAsyncFuture) {
       List<DartType> typeArgs = (type as InterfaceType).typeArguments;
@@ -1389,17 +1335,16 @@
     return false;
   }
 
-  /**
-   * Given a parenthesized expression, this returns the parent (or recursively grand-parent) of the
-   * expression that is a parenthesized expression, but whose parent is not a parenthesized
-   * expression.
-   *
-   * For example given the code `(((e)))`: `(e) -> (((e)))`.
-   *
-   * @param parenthesizedExpression some expression whose parent is a parenthesized expression
-   * @return the first parent or grand-parent that is a parenthesized expression, that does not have
-   *         a parenthesized expression parent
-   */
+  /// Given a parenthesized expression, this returns the parent (or recursively
+  /// grand-parent) of the expression that is a parenthesized expression, but
+  /// whose parent is not a parenthesized expression.
+  ///
+  /// For example given the code `(((e)))`: `(e) -> (((e)))`.
+  ///
+  /// @param parenthesizedExpression some expression whose parent is a
+  ///        parenthesized expression
+  /// @return the first parent or grand-parent that is a parenthesized
+  ///         expression, that does not have a parenthesized expression parent
   static ParenthesizedExpression _wrapParenthesizedExpression(
       ParenthesizedExpression parenthesizedExpression) {
     AstNode parent = parenthesizedExpression.parent;
@@ -1410,16 +1355,12 @@
   }
 }
 
-/**
- * Utilities for [LibraryElementImpl] building.
- */
+/// Utilities for [LibraryElementImpl] building.
 class BuildLibraryElementUtils {
-  /**
-   * Look through all of the compilation units defined for the given [library],
-   * looking for getters and setters that are defined in different compilation
-   * units but that have the same names. If any are found, make sure that they
-   * have the same variable element.
-   */
+  /// Look through all of the compilation units defined for the given [library],
+  /// looking for getters and setters that are defined in different compilation
+  /// units but that have the same names. If any are found, make sure that they
+  /// have the same variable element.
   static void patchTopLevelAccessors(LibraryElementImpl library) {
     // Without parts getters/setters already share the same variable element.
     List<CompilationUnitElement> parts = library.parts;
@@ -1452,10 +1393,9 @@
     }
   }
 
-  /**
-   * Add all of the non-synthetic [getters] and [setters] defined in the given
-   * [unit] that have no corresponding accessor to one of the given collections.
-   */
+  /// Add all of the non-synthetic [getters] and [setters] defined in the given
+  /// [unit] that have no corresponding accessor to one of the given
+  /// collections.
   static void _collectAccessors(Map<String, PropertyAccessorElement> getters,
       List<PropertyAccessorElement> setters, CompilationUnitElement unit) {
     List<PropertyAccessorElement> accessors = unit.accessors;
@@ -1475,62 +1415,41 @@
   }
 }
 
-/**
- * Instances of the class `ConstantVerifier` traverse an AST structure looking for additional
- * errors and warnings not covered by the parser and resolver. In particular, it looks for errors
- * and warnings related to constant expressions.
- */
+/// Instances of the class `ConstantVerifier` traverse an AST structure looking
+/// for additional errors and warnings not covered by the parser and resolver.
+/// In particular, it looks for errors and warnings related to constant
+/// expressions.
 class ConstantVerifier extends RecursiveAstVisitor<Object> {
-  /**
-   * The error reporter by which errors will be reported.
-   */
+  /// The error reporter by which errors will be reported.
   final ErrorReporter _errorReporter;
 
-  /**
-   * The type provider used to access the known types.
-   */
+  /// The type provider used to access the known types.
   final TypeProvider _typeProvider;
 
-  /**
-   * The type system in use.
-   */
+  /// The type system in use.
   final TypeSystem _typeSystem;
 
-  /**
-   * The set of variables declared using '-D' on the command line.
-   */
+  /// The set of variables declared using '-D' on the command line.
   final DeclaredVariables declaredVariables;
 
-  /**
-   * The type representing the type 'bool'.
-   */
+  /// The type representing the type 'bool'.
   InterfaceType _boolType;
 
-  /**
-   * The type representing the type 'int'.
-   */
+  /// The type representing the type 'int'.
   InterfaceType _intType;
 
-  /**
-   * The type representing the type 'num'.
-   */
+  /// The type representing the type 'num'.
   InterfaceType _numType;
 
-  /**
-   * The type representing the type 'string'.
-   */
+  /// The type representing the type 'string'.
   InterfaceType _stringType;
 
-  /**
-   * The current library that is being analyzed.
-   */
+  /// The current library that is being analyzed.
   final LibraryElement _currentLibrary;
 
-  /**
-   * Initialize a newly created constant verifier.
-   *
-   * @param errorReporter the error reporter by which errors will be reported
-   */
+  /// Initialize a newly created constant verifier.
+  ///
+  /// @param errorReporter the error reporter by which errors will be reported
   ConstantVerifier(this._errorReporter, LibraryElement currentLibrary,
       this._typeProvider, this.declaredVariables)
       : _currentLibrary = currentLibrary,
@@ -1777,15 +1696,14 @@
     return null;
   }
 
-  /**
-   * This verifies that the passed switch statement does not have a case expression with the
-   * operator '==' overridden.
-   *
-   * @param node the switch statement to evaluate
-   * @param type the common type of all 'case' expressions
-   * @return `true` if and only if an error code is generated on the passed node
-   * See [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS].
-   */
+  /// This verifies that the passed switch statement does not have a case
+  /// expression with the operator '==' overridden.
+  ///
+  /// @param node the switch statement to evaluate
+  /// @param type the common type of all 'case' expressions
+  /// @return `true` if and only if an error code is generated on the passed
+  ///         node.
+  /// See [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS].
   bool _checkForCaseExpressionTypeImplementsEquals(
       SwitchStatement node, DartType type) {
     if (!_implementsEqualsWhenNotAllowed(type)) {
@@ -1799,11 +1717,9 @@
     return true;
   }
 
-  /**
-   * Verify that the given [type] does not reference any type parameters.
-   *
-   * See [CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS].
-   */
+  /// Verify that the given [type] does not reference any type parameters.
+  ///
+  /// See [CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS].
   void _checkForConstWithTypeParameters(TypeAnnotation type) {
     // something wrong with AST
     if (type is! TypeName) {
@@ -1828,10 +1744,8 @@
     }
   }
 
-  /**
-   * @return `true` if given [Type] implements operator <i>==</i>, and it is not
-   *         <i>int</i> or <i>String</i>.
-   */
+  /// @return `true` if given [Type] implements operator <i>==</i>, and it is
+  ///         not <i>int</i> or <i>String</i>.
   bool _implementsEqualsWhenNotAllowed(DartType type) {
     // ignore int or String
     if (type == null || type == _intType || type == _typeProvider.stringType) {
@@ -1854,14 +1768,14 @@
     return false;
   }
 
-  /**
-   * Given some computed [Expression], this method generates the passed [ErrorCode] on
-   * the node if its' value consists of information from a deferred library.
-   *
-   * @param expression the expression to be tested for a deferred library reference
-   * @param errorCode the error code to be used if the expression is or consists of a reference to a
-   *          deferred library
-   */
+  /// Given some computed [Expression], this method generates the passed
+  /// [ErrorCode] on the node if its' value consists of information from a
+  /// deferred library.
+  ///
+  /// @param expression the expression to be tested for a deferred library
+  ///        reference
+  /// @param errorCode the error code to be used if the expression is or
+  ///        consists of a reference to a deferred library
   void _reportErrorIfFromDeferredLibrary(
       Expression expression, ErrorCode errorCode) {
     DeferredLibraryReferenceDetector referenceDetector =
@@ -1872,13 +1786,11 @@
     }
   }
 
-  /**
-   * Report any errors in the given list. Except for special cases, use the given error code rather
-   * than the one reported in the error.
-   *
-   * @param errors the errors that need to be reported
-   * @param errorCode the error code to be used
-   */
+  /// Report any errors in the given list. Except for special cases, use the
+  /// given error code rather than the one reported in the error.
+  ///
+  /// @param errors the errors that need to be reported
+  /// @param errorCode the error code to be used
   void _reportErrors(List<AnalysisError> errors, ErrorCode errorCode) {
     int length = errors.length;
     for (int i = 0; i < length; i++) {
@@ -1915,14 +1827,14 @@
     }
   }
 
-  /**
-   * Validate that the given expression is a compile time constant. Return the value of the compile
-   * time constant, or `null` if the expression is not a compile time constant.
-   *
-   * @param expression the expression to be validated
-   * @param errorCode the error code to be used if the expression is not a compile time constant
-   * @return the value of the compile time constant
-   */
+  /// Validate that the given expression is a compile time constant. Return the
+  /// value of the compile time constant, or `null` if the expression is not a
+  /// compile time constant.
+  ///
+  /// @param expression the expression to be validated
+  /// @param errorCode the error code to be used if the expression is not a
+  ///        compile time constant
+  /// @return the value of the compile time constant
   DartObjectImpl _validate(Expression expression, ErrorCode errorCode) {
     RecordingErrorListener errorListener = new RecordingErrorListener();
     ErrorReporter subErrorReporter =
@@ -1935,11 +1847,9 @@
     return result;
   }
 
-  /**
-   * Validate that if the passed arguments are constant expressions.
-   *
-   * @param argumentList the argument list to evaluate
-   */
+  /// Validate that if the passed arguments are constant expressions.
+  ///
+  /// @param argumentList the argument list to evaluate
   void _validateConstantArguments(ArgumentList argumentList) {
     for (Expression argument in argumentList.arguments) {
       Expression realArgument =
@@ -1949,10 +1859,8 @@
     }
   }
 
-  /**
-   * Validates that the expressions of the initializers of the given constant
-   * [constructor] are all compile time constants.
-   */
+  /// Validates that the expressions of the initializers of the given constant
+  /// [constructor] are all compile time constants.
   void _validateConstructorInitializers(ConstructorDeclaration constructor) {
     List<ParameterElement> parameterElements =
         constructor.parameters.parameterElements;
@@ -1978,12 +1886,10 @@
     }
   }
 
-  /**
-   * Validate that the default value associated with each of the parameters in the given list is a
-   * compile time constant.
-   *
-   * @param parameters the list of parameters to be validated
-   */
+  /// Validate that the default value associated with each of the parameters in
+  /// the given list is a compile time constant.
+  ///
+  /// @param parameters the list of parameters to be validated
   void _validateDefaultValues(FormalParameterList parameters) {
     if (parameters == null) {
       return;
@@ -2012,14 +1918,13 @@
     }
   }
 
-  /**
-   * Validates that the expressions of any field initializers in the class declaration are all
-   * compile time constants. Since this is only required if the class has a constant constructor,
-   * the error is reported at the constructor site.
-   *
-   * @param classDeclaration the class which should be validated
-   * @param errorSite the site at which errors should be reported.
-   */
+  /// Validates that the expressions of any field initializers in the class
+  /// declaration are all compile time constants. Since this is only required if
+  /// the class has a constant constructor, the error is reported at the
+  /// constructor site.
+  ///
+  /// @param classDeclaration the class which should be validated
+  /// @param errorSite the site at which errors should be reported.
   void _validateFieldInitializers(
       ClassDeclaration classDeclaration, ConstructorDeclaration errorSite) {
     NodeList<ClassMember> members = classDeclaration.members;
@@ -2052,13 +1957,12 @@
     }
   }
 
-  /**
-   * Validates that the given expression is a compile time constant.
-   *
-   * @param parameterElements the elements of parameters of constant constructor, they are
-   *          considered as a valid potentially constant expressions
-   * @param expression the expression to validate
-   */
+  /// Validates that the given expression is a compile time constant.
+  ///
+  /// @param parameterElements the elements of parameters of constant
+  ///        constructor, they are considered as a valid potentially constant
+  ///        expressions
+  /// @param expression the expression to validate
   void _validateInitializerExpression(
       List<ParameterElement> parameterElements, Expression expression) {
     RecordingErrorListener errorListener = new RecordingErrorListener();
@@ -2078,13 +1982,13 @@
     }
   }
 
-  /**
-   * Validates that all of the arguments of a constructor initializer are compile time constants.
-   *
-   * @param parameterElements the elements of parameters of constant constructor, they are
-   *          considered as a valid potentially constant expressions
-   * @param argumentList the argument list to validate
-   */
+  /// Validates that all of the arguments of a constructor initializer are
+  /// compile time constants.
+  ///
+  /// @param parameterElements the elements of parameters of constant
+  ///        constructor, they are considered as a valid potentially constant
+  ///        expressions
+  /// @param argumentList the argument list to validate
   void _validateInitializerInvocationArguments(
       List<ParameterElement> parameterElements, ArgumentList argumentList) {
     if (argumentList == null) {
@@ -2095,12 +1999,10 @@
     }
   }
 
-  /**
-   * Validate that if the passed instance creation is 'const' then all its arguments are constant
-   * expressions.
-   *
-   * @param node the instance creation evaluate
-   */
+  /// Validate that if the passed instance creation is 'const' then all its
+  /// arguments are constant expressions.
+  ///
+  /// @param node the instance creation evaluate
   void _validateInstanceCreationArguments(InstanceCreationExpression node) {
     if (!node.isConst) {
       return;
@@ -2113,26 +2015,19 @@
   }
 }
 
-/**
- * Instances of the class `Dart2JSVerifier` traverse an AST structure looking for hints for
- * code that will be compiled to JS, such as [HintCode.IS_DOUBLE].
- */
+/// Instances of the class `Dart2JSVerifier` traverse an AST structure looking
+/// for hints for code that will be compiled to JS, such as
+/// [HintCode.IS_DOUBLE].
 class Dart2JSVerifier extends RecursiveAstVisitor<Object> {
-  /**
-   * The name of the `double` type.
-   */
+  /// The name of the `double` type.
   static String _DOUBLE_TYPE_NAME = "double";
 
-  /**
-   * The error reporter by which errors will be reported.
-   */
+  /// The error reporter by which errors will be reported.
   final ErrorReporter _errorReporter;
 
-  /**
-   * Create a new instance of the [Dart2JSVerifier].
-   *
-   * @param errorReporter the error reporter
-   */
+  /// Create a new instance of the [Dart2JSVerifier].
+  ///
+  /// @param errorReporter the error reporter
   Dart2JSVerifier(this._errorReporter);
 
   @override
@@ -2141,17 +2036,15 @@
     return super.visitIsExpression(node);
   }
 
-  /**
-   * Check for instances of `x is double`, `x is int`, `x is! double` and
-   * `x is! int`.
-   *
-   * @param node the is expression to check
-   * @return `true` if and only if a hint code is generated on the passed node
-   * See [HintCode.IS_DOUBLE],
-   * [HintCode.IS_INT],
-   * [HintCode.IS_NOT_DOUBLE], and
-   * [HintCode.IS_NOT_INT].
-   */
+  /// Check for instances of `x is double`, `x is int`, `x is! double` and
+  /// `x is! int`.
+  ///
+  /// @param node the is expression to check
+  /// @return `true` if and only if a hint code is generated on the passed node
+  /// See [HintCode.IS_DOUBLE],
+  /// [HintCode.IS_INT],
+  /// [HintCode.IS_NOT_DOUBLE], and
+  /// [HintCode.IS_NOT_INT].
   bool _checkForIsDoubleHints(IsExpression node) {
     DartType type = node.type.type;
     Element element = type?.element;
@@ -2182,30 +2075,20 @@
   }
 }
 
-/**
- * A visitor that finds dead code and unused labels.
- */
+/// A visitor that finds dead code and unused labels.
 class DeadCodeVerifier extends RecursiveAstVisitor<Object> {
-  /**
-   * The error reporter by which errors will be reported.
-   */
+  /// The error reporter by which errors will be reported.
   final ErrorReporter _errorReporter;
 
-  /**
-   *  The type system for this visitor
-   */
+  ///  The type system for this visitor
   final TypeSystem _typeSystem;
 
-  /**
-   * The object used to track the usage of labels within a given label scope.
-   */
+  /// The object used to track the usage of labels within a given label scope.
   _LabelTracker labelTracker;
 
-  /**
-   * Initialize a newly created dead code verifier that will report dead code to
-   * the given [errorReporter] and will use the given [typeSystem] if one is
-   * provided.
-   */
+  /// Initialize a newly created dead code verifier that will report dead code
+  /// to the given [errorReporter] and will use the given [typeSystem] if one is
+  /// provided.
   DeadCodeVerifier(this._errorReporter, {TypeSystem typeSystem})
       : this._typeSystem = typeSystem ?? new StrongTypeSystemImpl(null);
 
@@ -2260,11 +2143,9 @@
     return super.visitBinaryExpression(node);
   }
 
-  /**
-   * For each block, this method reports and error on all statements between the
-   * end of the block and the first return statement (assuming there it is not
-   * at the end of the block.)
-   */
+  /// For each block, this method reports and error on all statements between
+  /// the end of the block and the first return statement (assuming there it is
+  /// not at the end of the block.)
   @override
   Object visitBlock(Block node) {
     NodeList<Statement> statements = node.statements;
@@ -2496,10 +2377,8 @@
     return null;
   }
 
-  /**
-   * Resolve the names in the given [combinator] in the scope of the given
-   * [library].
-   */
+  /// Resolve the names in the given [combinator] in the scope of the given
+  /// [library].
   void _checkCombinator(LibraryElement library, Combinator combinator) {
     Namespace namespace =
         new NamespaceBuilder().createExportNamespaceForLibrary(library);
@@ -2525,13 +2404,11 @@
     }
   }
 
-  /**
-   * Given some list of [statements], loop through the list searching for dead
-   * statements. If [allowMandated] is true, then allow dead statements that are
-   * mandated by the language spec. This allows for a final break, continue,
-   * return, or throw statement at the end of a switch case, that are mandated
-   * by the language spec.
-   */
+  /// Given some list of [statements], loop through the list searching for dead
+  /// statements. If [allowMandated] is true, then allow dead statements that
+  /// are mandated by the language spec. This allows for a final break,
+  /// continue, return, or throw statement at the end of a switch case, that are
+  /// mandated by the language spec.
   void _checkForDeadStatementsInNodeList(NodeList<Statement> statements,
       {bool allowMandated: false}) {
     bool statementExits(Statement statement) {
@@ -2565,11 +2442,9 @@
     }
   }
 
-  /**
-   * Given some [expression], return [ValidResult.RESULT_TRUE] if it is `true`,
-   * [ValidResult.RESULT_FALSE] if it is `false`, or `null` if the expression is
-   * not a constant boolean value.
-   */
+  /// Given some [expression], return [ValidResult.RESULT_TRUE] if it is `true`,
+  /// [ValidResult.RESULT_FALSE] if it is `false`, or `null` if the expression
+  /// is not a constant boolean value.
   EvaluationResultImpl _getConstantBooleanValue(Expression expression) {
     if (expression is BooleanLiteral) {
       if (expression.value) {
@@ -2594,9 +2469,8 @@
     return null;
   }
 
-  /**
-   * Return `true` if the given [expression] is resolved to a constant variable.
-   */
+  /// Return `true` if the given [expression] is resolved to a constant
+  /// variable.
   bool _isDebugConstant(Expression expression) {
     Element element = null;
     if (expression is Identifier) {
@@ -2611,10 +2485,8 @@
     return false;
   }
 
-  /**
-   * Exit the most recently entered label scope after reporting any labels that
-   * were not referenced within that scope.
-   */
+  /// Exit the most recently entered label scope after reporting any labels that
+  /// were not referenced within that scope.
   void _popLabels() {
     for (Label label in labelTracker.unusedLabels()) {
       _errorReporter
@@ -2623,21 +2495,17 @@
     labelTracker = labelTracker.outerTracker;
   }
 
-  /**
-   * Enter a new label scope in which the given [labels] are defined.
-   */
+  /// Enter a new label scope in which the given [labels] are defined.
   void _pushLabels(List<Label> labels) {
     labelTracker = new _LabelTracker(labelTracker, labels);
   }
 }
 
-/**
- * A visitor that resolves directives in an AST structure to already built
- * elements.
- *
- * The resulting AST must have everything resolved that would have been resolved
- * by a [DirectiveElementBuilder].
- */
+/// A visitor that resolves directives in an AST structure to already built
+/// elements.
+///
+/// The resulting AST must have everything resolved that would have been
+/// resolved by a [DirectiveElementBuilder].
 class DirectiveResolver extends SimpleAstVisitor {
   final Map<Source, int> sourceModificationTimeMap;
   final Map<Source, SourceKind> importSourceKindMap;
@@ -2723,10 +2591,9 @@
   }
 }
 
-/**
- * Instances of the class `ElementHolder` hold on to elements created while traversing an AST
- * structure so that they can be accessed when creating their enclosing element.
- */
+/// Instances of the class `ElementHolder` hold on to elements created while
+/// traversing an AST structure so that they can be accessed when creating their
+/// enclosing element.
 class ElementHolder {
   List<PropertyAccessorElement> _accessors;
 
@@ -3106,22 +2973,17 @@
   }
 }
 
-/**
- * Instances of the class `EnumMemberBuilder` build the members in enum declarations.
- */
+/// Instances of the class `EnumMemberBuilder` build the members in enum
+/// declarations.
 class EnumMemberBuilder extends RecursiveAstVisitor<Object> {
-  /**
-   * The type provider used to access the types needed to build an element model for enum
-   * declarations.
-   */
+  /// The type provider used to access the types needed to build an element
+  /// model for enum declarations.
   final TypeProvider _typeProvider;
 
-  /**
-   * Initialize a newly created enum member builder.
-   *
-   * @param typeProvider the type provider used to access the types needed to build an element model
-   *          for enum declarations
-   */
+  /// Initialize a newly created enum member builder.
+  ///
+  /// @param typeProvider the type provider used to access the types needed to
+  ///        build an element model for enum declarations
   EnumMemberBuilder(this._typeProvider);
 
   @override
@@ -3194,35 +3056,26 @@
     return super.visitEnumDeclaration(node);
   }
 
-  /**
-   * Create a getter that corresponds to the given [field].
-   */
+  /// Create a getter that corresponds to the given [field].
   PropertyAccessorElement _createGetter(FieldElementImpl field) {
     return new PropertyAccessorElementImpl_ImplicitGetter(field);
   }
 }
 
-/**
- * Instances of the class `ExitDetector` determine whether the visited AST node is guaranteed
- * to terminate by executing a `return` statement, `throw` expression, `rethrow`
- * expression, or simple infinite loop such as `while(true)`.
- */
+/// Instances of the class `ExitDetector` determine whether the visited AST node
+/// is guaranteed to terminate by executing a `return` statement, `throw`
+/// expression, `rethrow` expression, or simple infinite loop such as
+/// `while(true)`.
 class ExitDetector extends GeneralizingAstVisitor<bool> {
-  /**
-   * Set to `true` when a `break` is encountered, and reset to `false` when a
-   * `do`, `while`, `for` or `switch` block is entered.
-   */
+  /// Set to `true` when a `break` is encountered, and reset to `false` when a
+  /// `do`, `while`, `for` or `switch` block is entered.
   bool _enclosingBlockContainsBreak = false;
 
-  /**
-   * Set to `true` when a `continue` is encountered, and reset to `false` when a
-   * `do`, `while`, `for` or `switch` block is entered.
-   */
+  /// Set to `true` when a `continue` is encountered, and reset to `false` when
+  /// a `do`, `while`, `for` or `switch` block is entered.
   bool _enclosingBlockContainsContinue = false;
 
-  /**
-   * Add node when a labelled `break` is encountered.
-   */
+  /// Add node when a labelled `break` is encountered.
   Set<AstNode> _enclosingBlockBreaksLabel = new Set<AstNode>();
 
   @override
@@ -3694,12 +3547,10 @@
   @override
   bool visitYieldStatement(YieldStatement node) => _nodeExits(node.expression);
 
-  /**
-   * Return `true` if the given node exits.
-   *
-   * @param node the node being tested
-   * @return `true` if the given node exits
-   */
+  /// Return `true` if the given node exits.
+  ///
+  /// @param node the node being tested
+  /// @return `true` if the given node exits
   bool _nodeExits(AstNode node) {
     if (node == null) {
       return false;
@@ -3735,17 +3586,13 @@
     return false;
   }
 
-  /**
-   * Return `true` if the given [node] exits.
-   */
+  /// Return `true` if the given [node] exits.
   static bool exits(AstNode node) {
     return new ExitDetector()._nodeExits(node);
   }
 }
 
-/**
- * A visitor that visits ASTs and fills [UsedImportedElements].
- */
+/// A visitor that visits ASTs and fills [UsedImportedElements].
 class GatherUsedImportedElementsVisitor extends RecursiveAstVisitor {
   final LibraryElement library;
   final UsedImportedElements usedElements = new UsedImportedElements();
@@ -3772,10 +3619,8 @@
     _visitIdentifier(node, node.staticElement);
   }
 
-  /**
-   * If the given [identifier] is prefixed with a [PrefixElement], fill the
-   * corresponding `UsedImportedElements.prefixMap` entry and return `true`.
-   */
+  /// If the given [identifier] is prefixed with a [PrefixElement], fill the
+  /// corresponding `UsedImportedElements.prefixMap` entry and return `true`.
   bool _recordPrefixMap(SimpleIdentifier identifier, Element element) {
     bool recordIfTargetIsPrefixElement(Expression target) {
       if (target is SimpleIdentifier && target.staticElement is PrefixElement) {
@@ -3797,9 +3642,7 @@
     return false;
   }
 
-  /**
-   * Visit identifiers used by the given [directive].
-   */
+  /// Visit identifiers used by the given [directive].
   void _visitDirective(Directive directive) {
     directive.documentationComment?.accept(this);
     directive.metadata.accept(this);
@@ -3850,9 +3693,7 @@
   }
 }
 
-/**
- * An [AstVisitor] that fills [UsedLocalElements].
- */
+/// An [AstVisitor] that fills [UsedLocalElements].
 class GatherUsedLocalElementsVisitor extends RecursiveAstVisitor {
   final UsedLocalElements usedElements = new UsedLocalElements();
 
@@ -3950,9 +3791,7 @@
     }
   }
 
-  /**
-   * Marks an [Element] of [node] as used in the library.
-   */
+  /// Marks an [Element] of [node] as used in the library.
   void _useIdentifierElement(Identifier node) {
     Element element = node.staticElement;
     if (element == null) {
@@ -4014,86 +3853,75 @@
   }
 }
 
-/**
- * Instances of the class `ImportsVerifier` visit all of the referenced libraries in the source code
- * verifying that all of the imports are used, otherwise a [HintCode.UNUSED_IMPORT] hint is
- * generated with [generateUnusedImportHints].
- *
- * Additionally, [generateDuplicateImportHints] generates [HintCode.DUPLICATE_IMPORT] hints and
- * [HintCode.UNUSED_SHOWN_NAME] hints.
- *
- * While this class does not yet have support for an "Organize Imports" action, this logic built up
- * in this class could be used for such an action in the future.
- */
+/// Instances of the class `ImportsVerifier` visit all of the referenced
+/// libraries in the source code verifying that all of the imports are used,
+/// otherwise a [HintCode.UNUSED_IMPORT] hint is generated with
+/// [generateUnusedImportHints].
+///
+/// Additionally, [generateDuplicateImportHints] generates
+/// [HintCode.DUPLICATE_IMPORT] hints and [HintCode.UNUSED_SHOWN_NAME] hints.
+///
+/// While this class does not yet have support for an "Organize Imports" action,
+/// this logic built up in this class could be used for such an action in the
+/// future.
 class ImportsVerifier {
-  /**
-   * All [ImportDirective]s of the current library.
-   */
+  /// All [ImportDirective]s of the current library.
   final List<ImportDirective> _allImports = <ImportDirective>[];
 
-  /**
-   * A list of [ImportDirective]s that the current library imports, but does not use.
-   *
-   * As identifiers are visited by this visitor and an import has been identified as being used
-   * by the library, the [ImportDirective] is removed from this list. After all the sources in the
-   * library have been evaluated, this list represents the set of unused imports.
-   *
-   * See [ImportsVerifier.generateUnusedImportErrors].
-   */
+  /// A list of [ImportDirective]s that the current library imports, but does
+  /// not use.
+  ///
+  /// As identifiers are visited by this visitor and an import has been
+  /// identified as being used by the library, the [ImportDirective] is removed
+  /// from this list. After all the sources in the library have been evaluated,
+  /// this list represents the set of unused imports.
+  ///
+  /// See [ImportsVerifier.generateUnusedImportErrors].
   final List<ImportDirective> _unusedImports = <ImportDirective>[];
 
-  /**
-   * After the list of [unusedImports] has been computed, this list is a proper subset of the
-   * unused imports that are listed more than once.
-   */
+  /// After the list of [unusedImports] has been computed, this list is a proper
+  /// subset of the unused imports that are listed more than once.
   final List<ImportDirective> _duplicateImports = <ImportDirective>[];
 
-  /**
-   * The cache of [Namespace]s for [ImportDirective]s.
-   */
+  /// The cache of [Namespace]s for [ImportDirective]s.
   final HashMap<ImportDirective, Namespace> _namespaceMap =
       new HashMap<ImportDirective, Namespace>();
 
-  /**
-   * This is a map between prefix elements and the import directives from which they are derived. In
-   * cases where a type is referenced via a prefix element, the import directive can be marked as
-   * used (removed from the unusedImports) by looking at the resolved `lib` in `lib.X`,
-   * instead of looking at which library the `lib.X` resolves.
-   *
-   * TODO (jwren) Since multiple [ImportDirective]s can share the same [PrefixElement],
-   * it is possible to have an unreported unused import in situations where two imports use the same
-   * prefix and at least one import directive is used.
-   */
+  /// This is a map between prefix elements and the import directives from which
+  /// they are derived. In cases where a type is referenced via a prefix
+  /// element, the import directive can be marked as used (removed from the
+  /// unusedImports) by looking at the resolved `lib` in `lib.X`, instead of
+  /// looking at which library the `lib.X` resolves.
+  ///
+  /// TODO (jwren) Since multiple [ImportDirective]s can share the same
+  /// [PrefixElement], it is possible to have an unreported unused import in
+  /// situations where two imports use the same prefix and at least one import
+  /// directive is used.
   final HashMap<PrefixElement, List<ImportDirective>> _prefixElementMap =
       new HashMap<PrefixElement, List<ImportDirective>>();
 
-  /**
-   * A map of identifiers that the current library's imports show, but that the library does not
-   * use.
-   *
-   * Each import directive maps to a list of the identifiers that are imported via the "show"
-   * keyword.
-   *
-   * As each identifier is visited by this visitor, it is identified as being used by the library,
-   * and the identifier is removed from this map (under the import that imported it). After all the
-   * sources in the library have been evaluated, each list in this map's values present the set of
-   * unused shown elements.
-   *
-   * See [ImportsVerifier.generateUnusedShownNameHints].
-   */
+  /// A map of identifiers that the current library's imports show, but that the
+  /// library does not use.
+  ///
+  /// Each import directive maps to a list of the identifiers that are imported
+  /// via the "show" keyword.
+  ///
+  /// As each identifier is visited by this visitor, it is identified as being
+  /// used by the library, and the identifier is removed from this map (under
+  /// the import that imported it). After all the sources in the library have
+  /// been evaluated, each list in this map's values present the set of unused
+  /// shown elements.
+  ///
+  /// See [ImportsVerifier.generateUnusedShownNameHints].
   final HashMap<ImportDirective, List<SimpleIdentifier>> _unusedShownNamesMap =
       new HashMap<ImportDirective, List<SimpleIdentifier>>();
 
-  /**
-   * A map of names that are hidden more than once.
-   */
+  /// A map of names that are hidden more than once.
   final HashMap<NamespaceDirective, List<SimpleIdentifier>>
       _duplicateHiddenNamesMap =
       new HashMap<NamespaceDirective, List<SimpleIdentifier>>();
 
-  /**
-   * A map of names that are shown more than once.
-   */
+  /// A map of names that are shown more than once.
   final HashMap<NamespaceDirective, List<SimpleIdentifier>>
       _duplicateShownNamesMap =
       new HashMap<NamespaceDirective, List<SimpleIdentifier>>();
@@ -4155,14 +3983,13 @@
     }
   }
 
-  /**
-   * Any time after the defining compilation unit has been visited by this visitor, this method can
-   * be called to report an [HintCode.DUPLICATE_IMPORT] hint for each of the import directives
-   * in the [duplicateImports] list.
-   *
-   * @param errorReporter the error reporter to report the set of [HintCode.DUPLICATE_IMPORT]
-   *          hints to
-   */
+  /// Any time after the defining compilation unit has been visited by this
+  /// visitor, this method can be called to report an
+  /// [HintCode.DUPLICATE_IMPORT] hint for each of the import directives in the
+  /// [duplicateImports] list.
+  ///
+  /// @param errorReporter the error reporter to report the set of
+  ///        [HintCode.DUPLICATE_IMPORT] hints to
   void generateDuplicateImportHints(ErrorReporter errorReporter) {
     int length = _duplicateImports.length;
     for (int i = 0; i < length; i++) {
@@ -4171,16 +3998,14 @@
     }
   }
 
-  /**
-   * Report a [HintCode.DUPLICATE_SHOWN_HIDDEN_NAME] hint for each duplicate
-   * shown or hidden name.
-   *
-   * Only call this method after all of the compilation units have been visited
-   * by this visitor.
-   *
-   * @param errorReporter the error reporter used to report the set of
-   *          [HintCode.UNUSED_SHOWN_NAME] hints
-   */
+  /// Report a [HintCode.DUPLICATE_SHOWN_HIDDEN_NAME] hint for each duplicate
+  /// shown or hidden name.
+  ///
+  /// Only call this method after all of the compilation units have been visited
+  /// by this visitor.
+  ///
+  /// @param errorReporter the error reporter used to report the set of
+  ///          [HintCode.UNUSED_SHOWN_NAME] hints
   void generateDuplicateShownHiddenNameHints(ErrorReporter reporter) {
     _duplicateHiddenNamesMap.forEach(
         (NamespaceDirective directive, List<SimpleIdentifier> identifiers) {
@@ -4202,14 +4027,13 @@
     });
   }
 
-  /**
-   * Report an [HintCode.UNUSED_IMPORT] hint for each unused import.
-   *
-   * Only call this method after all of the compilation units have been visited by this visitor.
-   *
-   * @param errorReporter the error reporter used to report the set of [HintCode.UNUSED_IMPORT]
-   *          hints
-   */
+  /// Report an [HintCode.UNUSED_IMPORT] hint for each unused import.
+  ///
+  /// Only call this method after all of the compilation units have been visited
+  /// by this visitor.
+  ///
+  /// @param errorReporter the error reporter used to report the set of
+  ///        [HintCode.UNUSED_IMPORT] hints
   void generateUnusedImportHints(ErrorReporter errorReporter) {
     int length = _unusedImports.length;
     for (int i = 0; i < length; i++) {
@@ -4230,14 +4054,13 @@
     }
   }
 
-  /**
-   * Report an [HintCode.UNUSED_SHOWN_NAME] hint for each unused shown name.
-   *
-   * Only call this method after all of the compilation units have been visited by this visitor.
-   *
-   * @param errorReporter the error reporter used to report the set of [HintCode.UNUSED_SHOWN_NAME]
-   *          hints
-   */
+  /// Report an [HintCode.UNUSED_SHOWN_NAME] hint for each unused shown name.
+  ///
+  /// Only call this method after all of the compilation units have been visited
+  /// by this visitor.
+  ///
+  /// @param errorReporter the error reporter used to report the set of
+  ///        [HintCode.UNUSED_SHOWN_NAME] hints
   void generateUnusedShownNameHints(ErrorReporter reporter) {
     _unusedShownNamesMap.forEach(
         (ImportDirective importDirective, List<SimpleIdentifier> identifiers) {
@@ -4255,9 +4078,7 @@
     });
   }
 
-  /**
-   * Remove elements from [_unusedImports] using the given [usedElements].
-   */
+  /// Remove elements from [_unusedImports] using the given [usedElements].
   void removeUsedElements(UsedImportedElements usedElements) {
     // Stop if all the imports and shown names are known to be used.
     if (_unusedImports.isEmpty && _unusedShownNamesMap.isEmpty) {
@@ -4298,10 +4119,8 @@
     }
   }
 
-  /**
-   * Add duplicate shown and hidden names from [directive] into
-   * [_duplicateHiddenNamesMap] and [_duplicateShownNamesMap].
-   */
+  /// Add duplicate shown and hidden names from [directive] into
+  /// [_duplicateHiddenNamesMap] and [_duplicateShownNamesMap].
   void _addDuplicateShownHiddenNames(NamespaceDirective directive) {
     if (directive.combinators == null) {
       return;
@@ -4335,9 +4154,7 @@
     }
   }
 
-  /**
-   * Add every shown name from [importDirective] into [_unusedShownNamesMap].
-   */
+  /// Add every shown name from [importDirective] into [_unusedShownNamesMap].
   void _addShownNames(ImportDirective importDirective) {
     if (importDirective.combinators == null) {
       return;
@@ -4355,15 +4172,15 @@
     }
   }
 
-  /**
-   * Lookup and return the [Namespace] from the [_namespaceMap].
-   *
-   * If the map does not have the computed namespace, compute it and cache it in the map. If
-   * [importDirective] is not resolved or is not resolvable, `null` is returned.
-   *
-   * @param importDirective the import directive used to compute the returned namespace
-   * @return the computed or looked up [Namespace]
-   */
+  /// Lookup and return the [Namespace] from the [_namespaceMap].
+  ///
+  /// If the map does not have the computed namespace, compute it and cache it
+  /// in the map. If [importDirective] is not resolved or is not resolvable,
+  /// `null` is returned.
+  ///
+  /// @param importDirective the import directive used to compute the returned
+  ///        namespace
+  /// @return the computed or looked up [Namespace]
   Namespace _computeNamespace(ImportDirective importDirective) {
     Namespace namespace = _namespaceMap[importDirective];
     if (namespace == null) {
@@ -4378,9 +4195,7 @@
     return namespace;
   }
 
-  /**
-   * Remove [element] from the list of names shown by [importDirective].
-   */
+  /// Remove [element] from the list of names shown by [importDirective].
   void _removeFromUnusedShownNamesMap(
       Element element, ImportDirective importDirective) {
     List<SimpleIdentifier> identifiers = _unusedShownNamesMap[importDirective];
@@ -4410,72 +4225,54 @@
   }
 }
 
-/**
- * Maintains and manages contextual type information used for
- * inferring types.
- */
+/// Maintains and manages contextual type information used for
+/// inferring types.
 class InferenceContext {
   // TODO(leafp): Consider replacing these node properties with a
   // hash table help in an instance of this class.
   static const String _typeProperty =
       'analyzer.src.generated.InferenceContext.contextType';
 
-  /**
-   * The error listener on which to record inference information.
-   */
+  /// The error listener on which to record inference information.
   final ErrorReporter _errorReporter;
 
-  /**
-   * If true, emit hints when types are inferred
-   */
+  /// If true, emit hints when types are inferred
   final bool _inferenceHints;
 
-  /**
-   * Type provider, needed for type matching.
-   */
+  /// Type provider, needed for type matching.
   final TypeProvider _typeProvider;
 
-  /**
-   * The type system in use.
-   */
+  /// The type system in use.
   final TypeSystem _typeSystem;
 
-  /**
-   * When no context type is available, this will track the least upper bound
-   * of all return statements in a lambda.
-   *
-   * This will always be kept in sync with [_returnStack].
-   */
+  /// When no context type is available, this will track the least upper bound
+  /// of all return statements in a lambda.
+  ///
+  /// This will always be kept in sync with [_returnStack].
   final List<DartType> _inferredReturn = <DartType>[];
 
-  /**
-   * A stack of return types for all of the enclosing
-   * functions and methods.
-   */
+  /// A stack of return types for all of the enclosing
+  /// functions and methods.
   final List<DartType> _returnStack = <DartType>[];
 
   InferenceContext._(TypeProvider typeProvider, this._typeSystem,
       this._inferenceHints, this._errorReporter)
       : _typeProvider = typeProvider;
 
-  /**
-   * Get the return type of the current enclosing function, if any.
-   *
-   * The type returned for a function is the type that is expected
-   * to be used in a return or yield context.  For ordinary functions
-   * this is the same as the return type of the function.  For async
-   * functions returning Future<T> and for generator functions
-   * returning Stream<T> or Iterable<T>, this is T.
-   */
+  /// Get the return type of the current enclosing function, if any.
+  ///
+  /// The type returned for a function is the type that is expected
+  /// to be used in a return or yield context.  For ordinary functions
+  /// this is the same as the return type of the function.  For async
+  /// functions returning Future<T> and for generator functions
+  /// returning Stream<T> or Iterable<T>, this is T.
   DartType get returnContext =>
       _returnStack.isNotEmpty ? _returnStack.last : null;
 
-  /**
-   * Records the type of the expression of a return statement.
-   *
-   * This will be used for inferring a block bodied lambda, if no context
-   * type was available.
-   */
+  /// Records the type of the expression of a return statement.
+  ///
+  /// This will be used for inferring a block bodied lambda, if no context
+  /// type was available.
   void addReturnOrYieldType(DartType type) {
     if (_returnStack.isEmpty) {
       return;
@@ -4486,13 +4283,11 @@
     _inferredReturn[_inferredReturn.length - 1] = inferred;
   }
 
-  /**
-   * Pop a return type off of the return stack.
-   *
-   * Also record any inferred return type using [setType], unless this node
-   * already has a context type. This recorded type will be the least upper
-   * bound of all types added with [addReturnOrYieldType].
-   */
+  /// Pop a return type off of the return stack.
+  ///
+  /// Also record any inferred return type using [setType], unless this node
+  /// already has a context type. This recorded type will be the least upper
+  /// bound of all types added with [addReturnOrYieldType].
   void popReturnContext(FunctionBody node) {
     if (_returnStack.isNotEmpty && _inferredReturn.isNotEmpty) {
       DartType context = _returnStack.removeLast() ?? DynamicTypeImpl.instance;
@@ -4506,18 +4301,14 @@
     }
   }
 
-  /**
-   * Push a block function body's return type onto the return stack.
-   */
+  /// Push a block function body's return type onto the return stack.
   void pushReturnContext(FunctionBody node) {
     _returnStack.add(getContext(node));
     _inferredReturn.add(_typeProvider.nullType);
   }
 
-  /**
-   * Place an info node into the error stream indicating that a
-   * [type] has been inferred as the type of [node].
-   */
+  /// Place an info node into the error stream indicating that a
+  /// [type] has been inferred as the type of [node].
   void recordInference(Expression node, DartType type) {
     if (!_inferenceHints) {
       return;
@@ -4537,29 +4328,23 @@
     _errorReporter.reportErrorForNode(error, node, [node, type]);
   }
 
-  /**
-   * Clear the type information associated with [node].
-   */
+  /// Clear the type information associated with [node].
   static void clearType(AstNode node) {
     node?.setProperty(_typeProperty, null);
   }
 
-  /**
-   * Look for contextual type information attached to [node], and returns
-   * the type if found.
-   *
-   * The returned type may be partially or completely unknown, denoted with an
-   * unknown type `?`, for example `List<?>` or `(?, int) -> void`.
-   * You can use [StrongTypeSystemImpl.upperBoundForType] or
-   * [StrongTypeSystemImpl.lowerBoundForType] if you would prefer a known type
-   * that represents the bound of the context type.
-   */
+  /// Look for contextual type information attached to [node], and returns
+  /// the type if found.
+  ///
+  /// The returned type may be partially or completely unknown, denoted with an
+  /// unknown type `?`, for example `List<?>` or `(?, int) -> void`.
+  /// You can use [StrongTypeSystemImpl.upperBoundForType] or
+  /// [StrongTypeSystemImpl.lowerBoundForType] if you would prefer a known type
+  /// that represents the bound of the context type.
   static DartType getContext(AstNode node) => node?.getProperty(_typeProperty);
 
-  /**
-   * Attach contextual type information [type] to [node] for use during
-   * inference.
-   */
+  /// Attach contextual type information [type] to [node] for use during
+  /// inference.
   static void setType(AstNode node, DartType type) {
     if (type == null || type.isDynamic) {
       clearType(node);
@@ -4568,20 +4353,17 @@
     }
   }
 
-  /**
-   * Attach contextual type information [type] to [node] for use during
-   * inference.
-   */
+  /// Attach contextual type information [type] to [node] for use during
+  /// inference.
   static void setTypeFromNode(AstNode innerNode, AstNode outerNode) {
     setType(innerNode, getContext(outerNode));
   }
 }
 
-/**
- * The four states of a field initialization state through a constructor
- * signature, not initialized, initialized in the field declaration, initialized
- * in the field formal, and finally, initialized in the initializers list.
- */
+/// The four states of a field initialization state through a constructor
+/// signature, not initialized, initialized in the field declaration,
+/// initialized in the field formal, and finally, initialized in the
+/// initializers list.
 class INIT_STATE implements Comparable<INIT_STATE> {
   static const INIT_STATE NOT_INIT = const INIT_STATE('NOT_INIT', 0);
 
@@ -4601,14 +4383,10 @@
     INIT_IN_INITIALIZERS
   ];
 
-  /**
-   * The name of this init state.
-   */
+  /// The name of this init state.
   final String name;
 
-  /**
-   * The ordinal value of the init state.
-   */
+  /// The ordinal value of the init state.
   final int ordinal;
 
   const INIT_STATE(this.name, this.ordinal);
@@ -4623,33 +4401,27 @@
   String toString() => name;
 }
 
-/**
- * An AST visitor that is used to re-resolve the initializers of instance
- * fields. Although this class is an AST visitor, clients are expected to use
- * the method [resolveCompilationUnit] to run it over a compilation unit.
- */
+/// An AST visitor that is used to re-resolve the initializers of instance
+/// fields. Although this class is an AST visitor, clients are expected to use
+/// the method [resolveCompilationUnit] to run it over a compilation unit.
 class InstanceFieldResolverVisitor extends ResolverVisitor {
-  /**
-   * Initialize a newly created visitor to resolve the nodes in an AST node.
-   *
-   * The [definingLibrary] is the element for the library containing the node
-   * being visited. The [source] is the source representing the compilation unit
-   * containing the node being visited. The [typeProvider] is the object used to
-   * access the types from the core library. The [errorListener] is the error
-   * listener that will be informed of any errors that are found during
-   * resolution. The [nameScope] is the scope used to resolve identifiers in the
-   * node that will first be visited.  If `null` or unspecified, a new
-   * [LibraryScope] will be created based on the [definingLibrary].
-   */
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
+  ///
+  /// The [definingLibrary] is the element for the library containing the node
+  /// being visited. The [source] is the source representing the compilation
+  /// unit containing the node being visited. The [typeProvider] is the object
+  /// used to access the types from the core library. The [errorListener] is the
+  /// error listener that will be informed of any errors that are found during
+  /// resolution. The [nameScope] is the scope used to resolve identifiers in
+  /// the node that will first be visited.  If `null` or unspecified, a new
+  /// [LibraryScope] will be created based on the [definingLibrary].
   InstanceFieldResolverVisitor(LibraryElement definingLibrary, Source source,
       TypeProvider typeProvider, AnalysisErrorListener errorListener,
       {Scope nameScope})
       : super(definingLibrary, source, typeProvider, errorListener,
             nameScope: nameScope);
 
-  /**
-   * Resolve the instance fields in the given compilation unit [node].
-   */
+  /// Resolve the instance fields in the given compilation unit [node].
   void resolveCompilationUnit(CompilationUnit node) {
     _overrideManager.enterScope();
     try {
@@ -4666,9 +4438,7 @@
     }
   }
 
-  /**
-   * Resolve the instance fields in the given class declaration [node].
-   */
+  /// Resolve the instance fields in the given class declaration [node].
   void _resolveClassDeclaration(ClassDeclaration node) {
     _enclosingClassDeclaration = node;
     ClassElement outerType = enclosingClass;
@@ -4701,9 +4471,7 @@
     }
   }
 
-  /**
-   * Resolve the instance fields in the given field declaration [node].
-   */
+  /// Resolve the instance fields in the given field declaration [node].
   void _resolveFieldDeclaration(FieldDeclaration node) {
     if (!node.isStatic) {
       for (VariableDeclaration field in node.fields.variables) {
@@ -4720,27 +4488,21 @@
   }
 }
 
-/**
- * Instances of the class `OverrideVerifier` visit all of the declarations in a compilation
- * unit to verify that if they have an override annotation it is being used correctly.
- */
+/// Instances of the class `OverrideVerifier` visit all of the declarations in a
+/// compilation unit to verify that if they have an override annotation it is
+/// being used correctly.
 class OverrideVerifier extends RecursiveAstVisitor {
-  /**
-   * The error reporter used to report errors.
-   */
+  /// The error reporter used to report errors.
   final ErrorReporter _errorReporter;
 
-  /**
-   * The inheritance manager used to find overridden methods.
-   */
+  /// The inheritance manager used to find overridden methods.
   final InheritanceManager _manager;
 
-  /**
-   * Initialize a newly created verifier to look for inappropriate uses of the override annotation.
-   *
-   * @param errorReporter the error reporter used to report errors
-   * @param manager the inheritance manager used to find overridden methods
-   */
+  /// Initialize a newly created verifier to look for inappropriate uses of the
+  /// override annotation.
+  ///
+  /// @param errorReporter the error reporter used to report errors
+  /// @param manager the inheritance manager used to find overridden methods
   OverrideVerifier(this._errorReporter, this._manager);
 
   @override
@@ -4780,12 +4542,10 @@
     }
   }
 
-  /**
-   * Return the member that overrides the given member.
-   *
-   * @param member the member that overrides the returned member
-   * @return the member that overrides the given member
-   */
+  /// Return the member that overrides the given member.
+  ///
+  /// @param member the member that overrides the returned member
+  /// @return the member that overrides the given member
   ExecutableElement _getOverriddenMember(ExecutableElement member) {
     LibraryElement library = member.library;
     if (library == null) {
@@ -4799,46 +4559,40 @@
     return _manager.lookupInheritance(classElement, member.name);
   }
 
-  /**
-   * Return `true` if the given element has an override annotation associated with it.
-   *
-   * @param element the element being tested
-   * @return `true` if the element has an override annotation associated with it
-   */
+  /// Return `true` if the given element has an override annotation associated
+  /// with it.
+  ///
+  /// @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.hasOverride;
 }
 
-/**
- * An AST visitor that is used to resolve the some of the nodes within a single
- * compilation unit. The nodes that are skipped are those that are within
- * function bodies.
- */
+/// An AST visitor that is used to resolve the some of the nodes within a single
+/// compilation unit. The nodes that are skipped are those that are within
+/// function bodies.
 class PartialResolverVisitor extends ResolverVisitor {
-  /**
-   * The static variables and fields that have an initializer. These are the
-   * variables that need to be re-resolved after static variables have their
-   * types inferred. A subset of these variables are those whose types should
-   * be inferred.
-   */
+  /// The static variables and fields that have an initializer. These are the
+  /// variables that need to be re-resolved after static variables have their
+  /// types inferred. A subset of these variables are those whose types should
+  /// be inferred.
   final List<VariableElement> staticVariables = <VariableElement>[];
 
-  /**
-   * Initialize a newly created visitor to resolve the nodes in an AST node.
-   *
-   * The [definingLibrary] is the element for the library containing the node
-   * being visited. The [source] is the source representing the compilation unit
-   * containing the node being visited. The [typeProvider] is the object used to
-   * access the types from the core library. The [errorListener] is the error
-   * listener that will be informed of any errors that are found during
-   * resolution. The [nameScope] is the scope used to resolve identifiers in the
-   * node that will first be visited.  If `null` or unspecified, a new
-   * [LibraryScope] will be created based on [definingLibrary] and
-   * [typeProvider]. The [inheritanceManager] is used to perform inheritance
-   * lookups.  If `null` or unspecified, a new [InheritanceManager] will be
-   * created based on [definingLibrary]. The [typeAnalyzerFactory] is used to
-   * create the type analyzer.  If `null` or unspecified, a type analyzer of
-   * type [StaticTypeAnalyzer] will be created.
-   */
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
+  ///
+  /// The [definingLibrary] is the element for the library containing the node
+  /// being visited. The [source] is the source representing the compilation
+  /// unit containing the node being visited. The [typeProvider] is the object
+  /// used to access the types from the core library. The [errorListener] is the
+  /// error listener that will be informed of any errors that are found during
+  /// resolution. The [nameScope] is the scope used to resolve identifiers in
+  /// the node that will first be visited.  If `null` or unspecified, a new
+  /// [LibraryScope] will be created based on [definingLibrary] and
+  /// [typeProvider]. The [inheritanceManager] is used to perform inheritance
+  /// lookups.  If `null` or unspecified, a new [InheritanceManager] will be
+  /// created based on [definingLibrary]. The [typeAnalyzerFactory] is used to
+  /// create the type analyzer.  If `null` or unspecified, a type analyzer of
+  /// type [StaticTypeAnalyzer] will be created.
   PartialResolverVisitor(LibraryElement definingLibrary, Source source,
       TypeProvider typeProvider, AnalysisErrorListener errorListener,
       {Scope nameScope})
@@ -4880,13 +4634,11 @@
     return super.visitTopLevelVariableDeclaration(node);
   }
 
-  /**
-   * Add all of the [variables] with initializers to the list of variables whose
-   * type can be inferred. Technically, we only infer the types of variables
-   * that do not have a static type, but all variables with initializers
-   * potentially need to be re-resolved after inference because they might
-   * refer to a field whose type was inferred.
-   */
+  /// Add all of the [variables] with initializers to the list of variables
+  /// whose type can be inferred. Technically, we only infer the types of
+  /// variables that do not have a static type, but all variables with
+  /// initializers potentially need to be re-resolved after inference because
+  /// they might refer to a field whose type was inferred.
   void _addStaticVariables(List<VariableDeclaration> variables) {
     int length = variables.length;
     for (int i = 0; i < length; i++) {
@@ -4897,10 +4649,8 @@
     }
   }
 
-  /**
-   * Return `true` if the given function body should be skipped because it is
-   * the body of a top-level function, method or constructor.
-   */
+  /// Return `true` if the given function body should be skipped because it is
+  /// the body of a top-level function, method or constructor.
   bool _shouldBeSkipped(FunctionBody body) {
     AstNode parent = body.parent;
     if (parent is MethodDeclaration) {
@@ -4920,9 +4670,7 @@
   }
 }
 
-/**
- * Kind of the redirecting constructor.
- */
+/// Kind of the redirecting constructor.
 class RedirectingConstructorKind
     implements Comparable<RedirectingConstructorKind> {
   static const RedirectingConstructorKind CONST =
@@ -4933,14 +4681,10 @@
 
   static const List<RedirectingConstructorKind> values = const [CONST, NORMAL];
 
-  /**
-   * The name of this redirecting constructor kind.
-   */
+  /// The name of this redirecting constructor kind.
   final String name;
 
-  /**
-   * The ordinal value of the redirecting constructor kind.
-   */
+  /// The ordinal value of the redirecting constructor kind.
   final int ordinal;
 
   const RedirectingConstructorKind(this.name, this.ordinal);
@@ -4955,13 +4699,11 @@
   String toString() => name;
 }
 
-/**
- * The enumeration `ResolverErrorCode` defines the error codes used for errors
- * detected by the resolver. The convention for this class is for the name of
- * the error code to indicate the problem that caused the error to be generated
- * and for the error message to explain what is wrong and, when appropriate, how
- * the problem can be corrected.
- */
+/// The enumeration `ResolverErrorCode` defines the error codes used for errors
+/// detected by the resolver. The convention for this class is for the name of
+/// the error code to indicate the problem that caused the error to be generated
+/// and for the error message to explain what is wrong and, when appropriate,
+/// how the problem can be corrected.
 class ResolverErrorCode extends ErrorCode {
   static const ResolverErrorCode BREAK_LABEL_ON_SWITCH_MEMBER =
       const ResolverErrorCode('BREAK_LABEL_ON_SWITCH_MEMBER',
@@ -4975,14 +4717,12 @@
       const ResolverErrorCode('MISSING_LIBRARY_DIRECTIVE_WITH_PART',
           "Libraries that have parts must have a library directive");
 
-  /**
-   * Parts: It is a static warning if the referenced part declaration
-   * <i>p</i> names a library that does not have a library tag.
-   *
-   * Parameters:
-   * 0: the URI of the expected library
-   * 1: the non-matching actual library name from the "part of" declaration
-   */
+  /// Parts: It is a static warning if the referenced part declaration
+  /// <i>p</i> names a library that does not have a library tag.
+  ///
+  /// Parameters:
+  /// 0: the URI of the expected library
+  /// 1: the non-matching actual library name from the "part of" declaration
   static const ResolverErrorCode PART_OF_UNNAMED_LIBRARY =
       const ResolverErrorCode(
           'PART_OF_UNNAMED_LIBRARY',
@@ -4992,12 +4732,10 @@
               "Try changing the part-of directive to a URI, or try including a"
               " different part.");
 
-  /**
-   * Initialize a newly created error code to have the given [name]. The message
-   * associated with the error will be created from the given [message]
-   * template. The correction associated with the error will be created from the
-   * given [correction] template.
-   */
+  /// Initialize a newly created error code to have the given [name]. The
+  /// message associated with the error will be created from the given [message]
+  /// template. The correction associated with the error will be created from
+  /// the given [correction] template.
   const ResolverErrorCode(String name, String message, {String correction})
       : super.temporary(name, message, correction: correction);
 
@@ -5008,100 +4746,74 @@
   ErrorType get type => ErrorType.COMPILE_TIME_ERROR;
 }
 
-/**
- * Instances of the class `ResolverVisitor` are used to resolve the nodes within a single
- * compilation unit.
- */
+/// Instances of the class `ResolverVisitor` are used to resolve the nodes
+/// within a single compilation unit.
 class ResolverVisitor extends ScopedVisitor {
-  /**
-   * The object used to resolve the element associated with the current node.
-   */
+  /// The object used to resolve the element associated with the current node.
   ElementResolver elementResolver;
 
-  /**
-   * The object used to compute the type associated with the current node.
-   */
+  /// The object used to compute the type associated with the current node.
   StaticTypeAnalyzer typeAnalyzer;
 
-  /**
-   * The type system in use during resolution.
-   */
+  /// The type system in use during resolution.
   TypeSystem typeSystem;
 
-  /**
-   * The class declaration representing the class containing the current node, or `null` if
-   * the current node is not contained in a class.
-   */
+  /// The class declaration representing the class containing the current node,
+  /// or `null` if the current node is not contained in a class.
   ClassDeclaration _enclosingClassDeclaration = null;
 
-  /**
-   * The function type alias representing the function type containing the current node, or
-   * `null` if the current node is not contained in a function type alias.
-   */
+  /// The function type alias representing the function type containing the
+  /// current node, or `null` if the current node is not contained in a function
+  /// type alias.
   FunctionTypeAlias _enclosingFunctionTypeAlias = null;
 
-  /**
-   * The element representing the function containing the current node, or `null` if the
-   * current node is not contained in a function.
-   */
+  /// The element representing the function containing the current node, or
+  /// `null` if the current node is not contained in a function.
   ExecutableElement _enclosingFunction = null;
 
-  /**
-   * The mixin declaration representing the class containing the current node,
-   * or `null` if the current node is not contained in a mixin.
-   */
+  /// The mixin declaration representing the class containing the current node,
+  /// or `null` if the current node is not contained in a mixin.
   MixinDeclaration _enclosingMixinDeclaration = null;
 
   InferenceContext inferenceContext = null;
 
-  /**
-   * The object keeping track of which elements have had their types overridden.
-   */
+  /// The object keeping track of which elements have had their types
+  /// overridden.
   TypeOverrideManager _overrideManager = new TypeOverrideManager();
 
-  /**
-   * The object keeping track of which elements have had their types promoted.
-   */
+  /// The object keeping track of which elements have had their types promoted.
   TypePromotionManager _promoteManager = new TypePromotionManager();
 
-  /**
-   * A comment before a function should be resolved in the context of the
-   * function. But when we incrementally resolve a comment, we don't want to
-   * resolve the whole function.
-   *
-   * So, this flag is set to `true`, when just context of the function should
-   * be built and the comment resolved.
-   */
+  /// A comment before a function should be resolved in the context of the
+  /// function. But when we incrementally resolve a comment, we don't want to
+  /// resolve the whole function.
+  ///
+  /// So, this flag is set to `true`, when just context of the function should
+  /// be built and the comment resolved.
   bool resolveOnlyCommentInFunctionBody = false;
 
-  /**
-   * Body of the function currently being analyzed, if any.
-   */
+  /// Body of the function currently being analyzed, if any.
   FunctionBody _currentFunctionBody;
 
-  /**
-   * The type of the expression of the immediately enclosing [SwitchStatement],
-   * or `null` if not in a [SwitchStatement].
-   */
+  /// The type of the expression of the immediately enclosing [SwitchStatement],
+  /// or `null` if not in a [SwitchStatement].
   DartType _enclosingSwitchStatementExpressionType;
 
-  /**
-   * Initialize a newly created visitor to resolve the nodes in an AST node.
-   *
-   * The [definingLibrary] is the element for the library containing the node
-   * being visited. The [source] is the source representing the compilation unit
-   * containing the node being visited. The [typeProvider] is the object used to
-   * access the types from the core library. The [errorListener] is the error
-   * listener that will be informed of any errors that are found during
-   * resolution. The [nameScope] is the scope used to resolve identifiers in the
-   * node that will first be visited.  If `null` or unspecified, a new
-   * [LibraryScope] will be created based on [definingLibrary] and
-   * [typeProvider]. The [inheritanceManager] is used to perform inheritance
-   * lookups.  If `null` or unspecified, a new [InheritanceManager] will be
-   * created based on [definingLibrary]. The [typeAnalyzerFactory] is used to
-   * create the type analyzer.  If `null` or unspecified, a type analyzer of
-   * type [StaticTypeAnalyzer] will be created.
-   */
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
+  ///
+  /// The [definingLibrary] is the element for the library containing the node
+  /// being visited. The [source] is the source representing the compilation
+  /// unit containing the node being visited. The [typeProvider] is the object
+  /// used to access the types from the core library. The [errorListener] is the
+  /// error listener that will be informed of any errors that are found during
+  /// resolution. The [nameScope] is the scope used to resolve identifiers in
+  /// the node that will first be visited.  If `null` or unspecified, a new
+  /// [LibraryScope] will be created based on [definingLibrary] and
+  /// [typeProvider]. The [inheritanceManager] is used to perform inheritance
+  /// lookups.  If `null` or unspecified, a new [InheritanceManager] will be
+  /// created based on [definingLibrary]. The [typeAnalyzerFactory] is used to
+  /// create the type analyzer.  If `null` or unspecified, a type analyzer of
+  /// type [StaticTypeAnalyzer] will be created.
   ResolverVisitor(LibraryElement definingLibrary, Source source,
       TypeProvider typeProvider, AnalysisErrorListener errorListener,
       {Scope nameScope,
@@ -5122,35 +4834,32 @@
     this.typeAnalyzer = new StaticTypeAnalyzer(this);
   }
 
-  /**
-   * Return the element representing the function containing the current node, or `null` if
-   * the current node is not contained in a function.
-   *
-   * @return the element representing the function containing the current node
-   */
+  /// Return the element representing the function containing the current node,
+  /// or `null` if the current node is not contained in a function.
+  ///
+  /// @return the element representing the function containing the current node
   ExecutableElement get enclosingFunction => _enclosingFunction;
 
-  /**
-   * Return the object keeping track of which elements have had their types overridden.
-   *
-   * @return the object keeping track of which elements have had their types overridden
-   */
+  /// Return the object keeping track of which elements have had their types
+  /// overridden.
+  ///
+  /// @return the object keeping track of which elements have had their types
+  ///         overridden
   TypeOverrideManager get overrideManager => _overrideManager;
 
-  /**
-   * Return the object keeping track of which elements have had their types promoted.
-   *
-   * @return the object keeping track of which elements have had their types promoted
-   */
+  /// Return the object keeping track of which elements have had their types
+  /// promoted.
+  ///
+  /// @return the object keeping track of which elements have had their types
+  ///         promoted
   TypePromotionManager get promoteManager => _promoteManager;
 
-  /**
-   * Return the static element associated with the given expression whose type can be overridden, or
-   * `null` if there is no element whose type can be overridden.
-   *
-   * @param expression the expression with which the element is associated
-   * @return the element associated with the given expression
-   */
+  /// Return the static element associated with the given expression whose type
+  /// can be overridden, or `null` if there is no element whose type can be
+  /// overridden.
+  ///
+  /// @param expression the expression with which the element is associated
+  /// @return the element associated with the given expression
   VariableElement getOverridableStaticElement(Expression expression) {
     Element element = null;
     if (expression is SimpleIdentifier) {
@@ -5166,11 +4875,9 @@
     return null;
   }
 
-  /**
-   * Return the static element associated with the given expression whose type
-   * can be promoted, or `null` if there is no element whose type can be
-   * promoted.
-   */
+  /// Return the static element associated with the given expression whose type
+  /// can be promoted, or `null` if there is no element whose type can be
+  /// promoted.
   VariableElement getPromotionStaticElement(Expression expression) {
     expression = expression?.unParenthesized;
     if (expression is SimpleIdentifier) {
@@ -5186,23 +4893,19 @@
     return null;
   }
 
-  /**
-   * Prepares this [ResolverVisitor] to using it for incremental resolution.
-   */
+  /// Prepares this [ResolverVisitor] to using it for incremental resolution.
   void initForIncrementalResolution() {
     _overrideManager.enterScope();
   }
 
-  /**
-   * Given a downward inference type [fnType], and the declared
-   * [typeParameterList] for a function expression, determines if we can enable
-   * downward inference and if so, returns the function type to use for
-   * inference.
-   *
-   * This will return null if inference is not possible. This happens when
-   * there is no way we can find a subtype of the function type, given the
-   * provided type parameter list.
-   */
+  /// Given a downward inference type [fnType], and the declared
+  /// [typeParameterList] for a function expression, determines if we can enable
+  /// downward inference and if so, returns the function type to use for
+  /// inference.
+  ///
+  /// This will return null if inference is not possible. This happens when
+  /// there is no way we can find a subtype of the function type, given the
+  /// provided type parameter list.
   FunctionType matchFunctionTypeParameters(
       TypeParameterList typeParameterList, FunctionType fnType) {
     if (typeParameterList == null) {
@@ -5237,33 +4940,30 @@
         .toList());
   }
 
-  /**
-   * If it is appropriate to do so, override the current type of the static element
-   * associated with the given expression with the given type. Generally speaking, it is appropriate
-   * if the given type is more specific than the current type.
-   *
-   * @param expression the expression used to access the static element whose types
-   *          might be overridden
-   * @param potentialType the potential type of the elements
-   * @param allowPrecisionLoss see @{code overrideVariable} docs
-   */
+  /// If it is appropriate to do so, override the current type of the static
+  /// element associated with the given expression with the given type.
+  /// Generally speaking, it is appropriate if the given type is more specific
+  /// than the current type.
+  ///
+  /// @param expression the expression used to access the static element whose
+  ///        types might be overridden
+  /// @param potentialType the potential type of the elements
+  /// @param allowPrecisionLoss see @{code overrideVariable} docs
   void overrideExpression(Expression expression, DartType potentialType,
       bool allowPrecisionLoss, bool setExpressionType) {
     // TODO(brianwilkerson) Remove this method.
   }
 
-  /**
-   * If it is appropriate to do so, override the current type of the given element with the given
-   * type.
-   *
-   * @param element the element whose type might be overridden
-   * @param potentialType the potential type of the element
-   * @param allowPrecisionLoss true if `potentialType` is allowed to be less precise than the
-   *          current best type
-   *
-   * Return a new better [DartType], or `null` if [potentialType] is not better
-   * than the current [element] type.
-   */
+  /// If it is appropriate to do so, override the current type of the given
+  /// element with the given type.
+  ///
+  /// @param element the element whose type might be overridden
+  /// @param potentialType the potential type of the element
+  /// @param allowPrecisionLoss true if `potentialType` is allowed to be less
+  ///        precise than the current best type
+  ///
+  /// Return a new better [DartType], or `null` if [potentialType] is not better
+  /// than the current [element] type.
   DartType overrideVariable(VariableElement element, DartType potentialType,
       bool allowPrecisionLoss) {
     // TODO(scheglov) type propagation for instance/top-level fields
@@ -5314,18 +5014,14 @@
     return null;
   }
 
-  /**
-   * A client is about to resolve a member in the given class declaration.
-   */
+  /// A client is about to resolve a member in the given class declaration.
   void prepareToResolveMembersInClass(ClassDeclaration node) {
     _enclosingClassDeclaration = node;
     enclosingClass = node.declaredElement;
     typeAnalyzer.thisType = enclosingClass?.type;
   }
 
-  /**
-   * Visit the given [comment] if it is not `null`.
-   */
+  /// Visit the given [comment] if it is not `null`.
   void safelyVisitComment(Comment comment) {
     if (comment != null) {
       super.visitComment(comment);
@@ -5565,10 +5261,8 @@
     return null;
   }
 
-  /**
-   * Implementation of this method should be synchronized with
-   * [visitClassDeclaration].
-   */
+  /// Implementation of this method should be synchronized with
+  /// [visitClassDeclaration].
   visitClassDeclarationIncrementally(ClassDeclaration node) {
     //
     // Resolve the metadata in the library scope.
@@ -6513,13 +6207,12 @@
     return null;
   }
 
-  /**
-   * Checks each promoted variable in the current scope for compliance with the following
-   * specification statement:
-   *
-   * If the variable <i>v</i> is accessed by a closure in <i>s<sub>1</sub></i> then the variable
-   * <i>v</i> is not potentially mutated anywhere in the scope of <i>v</i>.
-   */
+  /// Checks each promoted variable in the current scope for compliance with the
+  /// following specification statement:
+  ///
+  /// If the variable <i>v</i> is accessed by a closure in <i>s<sub>1</sub></i>
+  /// then the variable <i>v</i> is not potentially mutated anywhere in the
+  /// scope of <i>v</i>.
   void _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(
       AstNode target) {
     for (Element element in _promoteManager.promotedElements) {
@@ -6531,12 +6224,11 @@
     }
   }
 
-  /**
-   * Checks each promoted variable in the current scope for compliance with the following
-   * specification statement:
-   *
-   * <i>v</i> is not potentially mutated in <i>s<sub>1</sub></i> or within a closure.
-   */
+  /// Checks each promoted variable in the current scope for compliance with the
+  /// following specification statement:
+  ///
+  /// <i>v</i> is not potentially mutated in <i>s<sub>1</sub></i> or within a
+  /// closure.
   void _clearTypePromotionsIfPotentiallyMutatedIn(AstNode target) {
     for (Element element in _promoteManager.promotedElements) {
       if (_isVariablePotentiallyMutatedIn(element, target)) {
@@ -6545,11 +6237,9 @@
     }
   }
 
-  /**
-   * Given the declared return type of a function, compute the type of the
-   * values which should be returned or yielded as appropriate.  If a type
-   * cannot be computed from the declared return type, return null.
-   */
+  /// Given the declared return type of a function, compute the type of the
+  /// values which should be returned or yielded as appropriate.  If a type
+  /// cannot be computed from the declared return type, return null.
   DartType _computeReturnOrYieldType(DartType declaredType) {
     bool isGenerator = _enclosingFunction.isGenerator;
     bool isAsynchronous = _enclosingFunction.isAsynchronous;
@@ -6578,18 +6268,14 @@
     return declaredType;
   }
 
-  /**
-   * Return a newly created cloner that can be used to clone constant
-   * expressions.
-   */
+  /// Return a newly created cloner that can be used to clone constant
+  /// expressions.
   ConstantAstCloner _createCloner() {
     return new ConstantAstCloner();
   }
 
-  /**
-   * Creates a union of `T | Future<T>`, unless `T` is already a
-   * future-union, in which case it simply returns `T`.
-   */
+  /// Creates a union of `T | Future<T>`, unless `T` is already a
+  /// future-union, in which case it simply returns `T`.
   DartType _createFutureOr(DartType type) {
     if (type.isDartAsyncFutureOr) {
       return type;
@@ -6597,13 +6283,11 @@
     return typeProvider.futureOrType.instantiate([type]);
   }
 
-  /**
-   * The given expression is the expression used to compute the iterator for a
-   * for-each statement. Attempt to compute the type of objects that will be
-   * assigned to the loop variable and return that type. Return `null` if the
-   * type could not be determined. The [iteratorExpression] is the expression
-   * that will return the Iterable being iterated over.
-   */
+  /// The given expression is the expression used to compute the iterator for a
+  /// for-each statement. Attempt to compute the type of objects that will be
+  /// assigned to the loop variable and return that type. Return `null` if the
+  /// type could not be determined. The [iteratorExpression] is the expression
+  /// that will return the Iterable being iterated over.
   DartType _getIteratorElementType(Expression iteratorExpression) {
     DartType expressionType = iteratorExpression.staticType;
     if (expressionType is InterfaceType) {
@@ -6627,13 +6311,11 @@
     return null;
   }
 
-  /**
-   * The given expression is the expression used to compute the stream for an
-   * asynchronous for-each statement. Attempt to compute the type of objects
-   * that will be assigned to the loop variable and return that type.
-   * Return `null` if the type could not be determined. The [streamExpression]
-   * is the expression that will return the stream being iterated over.
-   */
+  /// The given expression is the expression used to compute the stream for an
+  /// asynchronous for-each statement. Attempt to compute the type of objects
+  /// that will be assigned to the loop variable and return that type.
+  /// Return `null` if the type could not be determined. The [streamExpression]
+  /// is the expression that will return the stream being iterated over.
   DartType _getStreamElementType(Expression streamExpression) {
     DartType streamType = streamExpression.staticType;
     if (streamType is InterfaceType) {
@@ -6657,11 +6339,9 @@
     return null;
   }
 
-  /**
-   * Return `true` if the given [parameter] element of the AST being resolved
-   * is resynthesized and is an API-level, not local, so has its initializer
-   * serialized.
-   */
+  /// Return `true` if the given [parameter] element of the AST being resolved
+  /// is resynthesized and is an API-level, not local, so has its initializer
+  /// serialized.
   bool _hasSerializedConstantInitializer(ParameterElement parameter) {
     Element executable = parameter.enclosingElement;
     if (executable is MethodElement ||
@@ -6785,13 +6465,11 @@
     }
   }
 
-  /**
-   * Return `true` if the given expression terminates abruptly (that is, if any expression
-   * following the given expression will not be reached).
-   *
-   * @param expression the expression being tested
-   * @return `true` if the given expression terminates abruptly
-   */
+  /// Return `true` if the given expression terminates abruptly (that is, if any
+  /// expression following the given expression will not be reached).
+  ///
+  /// @param expression the expression being tested
+  /// @return `true` if the given expression terminates abruptly
   bool _isAbruptTerminationExpression(Expression expression) {
     // TODO(brianwilkerson) This needs to be significantly improved. Ideally we
     // would eventually turn this into a method on Expression that returns a
@@ -6801,13 +6479,11 @@
     return expression is ThrowExpression || expression is RethrowExpression;
   }
 
-  /**
-   * Return `true` if the given statement terminates abruptly (that is, if any statement
-   * following the given statement will not be reached).
-   *
-   * @param statement the statement being tested
-   * @return `true` if the given statement terminates abruptly
-   */
+  /// Return `true` if the given statement terminates abruptly (that is, if any
+  /// statement following the given statement will not be reached).
+  ///
+  /// @param statement the statement being tested
+  /// @return `true` if the given statement terminates abruptly
   bool _isAbruptTerminationStatement(Statement statement) {
     // TODO(brianwilkerson) This needs to be significantly improved. Ideally we
     // would eventually turn this into a method on Statement that returns a
@@ -6854,15 +6530,14 @@
     return false;
   }
 
-  /**
-   * Return `true` if the given variable is accessed within a closure in the given
-   * [AstNode] and also mutated somewhere in variable scope. This information is only
-   * available for local variables (including parameters).
-   *
-   * @param variable the variable to check
-   * @param target the [AstNode] to check within
-   * @return `true` if this variable is potentially mutated somewhere in the given ASTNode
-   */
+  /// Return `true` if the given variable is accessed within a closure in the
+  /// given [AstNode] and also mutated somewhere in variable scope. This
+  /// information is only available for local variables (including parameters).
+  ///
+  /// @param variable the variable to check
+  /// @param target the [AstNode] to check within
+  /// @return `true` if this variable is potentially mutated somewhere in the
+  ///         given ASTNode
   bool _isVariableAccessedInClosure(Element variable, AstNode target) {
     _ResolverVisitor_isVariableAccessedInClosure visitor =
         new _ResolverVisitor_isVariableAccessedInClosure(variable);
@@ -6870,14 +6545,14 @@
     return visitor.result;
   }
 
-  /**
-   * Return `true` if the given variable is potentially mutated somewhere in the given
-   * [AstNode]. This information is only available for local variables (including parameters).
-   *
-   * @param variable the variable to check
-   * @param target the [AstNode] to check within
-   * @return `true` if this variable is potentially mutated somewhere in the given ASTNode
-   */
+  /// Return `true` if the given variable is potentially mutated somewhere in
+  /// the given [AstNode]. This information is only available for local
+  /// variables (including parameters).
+  ///
+  /// @param variable the variable to check
+  /// @param target the [AstNode] to check within
+  /// @return `true` if this variable is potentially mutated somewhere in the
+  ///         given ASTNode
   bool _isVariablePotentiallyMutatedIn(Element variable, AstNode target) {
     _ResolverVisitor_isVariablePotentiallyMutatedIn visitor =
         new _ResolverVisitor_isVariablePotentiallyMutatedIn(variable);
@@ -6885,15 +6560,14 @@
     return visitor.result;
   }
 
-  /**
-   * If it is appropriate to do so, promotes the current type of the static element associated with
-   * the given expression with the given type. Generally speaking, it is appropriate if the given
-   * type is more specific than the current type.
-   *
-   * @param expression the expression used to access the static element whose types might be
-   *          promoted
-   * @param potentialType the potential type of the elements
-   */
+  /// If it is appropriate to do so, promotes the current type of the static
+  /// element associated with the given expression with the given type.
+  /// Generally speaking, it is appropriate if the given type is more specific
+  /// than the current type.
+  ///
+  /// @param expression the expression used to access the static element whose
+  ///        types might be promoted
+  /// @param potentialType the potential type of the elements
   void _promote(Expression expression, DartType potentialType) {
     VariableElement element = getPromotionStaticElement(expression);
     if (element != null) {
@@ -6917,9 +6591,7 @@
     }
   }
 
-  /**
-   * Promotes type information using given condition.
-   */
+  /// Promotes type information using given condition.
   void _promoteTypes(Expression condition) {
     if (condition is BinaryExpression) {
       if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) {
@@ -6938,12 +6610,10 @@
     }
   }
 
-  /**
-   * Propagate any type information that results from knowing that the given condition will have
-   * been evaluated to 'false'.
-   *
-   * @param condition the condition that will have evaluated to 'false'
-   */
+  /// Propagate any type information that results from knowing that the given
+  /// condition will have been evaluated to 'false'.
+  ///
+  /// @param condition the condition that will have evaluated to 'false'
   void _propagateFalseState(Expression condition) {
     if (condition is BinaryExpression) {
       if (condition.operator.type == TokenType.BAR_BAR) {
@@ -6959,22 +6629,19 @@
     }
   }
 
-  /**
-   * Propagate any type information that results from knowing that the given expression will have
-   * been evaluated without altering the flow of execution.
-   *
-   * @param expression the expression that will have been evaluated
-   */
+  /// Propagate any type information that results from knowing that the given
+  /// expression will have been evaluated without altering the flow of
+  /// execution.
+  ///
+  /// @param expression the expression that will have been evaluated
   void _propagateState(Expression expression) {
     // TODO(brianwilkerson) Implement this.
   }
 
-  /**
-   * Propagate any type information that results from knowing that the given condition will have
-   * been evaluated to 'true'.
-   *
-   * @param condition the condition that will have evaluated to 'true'
-   */
+  /// Propagate any type information that results from knowing that the given
+  /// condition will have been evaluated to 'true'.
+  ///
+  /// @param condition the condition that will have evaluated to 'true'
   void _propagateTrueState(Expression condition) {
     if (condition is BinaryExpression) {
       if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) {
@@ -6990,20 +6657,18 @@
     }
   }
 
-  /**
-   * Given an [argumentList] and the [parameters] related to the element that
-   * will be invoked using those arguments, compute the list of parameters that
-   * correspond to the list of arguments.
-   *
-   * An error will be reported to [onError] if any of the arguments cannot be
-   * matched to a parameter. onError can be null to ignore the error.
-   *
-   * The flag [reportAsError] should be `true` if a compile-time error should be
-   * reported; or `false` if a compile-time warning should be reported.
-   *
-   * Returns the parameters that correspond to the arguments. If no parameter
-   * matched an argument, that position will be `null` in the list.
-   */
+  /// Given an [argumentList] and the [parameters] related to the element that
+  /// will be invoked using those arguments, compute the list of parameters that
+  /// correspond to the list of arguments.
+  ///
+  /// An error will be reported to [onError] if any of the arguments cannot be
+  /// matched to a parameter. onError can be null to ignore the error.
+  ///
+  /// The flag [reportAsError] should be `true` if a compile-time error should
+  /// be reported; or `false` if a compile-time warning should be reported.
+  ///
+  /// Returns the parameters that correspond to the arguments. If no parameter
+  /// matched an argument, that position will be `null` in the list.
   static List<ParameterElement> resolveArgumentsToParameters(
       ArgumentList argumentList,
       List<ParameterElement> parameters,
@@ -7105,69 +6770,49 @@
   }
 }
 
-/**
- * The abstract class `ScopedVisitor` maintains name and label scopes as an AST structure is
- * being visited.
- */
+/// The abstract class `ScopedVisitor` maintains name and label scopes as an AST
+/// structure is being visited.
 abstract class ScopedVisitor extends UnifyingAstVisitor<Object> {
-  /**
-   * The element for the library containing the compilation unit being visited.
-   */
+  /// The element for the library containing the compilation unit being visited.
   final LibraryElement definingLibrary;
 
-  /**
-   * The source representing the compilation unit being visited.
-   */
+  /// The source representing the compilation unit being visited.
   final Source source;
 
-  /**
-   * The object used to access the types from the core library.
-   */
+  /// The object used to access the types from the core library.
   final TypeProvider typeProvider;
 
-  /**
-   * The error reporter that will be informed of any errors that are found
-   * during resolution.
-   */
+  /// The error reporter that will be informed of any errors that are found
+  /// during resolution.
   final ErrorReporter errorReporter;
 
-  /**
-   * The scope used to resolve identifiers.
-   */
+  /// The scope used to resolve identifiers.
   Scope nameScope;
 
-  /**
-   * The scope used to resolve unlabeled `break` and `continue` statements.
-   */
+  /// The scope used to resolve unlabeled `break` and `continue` statements.
   ImplicitLabelScope _implicitLabelScope = ImplicitLabelScope.ROOT;
 
-  /**
-   * The scope used to resolve labels for `break` and `continue` statements, or
-   * `null` if no labels have been defined in the current context.
-   */
+  /// The scope used to resolve labels for `break` and `continue` statements, or
+  /// `null` if no labels have been defined in the current context.
   LabelScope labelScope;
 
-  /**
-   * The class containing the AST nodes being visited,
-   * or `null` if we are not in the scope of a class.
-   */
+  /// The class containing the AST nodes being visited,
+  /// or `null` if we are not in the scope of a class.
   ClassElement enclosingClass;
 
-  /**
-   * Initialize a newly created visitor to resolve the nodes in a compilation
-   * unit.
-   *
-   * [definingLibrary] is the element for the library containing the
-   * compilation unit being visited.
-   * [source] is the source representing the compilation unit being visited.
-   * [typeProvider] is the object used to access the types from the core
-   * library.
-   * [errorListener] is the error listener that will be informed of any errors
-   * that are found during resolution.
-   * [nameScope] is the scope used to resolve identifiers in the node that will
-   * first be visited.  If `null` or unspecified, a new [LibraryScope] will be
-   * created based on [definingLibrary] and [typeProvider].
-   */
+  /// Initialize a newly created visitor to resolve the nodes in a compilation
+  /// unit.
+  ///
+  /// [definingLibrary] is the element for the library containing the
+  /// compilation unit being visited.
+  /// [source] is the source representing the compilation unit being visited.
+  /// [typeProvider] is the object used to access the types from the core
+  /// library.
+  /// [errorListener] is the error listener that will be informed of any errors
+  /// that are found during resolution.
+  /// [nameScope] is the scope used to resolve identifiers in the node that will
+  /// first be visited.  If `null` or unspecified, a new [LibraryScope] will be
+  /// created based on [definingLibrary] and [typeProvider].
   ScopedVisitor(this.definingLibrary, Source source, this.typeProvider,
       AnalysisErrorListener errorListener,
       {Scope nameScope})
@@ -7180,27 +6825,21 @@
     }
   }
 
-  /**
-   * Return the implicit label scope in which the current node is being
-   * resolved.
-   */
+  /// Return the implicit label scope in which the current node is being
+  /// resolved.
   ImplicitLabelScope get implicitLabelScope => _implicitLabelScope;
 
-  /**
-   * Replaces the current [Scope] with the enclosing [Scope].
-   *
-   * @return the enclosing [Scope].
-   */
+  /// Replaces the current [Scope] with the enclosing [Scope].
+  ///
+  /// @return the enclosing [Scope].
   Scope popNameScope() {
     nameScope = nameScope.enclosingScope;
     return nameScope;
   }
 
-  /**
-   * Pushes a new [Scope] into the visitor.
-   *
-   * @return the new [Scope].
-   */
+  /// Pushes a new [Scope] into the visitor.
+  ///
+  /// @return the new [Scope].
   Scope pushNameScope() {
     Scope newScope = new EnclosedScope(nameScope);
     nameScope = newScope;
@@ -7429,13 +7068,11 @@
     return null;
   }
 
-  /**
-   * Visit the given statement after it's scope has been created. This replaces the normal call to
-   * the inherited visit method so that ResolverVisitor can intervene when type propagation is
-   * enabled.
-   *
-   * @param node the statement to be visited
-   */
+  /// Visit the given statement after it's scope has been created. This replaces
+  /// the normal call to the inherited visit method so that ResolverVisitor can
+  /// intervene when type propagation is enabled.
+  ///
+  /// @param node the statement to be visited
   void visitForEachStatementInScope(ForEachStatement node) {
     //
     // We visit the iterator before the loop variable because the loop variable
@@ -7479,13 +7116,11 @@
     return null;
   }
 
-  /**
-   * Visit the given statement after it's scope has been created. This replaces the normal call to
-   * the inherited visit method so that ResolverVisitor can intervene when type propagation is
-   * enabled.
-   *
-   * @param node the statement to be visited
-   */
+  /// Visit the given statement after it's scope has been created. This replaces
+  /// the normal call to the inherited visit method so that ResolverVisitor can
+  /// intervene when type propagation is enabled.
+  ///
+  /// @param node the statement to be visited
   void visitForStatementInScope(ForStatement node) {
     node.variables?.accept(this);
     node.initialization?.accept(this);
@@ -7732,12 +7367,11 @@
     node.members.accept(this);
   }
 
-  /**
-   * Visit the given statement after it's scope has been created. This is used by ResolverVisitor to
-   * correctly visit the 'then' and 'else' statements of an 'if' statement.
-   *
-   * @param node the statement to be visited
-   */
+  /// Visit the given statement after it's scope has been created. This is used
+  /// by ResolverVisitor to correctly visit the 'then' and 'else' statements of
+  /// an 'if' statement.
+  ///
+  /// @param node the statement to be visited
   void visitStatementInScope(Statement node) {
     if (node is Block) {
       // Don't create a scope around a block because the block will create it's
@@ -7831,12 +7465,10 @@
     return null;
   }
 
-  /**
-   * Add scopes for each of the given labels.
-   *
-   * @param labels the labels for which new scopes are to be added
-   * @return the scope that was in effect before the new scopes were added
-   */
+  /// Add scopes for each of the given labels.
+  ///
+  /// @param labels the labels for which new scopes are to be added
+  /// @return the scope that was in effect before the new scopes were added
   LabelScope _addScopesFor(NodeList<Label> labels, AstNode node) {
     LabelScope outerScope = labelScope;
     for (Label label in labels) {
@@ -7849,38 +7481,30 @@
   }
 }
 
-/**
- * Instances of the class `ToDoFinder` find to-do comments in Dart code.
- */
+/// Instances of the class `ToDoFinder` find to-do comments in Dart code.
 class ToDoFinder {
-  /**
-   * The error reporter by which to-do comments will be reported.
-   */
+  /// The error reporter by which to-do comments will be reported.
   final ErrorReporter _errorReporter;
 
-  /**
-   * Initialize a newly created to-do finder to report to-do comments to the given reporter.
-   *
-   * @param errorReporter the error reporter by which to-do comments will be reported
-   */
+  /// Initialize a newly created to-do finder to report to-do comments to the
+  /// given reporter.
+  ///
+  /// @param errorReporter the error reporter by which to-do comments will be
+  ///        reported
   ToDoFinder(this._errorReporter);
 
-  /**
-   * Search the comments in the given compilation unit for to-do comments and report an error for
-   * each.
-   *
-   * @param unit the compilation unit containing the to-do comments
-   */
+  /// Search the comments in the given compilation unit for to-do comments and
+  /// report an error for each.
+  ///
+  /// @param unit the compilation unit containing the to-do comments
   void findIn(CompilationUnit unit) {
     _gatherTodoComments(unit.beginToken);
   }
 
-  /**
-   * Search the comment tokens reachable from the given token and create errors for each to-do
-   * comment.
-   *
-   * @param token the head of the list of tokens being searched
-   */
+  /// Search the comment tokens reachable from the given token and create errors
+  /// for each to-do comment.
+  ///
+  /// @param token the head of the list of tokens being searched
   void _gatherTodoComments(Token token) {
     while (token != null && token.type != TokenType.EOF) {
       Token commentToken = token.precedingComments;
@@ -7895,11 +7519,10 @@
     }
   }
 
-  /**
-   * Look for user defined tasks in comments and convert them into info level analysis issues.
-   *
-   * @param commentToken the comment token to analyze
-   */
+  /// Look for user defined tasks in comments and convert them into info level
+  /// analysis issues.
+  ///
+  /// @param commentToken the comment token to analyze
   void _scrapeTodoComment(Token commentToken) {
     Iterable<Match> matches =
         TodoCode.TODO_REGEX.allMatches(commentToken.lexeme);
@@ -7912,11 +7535,9 @@
   }
 }
 
-/**
- * Helper for resolving types.
- *
- * The client must set [nameScope] before calling [resolveTypeName].
- */
+/// Helper for resolving types.
+///
+/// The client must set [nameScope] before calling [resolveTypeName].
 class TypeNameResolver {
   final TypeSystem typeSystem;
   final DartType dynamicType;
@@ -7925,32 +7546,37 @@
   final Source source;
   final AnalysisErrorListener errorListener;
 
+  /// Indicates whether bare typenames in "with" clauses should have their type
+  /// inferred type arguments loaded from the element model.
+  ///
+  /// This is needed for mixin type inference, but is incompatible with the old
+  /// task model.
+  final bool shouldUseWithClauseInferredTypes;
+
   Scope nameScope;
 
   TypeNameResolver(this.typeSystem, TypeProvider typeProvider,
-      this.definingLibrary, this.source, this.errorListener)
+      this.definingLibrary, this.source, this.errorListener,
+      {this.shouldUseWithClauseInferredTypes: true})
       : dynamicType = typeProvider.dynamicType,
         undefinedType = typeProvider.undefinedType;
 
-  /**
-   * Report an error with the given error code and arguments.
-   *
-   * @param errorCode the error code of the error to be reported
-   * @param node the node specifying the location of the error
-   * @param arguments the arguments to the error, used to compose the error message
-   */
+  /// Report an error with the given error code and arguments.
+  ///
+  /// @param errorCode the error code of the error to be reported
+  /// @param node the node specifying the location of the error
+  /// @param arguments the arguments to the error, used to compose the error
+  ///        message
   void reportErrorForNode(ErrorCode errorCode, AstNode node,
       [List<Object> arguments]) {
     errorListener.onError(new AnalysisError(
         source, node.offset, node.length, errorCode, arguments));
   }
 
-  /**
-   * Resolve the given [TypeName] - set its element and static type. Only the
-   * given [node] is resolved, all its children must be already resolved.
-   *
-   * The client must set [nameScope] before calling [resolveTypeName].
-   */
+  /// Resolve the given [TypeName] - set its element and static type. Only the
+  /// given [node] is resolved, all its children must be already resolved.
+  ///
+  /// The client must set [nameScope] before calling [resolveTypeName].
   void resolveTypeName(TypeName node) {
     Identifier typeName = node.name;
     _setElement(typeName, null); // Clear old Elements from previous run.
@@ -8213,15 +7839,41 @@
         }
       }
     }
-    typeName.staticType = type;
-    node.type = type;
+    DartType refinedType;
+    if (shouldUseWithClauseInferredTypes) {
+      var parent = node.parent;
+      if (parent is WithClause &&
+          type is InterfaceType &&
+          type.element.typeParameters.isNotEmpty) {
+        // Get the (possibly inferred) mixin type from the element model.
+        var grandParent = parent.parent;
+        if (grandParent is ClassDeclaration) {
+          refinedType =
+              _getInferredMixinType(grandParent.declaredElement, type.element);
+        } else if (grandParent is ClassTypeAlias) {
+          refinedType =
+              _getInferredMixinType(grandParent.declaredElement, type.element);
+        } else {
+          assert(false, 'Unexpected context for "with" clause');
+        }
+      }
+    }
+    refinedType ??= type;
+    typeName.staticType = refinedType;
+    node.type = refinedType;
   }
 
-  /**
-   * The number of type arguments in the given [typeName] does not match the
-   * number of parameters in the corresponding class element. Return the error
-   * code that should be used to report this error.
-   */
+  DartType _getInferredMixinType(
+      ClassElement classElement, ClassElement mixinElement) {
+    for (var candidateMixin in classElement.mixins) {
+      if (candidateMixin.element == mixinElement) return candidateMixin;
+    }
+    return null; // Not found
+  }
+
+  /// The number of type arguments in the given [typeName] does not match the
+  /// number of parameters in the corresponding class element. Return the error
+  /// code that should be used to report this error.
   ErrorCode _getInvalidTypeParametersErrorCode(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is ConstructorName) {
@@ -8237,9 +7889,7 @@
     return StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS;
   }
 
-  /**
-   * Checks if the given [typeName] is the target in a redirected constructor.
-   */
+  /// Checks if the given [typeName] is the target in a redirected constructor.
   RedirectingConstructorKind _getRedirectingConstructorKind(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is ConstructorName) {
@@ -8256,9 +7906,7 @@
     return null;
   }
 
-  /**
-   * Return the type represented by the given type [annotation].
-   */
+  /// Return the type represented by the given type [annotation].
   DartType _getType(TypeAnnotation annotation) {
     DartType type = annotation.type;
     if (type == null) {
@@ -8267,12 +7915,10 @@
     return type;
   }
 
-  /**
-   * Returns the simple identifier of the given (may be qualified) type name.
-   *
-   * @param typeName the (may be qualified) qualified type name
-   * @return the simple identifier of the given (may be qualified) type name.
-   */
+  /// Returns the simple identifier of the given (may be qualified) type name.
+  ///
+  /// @param typeName the (may be qualified) qualified type name
+  /// @return the simple identifier of the given (may be qualified) type name.
   SimpleIdentifier _getTypeSimpleIdentifier(Identifier typeName) {
     if (typeName is SimpleIdentifier) {
       return typeName;
@@ -8291,13 +7937,13 @@
     }
   }
 
-  /**
-   * Given the multiple elements to which a single name could potentially be resolved, return the
-   * single interface type that should be used, or `null` if there is no clear choice.
-   *
-   * @param elements the elements to which a single name could potentially be resolved
-   * @return the single interface type that should be used for the type name
-   */
+  /// Given the multiple elements to which a single name could potentially be
+  /// resolved, return the single interface type that should be used, or `null`
+  /// if there is no clear choice.
+  ///
+  /// @param elements the elements to which a single name could potentially be
+  ///        resolved
+  /// @return the single interface type that should be used for the type name
   InterfaceType _getTypeWhenMultiplyDefined(List<Element> elements) {
     InterfaceType type = null;
     int length = elements.length;
@@ -8313,11 +7959,9 @@
     return type;
   }
 
-  /**
-   * If the [node] is the type name in a redirected factory constructor,
-   * infer type arguments using the enclosing class declaration. Return `null`
-   * otherwise.
-   */
+  /// If the [node] is the type name in a redirected factory constructor,
+  /// infer type arguments using the enclosing class declaration. Return `null`
+  /// otherwise.
   DartType _inferTypeArgumentsForRedirectedConstructor(
       TypeName node, DartType type) {
     AstNode constructorName = node.parent;
@@ -8341,9 +7985,7 @@
     return null;
   }
 
-  /**
-   * Checks if the given [typeName] is used as the type in an as expression.
-   */
+  /// Checks if the given [typeName] is used as the type in an as expression.
   bool _isTypeNameInAsExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is AsExpression) {
@@ -8352,10 +7994,8 @@
     return false;
   }
 
-  /**
-   * Checks if the given [typeName] is used as the exception type in a catch
-   * clause.
-   */
+  /// Checks if the given [typeName] is used as the exception type in a catch
+  /// clause.
   bool _isTypeNameInCatchClause(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is CatchClause) {
@@ -8364,10 +8004,8 @@
     return false;
   }
 
-  /**
-   * Checks if the given [typeName] is used as the type in an instance creation
-   * expression.
-   */
+  /// Checks if the given [typeName] is used as the type in an instance creation
+  /// expression.
   bool _isTypeNameInInstanceCreationExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is ConstructorName &&
@@ -8377,9 +8015,7 @@
     return false;
   }
 
-  /**
-   * Checks if the given [typeName] is used as the type in an is expression.
-   */
+  /// Checks if the given [typeName] is used as the type in an is expression.
   bool _isTypeNameInIsExpression(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is IsExpression) {
@@ -8388,19 +8024,15 @@
     return false;
   }
 
-  /**
-   * Checks if the given [typeName] used in a type argument list.
-   */
+  /// Checks if the given [typeName] used in a type argument list.
   bool _isTypeNameInTypeArgumentList(TypeName typeName) =>
       typeName.parent is TypeArgumentList;
 
-  /**
-   * Records the new Element for a TypeName's Identifier.
-   *
-   * A null may be passed in to indicate that the element can't be resolved.
-   * (During a re-run of a task, it's important to clear any previous value
-   * of the element.)
-   */
+  /// Records the new Element for a TypeName's Identifier.
+  ///
+  /// A null may be passed in to indicate that the element can't be resolved.
+  /// (During a re-run of a task, it's important to clear any previous value
+  /// of the element.)
   void _setElement(Identifier typeName, Element element) {
     if (typeName is SimpleIdentifier) {
       typeName.staticElement = element;
@@ -8411,17 +8043,14 @@
     }
   }
 
-  /**
-   * Return `true` if the name of the given [typeName] is an built-in identifier.
-   */
+  /// Return `true` if the name of the given [typeName] is an built-in
+  /// identifier.
   static bool _isBuiltInIdentifier(TypeName typeName) {
     Token token = typeName.name.beginToken;
     return token.type.isKeyword;
   }
 
-  /**
-   * @return `true` if given [typeName] is used as a type annotation.
-   */
+  /// @return `true` if given [typeName] is used as a type annotation.
   static bool _isTypeAnnotation(TypeName typeName) {
     AstNode parent = typeName.parent;
     if (parent is VariableDeclarationList) {
@@ -8435,21 +8064,15 @@
   }
 }
 
-/**
- * Instances of the class `TypeOverrideManager` manage the ability to override the type of an
- * element within a given context.
- */
+/// Instances of the class `TypeOverrideManager` manage the ability to override
+/// the type of an element within a given context.
 class TypeOverrideManager {
-  /**
-   * The current override scope, or `null` if no scope has been entered.
-   */
+  /// The current override scope, or `null` if no scope has been entered.
   TypeOverrideManager_TypeOverrideScope currentScope;
 
-  /**
-   * Apply a set of overrides that were previously captured.
-   *
-   * @param overrides the overrides to be applied
-   */
+  /// Apply a set of overrides that were previously captured.
+  ///
+  /// @param overrides the overrides to be applied
   void applyOverrides(Map<VariableElement, DartType> overrides) {
     if (currentScope == null) {
       throw new StateError("Cannot apply overrides without a scope");
@@ -8457,12 +8080,10 @@
     currentScope.applyOverrides(overrides);
   }
 
-  /**
-   * Return a table mapping the elements whose type is overridden in the current scope to the
-   * overriding type.
-   *
-   * @return the overrides in the current scope
-   */
+  /// Return a table mapping the elements whose type is overridden in the
+  /// current scope to the overriding type.
+  ///
+  /// @return the overrides in the current scope
   Map<VariableElement, DartType> captureLocalOverrides() {
     if (currentScope == null) {
       throw new StateError("Cannot capture local overrides without a scope");
@@ -8470,13 +8091,12 @@
     return currentScope.captureLocalOverrides();
   }
 
-  /**
-   * Return a map from the elements for the variables in the given list that have their types
-   * overridden to the overriding type.
-   *
-   * @param variableList the list of variables whose overriding types are to be captured
-   * @return a table mapping elements to their overriding types
-   */
+  /// Return a map from the elements for the variables in the given list that
+  /// have their types overridden to the overriding type.
+  ///
+  /// @param variableList the list of variables whose overriding types are to be
+  ///        captured
+  /// @return a table mapping elements to their overriding types
   Map<VariableElement, DartType> captureOverrides(
       VariableDeclarationList variableList) {
     if (currentScope == null) {
@@ -8485,16 +8105,12 @@
     return currentScope.captureOverrides(variableList);
   }
 
-  /**
-   * Enter a new override scope.
-   */
+  /// Enter a new override scope.
   void enterScope() {
     currentScope = new TypeOverrideManager_TypeOverrideScope(currentScope);
   }
 
-  /**
-   * Exit the current override scope.
-   */
+  /// Exit the current override scope.
   void exitScope() {
     if (currentScope == null) {
       throw new StateError("No scope to exit");
@@ -8502,25 +8118,22 @@
     currentScope = currentScope._outerScope;
   }
 
-  /**
-   * Return the best type information available for the given element. If the type of the element
-   * has been overridden, then return the overriding type. Otherwise, return the static type.
-   *
-   * @param element the element for which type information is to be returned
-   * @return the best type information available for the given element
-   */
+  /// Return the best type information available for the given element. If the
+  /// type of the element has been overridden, then return the overriding type.
+  /// Otherwise, return the static type.
+  ///
+  /// @param element the element for which type information is to be returned
+  /// @return the best type information available for the given element
   DartType getBestType(VariableElement element) {
     DartType bestType = getType(element);
     return bestType ?? element.type;
   }
 
-  /**
-   * Return the overridden type of the given element, or `null` if the type of the element has
-   * not been overridden.
-   *
-   * @param element the element whose type might have been overridden
-   * @return the overridden type of the given element
-   */
+  /// Return the overridden type of the given element, or `null` if the type of
+  /// the element has not been overridden.
+  ///
+  /// @param element the element whose type might have been overridden
+  /// @return the overridden type of the given element
   DartType getType(Element element) {
     if (currentScope == null) {
       return null;
@@ -8528,10 +8141,8 @@
     return currentScope.getType(element);
   }
 
-  /**
-   * Update overrides assuming [perBranchOverrides] is the collection of
-   * per-branch overrides for *all* branches flowing into a join point.
-   */
+  /// Update overrides assuming [perBranchOverrides] is the collection of
+  /// per-branch overrides for *all* branches flowing into a join point.
   void mergeOverrides(List<Map<VariableElement, DartType>> perBranchOverrides) {
     int length = perBranchOverrides.length;
     for (int i = 0; i < length; i++) {
@@ -8545,12 +8156,10 @@
     }
   }
 
-  /**
-   * Set the overridden type of the given element to the given type
-   *
-   * @param element the element whose type might have been overridden
-   * @param type the overridden type of the given element
-   */
+  /// Set the overridden type of the given element to the given type
+  ///
+  /// @param element the element whose type might have been overridden
+  /// @param type the overridden type of the given element
   void setType(VariableElement element, DartType type) {
     if (currentScope == null) {
       throw new StateError("Cannot override without a scope");
@@ -8559,53 +8168,40 @@
   }
 }
 
-/**
- * Instances of the class `TypeOverrideScope` represent a scope in which the types of
- * elements can be overridden.
- */
+/// Instances of the class `TypeOverrideScope` represent a scope in which the
+/// types of elements can be overridden.
 class TypeOverrideManager_TypeOverrideScope {
-  /**
-   * The outer scope in which types might be overridden.
-   */
+  /// The outer scope in which types might be overridden.
   final TypeOverrideManager_TypeOverrideScope _outerScope;
 
-  /**
-   * A table mapping elements to the overridden type of that element.
-   */
+  /// A table mapping elements to the overridden type of that element.
   Map<VariableElement, DartType> _overriddenTypes =
       new HashMap<VariableElement, DartType>();
 
-  /**
-   * Initialize a newly created scope to be an empty child of the given scope.
-   *
-   * @param outerScope the outer scope in which types might be overridden
-   */
+  /// Initialize a newly created scope to be an empty child of the given scope.
+  ///
+  /// @param outerScope the outer scope in which types might be overridden
   TypeOverrideManager_TypeOverrideScope(this._outerScope);
 
-  /**
-   * Apply a set of overrides that were previously captured.
-   *
-   * @param overrides the overrides to be applied
-   */
+  /// Apply a set of overrides that were previously captured.
+  ///
+  /// @param overrides the overrides to be applied
   void applyOverrides(Map<VariableElement, DartType> overrides) {
     _overriddenTypes.addAll(overrides);
   }
 
-  /**
-   * Return a table mapping the elements whose type is overridden in the current scope to the
-   * overriding type.
-   *
-   * @return the overrides in the current scope
-   */
+  /// Return a table mapping the elements whose type is overridden in the
+  /// current scope to the overriding type.
+  ///
+  /// @return the overrides in the current scope
   Map<VariableElement, DartType> captureLocalOverrides() => _overriddenTypes;
 
-  /**
-   * Return a map from the elements for the variables in the given list that have their types
-   * overridden to the overriding type.
-   *
-   * @param variableList the list of variables whose overriding types are to be captured
-   * @return a table mapping elements to their overriding types
-   */
+  /// Return a map from the elements for the variables in the given list that
+  /// have their types overridden to the overriding type.
+  ///
+  /// @param variableList the list of variables whose overriding types are to be
+  ///        captured
+  /// @return a table mapping elements to their overriding types
   Map<VariableElement, DartType> captureOverrides(
       VariableDeclarationList variableList) {
     Map<VariableElement, DartType> overrides =
@@ -8624,13 +8220,11 @@
     return overrides;
   }
 
-  /**
-   * Return the overridden type of the given element, or `null` if the type of the element
-   * has not been overridden.
-   *
-   * @param element the element whose type might have been overridden
-   * @return the overridden type of the given element
-   */
+  /// Return the overridden type of the given element, or `null` if the type of
+  /// the element has not been overridden.
+  ///
+  /// @param element the element whose type might have been overridden
+  /// @return the overridden type of the given element
   DartType getType(Element element) {
     Element nonAccessor =
         element is PropertyAccessorElement ? element.variable : element;
@@ -8641,28 +8235,22 @@
     return type ?? _outerScope?.getType(element);
   }
 
-  /**
-   * Clears the overridden type of the given [element].
-   */
+  /// Clears the overridden type of the given [element].
   void resetType(VariableElement element) {
     _overriddenTypes[element] = null;
   }
 
-  /**
-   * Set the overridden type of the given element to the given type
-   *
-   * @param element the element whose type might have been overridden
-   * @param type the overridden type of the given element
-   */
+  /// Set the overridden type of the given element to the given type
+  ///
+  /// @param element the element whose type might have been overridden
+  /// @param type the overridden type of the given element
   void setType(VariableElement element, DartType type) {
     _overriddenTypes[element] = type;
   }
 }
 
-/**
- * This class resolves bounds of type parameters of classes, class and function
- * type aliases.
- */
+/// This class resolves bounds of type parameters of classes, class and function
+/// type aliases.
 class TypeParameterBoundsResolver {
   final TypeSystem typeSystem;
   final LibraryElement library;
@@ -8678,10 +8266,8 @@
         typeNameResolver = new TypeNameResolver(typeSystem,
             typeSystem.typeProvider, library, source, errorListener);
 
-  /**
-   * Resolve bounds of type parameters of classes, class and function type
-   * aliases.
-   */
+  /// Resolve bounds of type parameters of classes, class and function type
+  /// aliases.
   void resolveTypeBounds(CompilationUnit unit) {
     for (CompilationUnitMember unitMember in unit.declarations) {
       if (unitMember is ClassDeclaration) {
@@ -8699,6 +8285,11 @@
             unitMember.typeParameters,
             () => new FunctionTypeScope(
                 libraryScope, unitMember.declaredElement));
+      } else if (unitMember is GenericTypeAlias) {
+        _resolveTypeParameters(
+            unitMember.typeParameters,
+            () => new FunctionTypeScope(
+                libraryScope, unitMember.declaredElement));
       }
     }
   }
@@ -8778,31 +8369,22 @@
   }
 }
 
-/**
- * Instances of the class `TypePromotionManager` manage the ability to promote types of local
- * variables and formal parameters from their declared types based on control flow.
- */
+/// Instances of the class `TypePromotionManager` manage the ability to promote
+/// types of local variables and formal parameters from their declared types
+/// based on control flow.
 class TypePromotionManager {
-  /**
-   * The current promotion scope, or `null` if no scope has been entered.
-   */
+  /// The current promotion scope, or `null` if no scope has been entered.
   TypePromotionManager_TypePromoteScope currentScope;
 
-  /**
-   * Returns the elements with promoted types.
-   */
+  /// Returns the elements with promoted types.
   Iterable<Element> get promotedElements => currentScope.promotedElements;
 
-  /**
-   * Enter a new promotions scope.
-   */
+  /// Enter a new promotions scope.
   void enterScope() {
     currentScope = new TypePromotionManager_TypePromoteScope(currentScope);
   }
 
-  /**
-   * Exit the current promotion scope.
-   */
+  /// Exit the current promotion scope.
   void exitScope() {
     if (currentScope == null) {
       throw new StateError("No scope to exit");
@@ -8810,24 +8392,18 @@
     currentScope = currentScope._outerScope;
   }
 
-  /**
-   * Return the static type of the given [variable] - declared or promoted.
-   */
+  /// Return the static type of the given [variable] - declared or promoted.
   DartType getStaticType(VariableElement variable) =>
       getType(variable) ?? variable.type;
 
-  /**
-   * Return the promoted type of the given [element], or `null` if the type of
-   * the element has not been promoted.
-   */
+  /// Return the promoted type of the given [element], or `null` if the type of
+  /// the element has not been promoted.
   DartType getType(Element element) => currentScope?.getType(element);
 
-  /**
-   * Set the promoted type of the given element to the given type.
-   *
-   * @param element the element whose type might have been promoted
-   * @param type the promoted type of the given element
-   */
+  /// Set the promoted type of the given element to the given type.
+  ///
+  /// @param element the element whose type might have been promoted
+  /// @param type the promoted type of the given element
   void setType(Element element, DartType type) {
     if (currentScope == null) {
       throw new StateError("Cannot promote without a scope");
@@ -8836,40 +8412,28 @@
   }
 }
 
-/**
- * Instances of the class `TypePromoteScope` represent a scope in which the types of
- * elements can be promoted.
- */
+/// Instances of the class `TypePromoteScope` represent a scope in which the
+/// types of elements can be promoted.
 class TypePromotionManager_TypePromoteScope {
-  /**
-   * The outer scope in which types might be promoter.
-   */
+  /// The outer scope in which types might be promoter.
   final TypePromotionManager_TypePromoteScope _outerScope;
 
-  /**
-   * A table mapping elements to the promoted type of that element.
-   */
+  /// A table mapping elements to the promoted type of that element.
   Map<Element, DartType> _promotedTypes = new HashMap<Element, DartType>();
 
-  /**
-   * Initialize a newly created scope to be an empty child of the given scope.
-   *
-   * @param outerScope the outer scope in which types might be promoted
-   */
+  /// Initialize a newly created scope to be an empty child of the given scope.
+  ///
+  /// @param outerScope the outer scope in which types might be promoted
   TypePromotionManager_TypePromoteScope(this._outerScope);
 
-  /**
-   * Returns the elements with promoted types.
-   */
+  /// Returns the elements with promoted types.
   Iterable<Element> get promotedElements => _promotedTypes.keys.toSet();
 
-  /**
-   * Return the promoted type of the given element, or `null` if the type of the element has
-   * not been promoted.
-   *
-   * @param element the element whose type might have been promoted
-   * @return the promoted type of the given element
-   */
+  /// Return the promoted type of the given element, or `null` if the type of
+  /// the element has not been promoted.
+  ///
+  /// @param element the element whose type might have been promoted
+  /// @return the promoted type of the given element
   DartType getType(Element element) {
     DartType type = _promotedTypes[element];
     if (type == null && element is PropertyAccessorElement) {
@@ -8883,186 +8447,118 @@
     return null;
   }
 
-  /**
-   * Set the promoted type of the given element to the given type.
-   *
-   * @param element the element whose type might have been promoted
-   * @param type the promoted type of the given element
-   */
+  /// Set the promoted type of the given element to the given type.
+  ///
+  /// @param element the element whose type might have been promoted
+  /// @param type the promoted type of the given element
   void setType(Element element, DartType type) {
     _promotedTypes[element] = type;
   }
 }
 
-/**
- * The interface `TypeProvider` defines the behavior of objects that provide access to types
- * defined by the language.
- */
+/// The interface `TypeProvider` defines the behavior of objects that provide
+/// access to types defined by the language.
 abstract class TypeProvider {
-  /**
-   * Return the type representing the built-in type 'bool'.
-   */
+  /// Return the type representing the built-in type 'bool'.
   InterfaceType get boolType;
 
-  /**
-   * Return the type representing the type 'bottom'.
-   */
+  /// Return the type representing the type 'bottom'.
   DartType get bottomType;
 
-  /**
-   * Return the type representing the built-in type 'Deprecated'.
-   */
+  /// Return the type representing the built-in type 'Deprecated'.
   InterfaceType get deprecatedType;
 
-  /**
-   * Return the type representing the built-in type 'double'.
-   */
+  /// Return the type representing the built-in type 'double'.
   InterfaceType get doubleType;
 
-  /**
-   * Return the type representing the built-in type 'dynamic'.
-   */
+  /// Return the type representing the built-in type 'dynamic'.
   DartType get dynamicType;
 
-  /**
-   * Return the type representing the built-in type 'Function'.
-   */
+  /// Return the type representing the built-in type 'Function'.
   InterfaceType get functionType;
 
-  /**
-   * Return the type representing 'Future<dynamic>'.
-   */
+  /// Return the type representing 'Future<dynamic>'.
   InterfaceType get futureDynamicType;
 
-  /**
-   * Return the type representing 'Future<Null>'.
-   */
+  /// Return the type representing 'Future<Null>'.
   InterfaceType get futureNullType;
 
-  /**
-   * Return the type representing 'FutureOr<Null>'.
-   */
+  /// Return the type representing 'FutureOr<Null>'.
   InterfaceType get futureOrNullType;
 
-  /**
-   * Return the type representing the built-in type 'FutureOr'.
-   */
+  /// Return the type representing the built-in type 'FutureOr'.
   InterfaceType get futureOrType;
 
-  /**
-   * Return the type representing the built-in type 'Future'.
-   */
+  /// Return the type representing the built-in type 'Future'.
   InterfaceType get futureType;
 
-  /**
-   * Return the type representing the built-in type 'int'.
-   */
+  /// Return the type representing the built-in type 'int'.
   InterfaceType get intType;
 
-  /**
-   * Return the type representing the type 'Iterable<dynamic>'.
-   */
+  /// Return the type representing the type 'Iterable<dynamic>'.
   InterfaceType get iterableDynamicType;
 
-  /**
-   * Return the type representing the built-in type 'Iterable'.
-   */
+  /// Return the type representing the built-in type 'Iterable'.
   InterfaceType get iterableType;
 
-  /**
-   * Return the type representing the built-in type 'List'.
-   */
+  /// Return the type representing the built-in type 'List'.
   InterfaceType get listType;
 
-  /**
-   * Return the type representing the built-in type 'Map'.
-   */
+  /// Return the type representing the built-in type 'Map'.
   InterfaceType get mapType;
 
-  /**
-   * Return a list containing all of the types that cannot be either extended or
-   * implemented.
-   */
+  /// Return a list containing all of the types that cannot be either extended
+  /// or implemented.
   List<InterfaceType> get nonSubtypableTypes;
 
-  /**
-   * Return a [DartObjectImpl] representing the `null` object.
-   */
+  /// Return a [DartObjectImpl] representing the `null` object.
   DartObjectImpl get nullObject;
 
-  /**
-   * Return the type representing the built-in type 'Null'.
-   */
+  /// Return the type representing the built-in type 'Null'.
   InterfaceType get nullType;
 
-  /**
-   * Return the type representing the built-in type 'num'.
-   */
+  /// Return the type representing the built-in type 'num'.
   InterfaceType get numType;
 
-  /**
-   * Return the type representing the built-in type 'Object'.
-   */
+  /// Return the type representing the built-in type 'Object'.
   InterfaceType get objectType;
 
-  /**
-   * Return the type representing the built-in type 'StackTrace'.
-   */
+  /// Return the type representing the built-in type 'StackTrace'.
   InterfaceType get stackTraceType;
 
-  /**
-   * Return the type representing 'Stream<dynamic>'.
-   */
+  /// Return the type representing 'Stream<dynamic>'.
   InterfaceType get streamDynamicType;
 
-  /**
-   * Return the type representing the built-in type 'Stream'.
-   */
+  /// Return the type representing the built-in type 'Stream'.
   InterfaceType get streamType;
 
-  /**
-   * Return the type representing the built-in type 'String'.
-   */
+  /// Return the type representing the built-in type 'String'.
   InterfaceType get stringType;
 
-  /**
-   * Return the type representing the built-in type 'Symbol'.
-   */
+  /// Return the type representing the built-in type 'Symbol'.
   InterfaceType get symbolType;
 
-  /**
-   * Return the type representing the built-in type 'Type'.
-   */
+  /// Return the type representing the built-in type 'Type'.
   InterfaceType get typeType;
 
-  /**
-   * Return the type representing typenames that can't be resolved.
-   */
+  /// Return the type representing typenames that can't be resolved.
   DartType get undefinedType;
 
-  /**
-   * Return 'true' if [id] is the name of a getter on
-   * the Object type.
-   */
+  /// Return 'true' if [id] is the name of a getter on
+  /// the Object type.
   bool isObjectGetter(String id);
 
-  /**
-   * Return 'true' if [id] is the name of a method or getter on
-   * the Object type.
-   */
+  /// Return 'true' if [id] is the name of a method or getter on
+  /// the Object type.
   bool isObjectMember(String id);
 
-  /**
-   * Return 'true' if [id] is the name of a method on
-   * the Object type.
-   */
+  /// Return 'true' if [id] is the name of a method on
+  /// the Object type.
   bool isObjectMethod(String id);
 }
 
-/**
- * Provide common functionality shared by the various TypeProvider
- * implementations.
- */
+/// Provide common functionality shared by the various TypeProvider
+/// implementations.
 abstract class TypeProviderBase implements TypeProvider {
   @override
   List<InterfaceType> get nonSubtypableTypes => <InterfaceType>[
@@ -9092,150 +8588,93 @@
   }
 }
 
-/**
- * Instances of the class `TypeProviderImpl` provide access to types defined by the language
- * by looking for those types in the element model for the core library.
- */
+/// Instances of the class `TypeProviderImpl` provide access to types defined by
+/// the language by looking for those types in the element model for the core
+/// library.
 class TypeProviderImpl extends TypeProviderBase {
-  /**
-   * The type representing the built-in type 'bool'.
-   */
+  /// The type representing the built-in type 'bool'.
   InterfaceType _boolType;
 
-  /**
-   * The type representing the type 'bottom'.
-   */
+  /// The type representing the type 'bottom'.
   DartType _bottomType;
 
-  /**
-   * The type representing the built-in type 'double'.
-   */
+  /// The type representing the built-in type 'double'.
   InterfaceType _doubleType;
 
-  /**
-   * The type representing the built-in type 'Deprecated'.
-   */
+  /// The type representing the built-in type 'Deprecated'.
   InterfaceType _deprecatedType;
 
-  /**
-   * The type representing the built-in type 'dynamic'.
-   */
+  /// The type representing the built-in type 'dynamic'.
   DartType _dynamicType;
 
-  /**
-   * The type representing the built-in type 'Function'.
-   */
+  /// The type representing the built-in type 'Function'.
   InterfaceType _functionType;
 
-  /**
-   * The type representing 'Future<dynamic>'.
-   */
+  /// The type representing 'Future<dynamic>'.
   InterfaceType _futureDynamicType;
 
-  /**
-   * The type representing 'Future<Null>'.
-   */
+  /// The type representing 'Future<Null>'.
   InterfaceType _futureNullType;
 
-  /**
-   * The type representing 'FutureOr<Null>'.
-   */
+  /// The type representing 'FutureOr<Null>'.
   InterfaceType _futureOrNullType;
 
-  /**
-   * The type representing the built-in type 'FutureOr'.
-   */
+  /// The type representing the built-in type 'FutureOr'.
   InterfaceType _futureOrType;
 
-  /**
-   * The type representing the built-in type 'Future'.
-   */
+  /// The type representing the built-in type 'Future'.
   InterfaceType _futureType;
 
-  /**
-   * The type representing the built-in type 'int'.
-   */
+  /// The type representing the built-in type 'int'.
   InterfaceType _intType;
 
-  /**
-   * The type representing 'Iterable<dynamic>'.
-   */
+  /// The type representing 'Iterable<dynamic>'.
   InterfaceType _iterableDynamicType;
 
-  /**
-   * The type representing the built-in type 'Iterable'.
-   */
+  /// The type representing the built-in type 'Iterable'.
   InterfaceType _iterableType;
 
-  /**
-   * The type representing the built-in type 'List'.
-   */
+  /// The type representing the built-in type 'List'.
   InterfaceType _listType;
 
-  /**
-   * The type representing the built-in type 'Map'.
-   */
+  /// The type representing the built-in type 'Map'.
   InterfaceType _mapType;
 
-  /**
-   * An shared object representing the value 'null'.
-   */
+  /// An shared object representing the value 'null'.
   DartObjectImpl _nullObject;
 
-  /**
-   * The type representing the type 'Null'.
-   */
+  /// The type representing the type 'Null'.
   InterfaceType _nullType;
 
-  /**
-   * The type representing the built-in type 'num'.
-   */
+  /// The type representing the built-in type 'num'.
   InterfaceType _numType;
 
-  /**
-   * The type representing the built-in type 'Object'.
-   */
+  /// The type representing the built-in type 'Object'.
   InterfaceType _objectType;
 
-  /**
-   * The type representing the built-in type 'StackTrace'.
-   */
+  /// The type representing the built-in type 'StackTrace'.
   InterfaceType _stackTraceType;
 
-  /**
-   * The type representing 'Stream<dynamic>'.
-   */
+  /// The type representing 'Stream<dynamic>'.
   InterfaceType _streamDynamicType;
 
-  /**
-   * The type representing the built-in type 'Stream'.
-   */
+  /// The type representing the built-in type 'Stream'.
   InterfaceType _streamType;
 
-  /**
-   * The type representing the built-in type 'String'.
-   */
+  /// The type representing the built-in type 'String'.
   InterfaceType _stringType;
 
-  /**
-   * The type representing the built-in type 'Symbol'.
-   */
+  /// The type representing the built-in type 'Symbol'.
   InterfaceType _symbolType;
 
-  /**
-   * The type representing the built-in type 'Type'.
-   */
+  /// The type representing the built-in type 'Type'.
   InterfaceType _typeType;
 
-  /**
-   * The type representing typenames that can't be resolved.
-   */
+  /// The type representing typenames that can't be resolved.
   DartType _undefinedType;
 
-  /**
-   * Initialize a newly created type provider to provide the types defined in
-   * the given [coreLibrary] and [asyncLibrary].
-   */
+  /// Initialize a newly created type provider to provide the types defined in
+  /// the given [coreLibrary] and [asyncLibrary].
   TypeProviderImpl(LibraryElement coreLibrary, LibraryElement asyncLibrary) {
     Namespace coreNamespace =
         new NamespaceBuilder().createPublicNamespaceForLibrary(coreLibrary);
@@ -9244,10 +8683,8 @@
     _initializeFrom(coreNamespace, asyncNamespace);
   }
 
-  /**
-   * Initialize a newly created type provider to provide the types defined in
-   * the given [Namespace]s.
-   */
+  /// Initialize a newly created type provider to provide the types defined in
+  /// the given [Namespace]s.
   TypeProviderImpl.forNamespaces(
       Namespace coreNamespace, Namespace asyncNamespace) {
     _initializeFrom(coreNamespace, asyncNamespace);
@@ -9339,14 +8776,12 @@
   @override
   DartType get undefinedType => _undefinedType;
 
-  /**
-   * Return the type with the given name from the given namespace, or `null` if there is no
-   * class with the given name.
-   *
-   * @param namespace the namespace in which to search for the given name
-   * @param typeName the name of the type being searched for
-   * @return the type that was found
-   */
+  /// Return the type with the given name from the given namespace, or `null` if
+  /// there is no class with the given name.
+  ///
+  /// @param namespace the namespace in which to search for the given name
+  /// @param typeName the name of the type being searched for
+  /// @return the type that was found
   InterfaceType _getType(Namespace namespace, String typeName) {
     Element element = namespace.get(typeName);
     if (element == null) {
@@ -9357,10 +8792,8 @@
     return (element as ClassElement).type;
   }
 
-  /**
-   * Initialize the types provided by this type provider from the given
-   * [Namespace]s.
-   */
+  /// Initialize the types provided by this type provider from the given
+  /// [Namespace]s.
   void _initializeFrom(Namespace coreNamespace, Namespace asyncNamespace) {
     _boolType = _getType(coreNamespace, "bool");
     _bottomType = BottomTypeImpl.instance;
@@ -9393,11 +8826,9 @@
     _futureOrNullType = _futureOrType.instantiate(<DartType>[_nullType]);
   }
 
-  /**
-   * Create an [InterfaceType] that can be used for `FutureOr<T>` if the SDK
-   * being analyzed does not contain its own `FutureOr<T>`.  This ensures that
-   * we can analyze older SDKs.
-   */
+  /// Create an [InterfaceType] that can be used for `FutureOr<T>` if the SDK
+  /// being analyzed does not contain its own `FutureOr<T>`.  This ensures that
+  /// we can analyze older SDKs.
   static InterfaceType createPlaceholderFutureOr(
       InterfaceType futureType, InterfaceType objectType) {
     var compilationUnit =
@@ -9408,106 +8839,90 @@
   }
 }
 
-/**
- * Modes in which [TypeResolverVisitor] works.
- */
+/// Modes in which [TypeResolverVisitor] works.
 enum TypeResolverMode {
-  /**
-   * Resolve all names types of all nodes.
-   */
+  /// Resolve all names types of all nodes.
   everything,
 
-  /**
-   * Resolve only type names outside of function bodies, variable initializers,
-   * and parameter default values.
-   */
+  /// Resolve only type names outside of function bodies, variable initializers,
+  /// and parameter default values.
   api,
 
-  /**
-   * Resolve only type names that would be skipped during [api].
-   *
-   * Resolution must start from a unit member or a class member. For example
-   * it is not allowed to resolve types in a separate statement, or a function
-   * body.
-   */
+  /// Resolve only type names that would be skipped during [api].
+  ///
+  /// Resolution must start from a unit member or a class member. For example
+  /// it is not allowed to resolve types in a separate statement, or a function
+  /// body.
   local
 }
 
-/**
- * Instances of the class `TypeResolverVisitor` are used to resolve the types associated with
- * the elements in the element model. This includes the types of superclasses, mixins, interfaces,
- * fields, methods, parameters, and local variables. As a side-effect, this also finishes building
- * the type hierarchy.
- */
+/// Instances of the class `TypeResolverVisitor` are used to resolve the types
+/// associated with the elements in the element model. This includes the types
+/// of superclasses, mixins, interfaces, fields, methods, parameters, and local
+/// variables. As a side-effect, this also finishes building the type hierarchy.
 class TypeResolverVisitor extends ScopedVisitor {
-  /**
-   * The type representing the type 'dynamic'.
-   */
+  /// The type representing the type 'dynamic'.
   DartType _dynamicType;
 
-  /**
-   * The type representing typenames that can't be resolved.
-   */
+  /// The type representing typenames that can't be resolved.
   DartType _undefinedType;
 
-  /**
-   * The flag specifying if currently visited class references 'super' expression.
-   */
+  /// The flag specifying if currently visited class references 'super'
+  /// expression.
   bool _hasReferenceToSuper = false;
 
-  /**
-   * True if we're analyzing in strong mode.
-   */
+  /// True if we're analyzing in strong mode.
   final bool _strongMode = true;
 
-  /**
-   * Type type system in use for this resolver pass.
-   */
+  /// Type type system in use for this resolver pass.
   TypeSystem _typeSystem;
 
-  /**
-   * The helper to resolve types.
-   */
+  /// The helper to resolve types.
   TypeNameResolver _typeNameResolver;
 
   final TypeResolverMode mode;
 
-  /**
-   * Is `true` when we are visiting all nodes in [TypeResolverMode.local] mode.
-   */
+  /// Is `true` when we are visiting all nodes in [TypeResolverMode.local] mode.
   bool _localModeVisitAll = false;
 
-  /**
-   * Is `true` if we are in [TypeResolverMode.local] mode, and the initial
-   * [nameScope] was computed.
-   */
+  /// Is `true` if we are in [TypeResolverMode.local] mode, and the initial
+  /// [nameScope] was computed.
   bool _localModeScopeReady = false;
 
-  /**
-   * Initialize a newly created visitor to resolve the nodes in an AST node.
-   *
-   * [definingLibrary] is the element for the library containing the node being
-   * visited.
-   * [source] is the source representing the compilation unit containing the
-   * node being visited.
-   * [typeProvider] is the object used to access the types from the core
-   * library.
-   * [errorListener] is the error listener that will be informed of any errors
-   * that are found during resolution.
-   * [nameScope] is the scope used to resolve identifiers in the node that will
-   * first be visited.  If `null` or unspecified, a new [LibraryScope] will be
-   * created based on [definingLibrary] and [typeProvider].
-   */
+  /// Indicates whether the ClassElement fields interfaces, mixins, and
+  /// supertype should be set by this visitor.
+  ///
+  /// This is needed when using the old task model, but causes problems with the
+  /// new driver.
+  final bool shouldSetElementSupertypes;
+
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
+  ///
+  /// [definingLibrary] is the element for the library containing the node being
+  /// visited.
+  /// [source] is the source representing the compilation unit containing the
+  /// node being visited.
+  /// [typeProvider] is the object used to access the types from the core
+  /// library.
+  /// [errorListener] is the error listener that will be informed of any errors
+  /// that are found during resolution.
+  /// [nameScope] is the scope used to resolve identifiers in the node that will
+  /// first be visited.  If `null` or unspecified, a new [LibraryScope] will be
+  /// created based on [definingLibrary] and [typeProvider].
   TypeResolverVisitor(LibraryElement definingLibrary, Source source,
       TypeProvider typeProvider, AnalysisErrorListener errorListener,
-      {Scope nameScope, this.mode: TypeResolverMode.everything})
+      {Scope nameScope,
+      this.mode: TypeResolverMode.everything,
+      bool shouldUseWithClauseInferredTypes: true,
+      this.shouldSetElementSupertypes: false})
       : super(definingLibrary, source, typeProvider, errorListener,
             nameScope: nameScope) {
     _dynamicType = typeProvider.dynamicType;
     _undefinedType = typeProvider.undefinedType;
     _typeSystem = TypeSystem.create(definingLibrary.context);
     _typeNameResolver = new TypeNameResolver(
-        _typeSystem, typeProvider, definingLibrary, source, errorListener);
+        _typeSystem, typeProvider, definingLibrary, source, errorListener,
+        shouldUseWithClauseInferredTypes: shouldUseWithClauseInferredTypes);
   }
 
   @override
@@ -9603,7 +9018,7 @@
       superclassType =
           _resolveType(extendsClause.superclass, errorCode, asClass: true);
     }
-    if (classElement != null) {
+    if (shouldSetElementSupertypes && classElement != null) {
       if (superclassType == null) {
         InterfaceType objectType = typeProvider.objectType;
         if (!identical(classElement.type, objectType)) {
@@ -9652,7 +9067,7 @@
       superclassType = typeProvider.objectType;
     }
     ClassElementImpl classElement = _getClassElement(node.name);
-    if (classElement != null) {
+    if (shouldSetElementSupertypes && classElement != null) {
       classElement.supertype = superclassType;
     }
     _resolveWithClause(classElement, node.withClause);
@@ -9901,9 +9316,7 @@
         _localModeScopeReady = true;
       }
 
-      /**
-       * Visit the given [node] and all its children.
-       */
+      /// Visit the given [node] and all its children.
       void visitAllNodes(AstNode node) {
         if (node != null) {
           bool wasVisitAllInLocalMode = _localModeVisitAll;
@@ -9988,7 +9401,8 @@
     AstNode parent2 = node.parent?.parent;
     if (parent2 is ClassDeclaration ||
         parent2 is ClassTypeAlias ||
-        parent2 is FunctionTypeAlias) {
+        parent2 is FunctionTypeAlias ||
+        parent2 is GenericTypeAlias) {
       // Bounds of parameters of classes and function type aliases are
       // already resolved.
     } else {
@@ -10030,10 +9444,8 @@
     return null;
   }
 
-  /**
-   * Given the [returnType] of a function, compute the return type of the
-   * function.
-   */
+  /// Given the [returnType] of a function, compute the return type of the
+  /// function.
   DartType _computeReturnType(TypeAnnotation returnType) {
     if (returnType == null) {
       return _dynamicType;
@@ -10042,12 +9454,11 @@
     }
   }
 
-  /**
-   * Return the class element that represents the class whose name was provided.
-   *
-   * @param identifier the name from the declaration of a class
-   * @return the class element that represents the class
-   */
+  /// Return the class element that represents the class whose name was
+  /// provided.
+  ///
+  /// @param identifier the name from the declaration of a class
+  /// @return the class element that represents the class
   ClassElementImpl _getClassElement(SimpleIdentifier identifier) {
     // TODO(brianwilkerson) Seems like we should be using
     // ClassDeclaration.getElement().
@@ -10066,11 +9477,9 @@
     return null;
   }
 
-  /**
-   * 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.
-   */
+  /// 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.
   void _inferOperatorReturnType(ExecutableElementImpl element) {
     if (_strongMode &&
         element.isOperator &&
@@ -10080,11 +9489,9 @@
     }
   }
 
-  /**
-   * 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.
-   */
+  /// 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 &&
@@ -10094,12 +9501,10 @@
     }
   }
 
-  /**
-   * Record that the static type of the given node is the given type.
-   *
-   * @param expression the node whose type is to be recorded
-   * @param type the static type of the node
-   */
+  /// Record that the static type of the given node is the given type.
+  ///
+  /// @param expression the node whose type is to be recorded
+  /// @param type the static type of the node
   Object _recordType(Expression expression, DartType type) {
     if (type == null) {
       expression.staticType = _dynamicType;
@@ -10115,7 +9520,7 @@
       NodeList<TypeName> interfaces = clause.interfaces;
       List<InterfaceType> interfaceTypes =
           _resolveTypes(interfaces, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS);
-      if (classElement != null) {
+      if (shouldSetElementSupertypes && classElement != null) {
         classElement.interfaces = interfaceTypes;
       }
     }
@@ -10130,18 +9535,18 @@
     if (types == null || types.isEmpty) {
       types = [typeProvider.objectType];
     }
-    classElement.superclassConstraints = types;
+    if (shouldSetElementSupertypes) {
+      classElement.superclassConstraints = types;
+    }
   }
 
-  /**
-   * Return the [InterfaceType] of the given [typeName].
-   *
-   * If the resulting type is not a valid interface type, return `null`.
-   *
-   * The flag [asClass] specifies if the type will be used as a class, so mixin
-   * declarations are not valid (they declare interfaces and mixins, but not
-   * classes).
-   */
+  /// Return the [InterfaceType] of the given [typeName].
+  ///
+  /// If the resulting type is not a valid interface type, return `null`.
+  ///
+  /// The flag [asClass] specifies if the type will be used as a class, so mixin
+  /// declarations are not valid (they declare interfaces and mixins, but not
+  /// classes).
   InterfaceType _resolveType(TypeName typeName, ErrorCode errorCode,
       {bool asClass: false}) {
     DartType type = typeName.type;
@@ -10164,16 +9569,15 @@
     return null;
   }
 
-  /**
-   * Resolve the types in the given list of type names.
-   *
-   * @param typeNames the type names to be resolved
-   * @param nonTypeError the error to produce if the type name is defined to be something other than
-   *          a type
-   * @param enumTypeError the error to produce if the type name is defined to be an enum
-   * @param dynamicTypeError the error to produce if the type name is "dynamic"
-   * @return an array containing all of the types that were resolved.
-   */
+  /// Resolve the types in the given list of type names.
+  ///
+  /// @param typeNames the type names to be resolved
+  /// @param nonTypeError the error to produce if the type name is defined to be
+  ///        something other than a type
+  /// @param enumTypeError the error to produce if the type name is defined to
+  ///        be an enum
+  /// @param dynamicTypeError the error to produce if the type name is "dynamic"
+  /// @return an array containing all of the types that were resolved.
   List<InterfaceType> _resolveTypes(
       NodeList<TypeName> typeNames, ErrorCode errorCode) {
     List<InterfaceType> types = new List<InterfaceType>();
@@ -10190,15 +9594,15 @@
     if (clause != null) {
       List<InterfaceType> mixinTypes = _resolveTypes(
           clause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
-      classElement.mixins = mixinTypes;
+      if (shouldSetElementSupertypes) {
+        classElement.mixins = mixinTypes;
+      }
     }
   }
 
-  /**
-   * Given a function typed [parameter] with [FunctionType] based on a
-   * [GenericFunctionTypeElementImpl], compute and set the return type for the
-   * function element.
-   */
+  /// Given a function typed [parameter] with [FunctionType] based on a
+  /// [GenericFunctionTypeElementImpl], compute and set the return type for the
+  /// function element.
   void _setFunctionTypedParameterType(ParameterElementImpl parameter,
       TypeAnnotation returnType, FormalParameterList parameterList) {
     DartType type = parameter.type;
@@ -10207,25 +9611,17 @@
   }
 }
 
-/**
- * Instances of the class [UnusedLocalElementsVerifier] traverse an AST
- * looking for cases of [HintCode.UNUSED_ELEMENT], [HintCode.UNUSED_FIELD],
- * [HintCode.UNUSED_LOCAL_VARIABLE], etc.
- */
+/// Instances of the class [UnusedLocalElementsVerifier] traverse an AST
+/// looking for cases of [HintCode.UNUSED_ELEMENT], [HintCode.UNUSED_FIELD],
+/// [HintCode.UNUSED_LOCAL_VARIABLE], etc.
 class UnusedLocalElementsVerifier extends RecursiveAstVisitor {
-  /**
-   * The error listener to which errors will be reported.
-   */
+  /// The error listener to which errors will be reported.
   final AnalysisErrorListener _errorListener;
 
-  /**
-   * The elements know to be used.
-   */
+  /// The elements know to be used.
   final UsedLocalElements _usedElements;
 
-  /**
-   * Create a new instance of the [UnusedLocalElementsVerifier].
-   */
+  /// Create a new instance of the [UnusedLocalElementsVerifier].
   UnusedLocalElementsVerifier(this._errorListener, this._usedElements);
 
   visitSimpleIdentifier(SimpleIdentifier node) {
@@ -10375,56 +9771,39 @@
   }
 }
 
-/**
- * A container with information about used imports prefixes and used imported
- * elements.
- */
+/// A container with information about used imports prefixes and used imported
+/// elements.
 class UsedImportedElements {
-  /**
-   * The map of referenced [PrefixElement]s and the [Element]s that they prefix.
-   */
+  /// The map of referenced [PrefixElement]s and the [Element]s that they
+  /// prefix.
   final Map<PrefixElement, List<Element>> prefixMap =
       new HashMap<PrefixElement, List<Element>>();
 
-  /**
-   * The set of referenced top-level [Element]s.
-   */
+  /// The set of referenced top-level [Element]s.
   final Set<Element> elements = new HashSet<Element>();
 }
 
-/**
- * A container with sets of used [Element]s.
- * All these elements are defined in a single compilation unit or a library.
- */
+/// A container with sets of used [Element]s.
+/// All these elements are defined in a single compilation unit or a library.
 class UsedLocalElements {
-  /**
-   * Resolved, locally defined elements that are used or potentially can be
-   * used.
-   */
+  /// Resolved, locally defined elements that are used or potentially can be
+  /// used.
   final HashSet<Element> elements = new HashSet<Element>();
 
-  /**
-   * [LocalVariableElement]s that represent exceptions in [CatchClause]s.
-   */
+  /// [LocalVariableElement]s that represent exceptions in [CatchClause]s.
   final HashSet<LocalVariableElement> catchExceptionElements =
       new HashSet<LocalVariableElement>();
 
-  /**
-   * [LocalVariableElement]s that represent stack traces in [CatchClause]s.
-   */
+  /// [LocalVariableElement]s that represent stack traces in [CatchClause]s.
   final HashSet<LocalVariableElement> catchStackTraceElements =
       new HashSet<LocalVariableElement>();
 
-  /**
-   * Names of resolved or unresolved class members that are referenced in the
-   * library.
-   */
+  /// Names of resolved or unresolved class members that are referenced in the
+  /// library.
   final HashSet<String> members = new HashSet<String>();
 
-  /**
-   * Names of resolved or unresolved class members that are read in the
-   * library.
-   */
+  /// Names of resolved or unresolved class members that are read in the
+  /// library.
   final HashSet<String> readMembers = new HashSet<String>();
 
   UsedLocalElements();
@@ -10470,37 +9849,29 @@
   }
 }
 
-/**
- * Instances of the class `VariableResolverVisitor` are used to resolve
- * [SimpleIdentifier]s to local variables and formal parameters.
- */
+/// Instances of the class `VariableResolverVisitor` are used to resolve
+/// [SimpleIdentifier]s to local variables and formal parameters.
 class VariableResolverVisitor extends ScopedVisitor {
-  /**
-   * The method or function that we are currently visiting, or `null` if we are not inside a
-   * method or function.
-   */
+  /// The method or function that we are currently visiting, or `null` if we are
+  /// not inside a method or function.
   ExecutableElement _enclosingFunction;
 
-  /**
-   * Information about local variables in the enclosing function or method.
-   */
+  /// Information about local variables in the enclosing function or method.
   LocalVariableInfo _localVariableInfo;
 
-  /**
-   * Initialize a newly created visitor to resolve the nodes in an AST node.
-   *
-   * [definingLibrary] is the element for the library containing the node being
-   * visited.
-   * [source] is the source representing the compilation unit containing the
-   * node being visited
-   * [typeProvider] is the object used to access the types from the core
-   * library.
-   * [errorListener] is the error listener that will be informed of any errors
-   * that are found during resolution.
-   * [nameScope] is the scope used to resolve identifiers in the node that will
-   * first be visited.  If `null` or unspecified, a new [LibraryScope] will be
-   * created based on [definingLibrary] and [typeProvider].
-   */
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
+  ///
+  /// [definingLibrary] is the element for the library containing the node being
+  /// visited.
+  /// [source] is the source representing the compilation unit containing the
+  /// node being visited
+  /// [typeProvider] is the object used to access the types from the core
+  /// library.
+  /// [errorListener] is the error listener that will be informed of any errors
+  /// that are found during resolution.
+  /// [nameScope] is the scope used to resolve identifiers in the node that will
+  /// first be visited.  If `null` or unspecified, a new [LibraryScope] will be
+  /// created based on [definingLibrary] and [typeProvider].
   VariableResolverVisitor(LibraryElement definingLibrary, Source source,
       TypeProvider typeProvider, AnalysisErrorListener errorListener,
       {Scope nameScope})
@@ -10715,34 +10086,22 @@
   }
 }
 
-/**
- * An object used to track the usage of labels within a single label scope.
- */
+/// An object used to track the usage of labels within a single label scope.
 class _LabelTracker {
-  /**
-   * The tracker for the outer label scope.
-   */
+  /// The tracker for the outer label scope.
   final _LabelTracker outerTracker;
 
-  /**
-   * The labels whose usage is being tracked.
-   */
+  /// The labels whose usage is being tracked.
   final List<Label> labels;
 
-  /**
-   * A list of flags corresponding to the list of [labels] indicating whether
-   * the corresponding label has been used.
-   */
+  /// A list of flags corresponding to the list of [labels] indicating whether
+  /// the corresponding label has been used.
   List<bool> used;
 
-  /**
-   * A map from the names of labels to the index of the label in [labels].
-   */
+  /// A map from the names of labels to the index of the label in [labels].
   final Map<String, int> labelMap = <String, int>{};
 
-  /**
-   * Initialize a newly created label tracker.
-   */
+  /// Initialize a newly created label tracker.
   _LabelTracker(this.outerTracker, this.labels) {
     used = new List.filled(labels.length, false);
     for (int i = 0; i < labels.length; i++) {
@@ -10750,9 +10109,7 @@
     }
   }
 
-  /**
-   * Record that the label with the given [labelName] has been used.
-   */
+  /// Record that the label with the given [labelName] has been used.
   void recordUsage(String labelName) {
     if (labelName != null) {
       int index = labelMap[labelName];
@@ -10764,9 +10121,7 @@
     }
   }
 
-  /**
-   * Return the unused labels.
-   */
+  /// Return the unused labels.
   Iterable<Label> unusedLabels() sync* {
     for (int i = 0; i < labels.length; i++) {
       if (!used[i]) {
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 0f80220d..d2ce780 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -1757,18 +1757,21 @@
    */
   TypeProvider get typeProvider;
 
-  List<InterfaceType> gatherMixinSupertypeConstraints(
+  List<InterfaceType> gatherMixinSupertypeConstraintsForInference(
       ClassElement mixinElement) {
-    var mixinSupertypeConstraints = <InterfaceType>[];
-    void addIfGeneric(InterfaceType type) {
-      if (type.element.typeParameters.isNotEmpty) {
-        mixinSupertypeConstraints.add(type);
+    List<InterfaceType> candidates;
+    if (mixinElement.isMixin) {
+      candidates = mixinElement.superclassConstraints;
+    } else {
+      candidates = [mixinElement.supertype];
+      candidates.addAll(mixinElement.mixins);
+      if (mixinElement.isMixinApplication) {
+        candidates.removeLast();
       }
     }
-
-    addIfGeneric(mixinElement.supertype);
-    mixinElement.mixins.forEach(addIfGeneric);
-    return mixinSupertypeConstraints;
+    return candidates
+        .where((type) => type.element.typeParameters.isNotEmpty)
+        .toList();
   }
 
   /**
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 610ae0d..cda912f 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -672,47 +672,37 @@
 class AnalysisDriverSubtypeBuilder extends Object
     with _AnalysisDriverSubtypeMixin
     implements idl.AnalysisDriverSubtype {
-  List<String> _members;
-  String _name;
-  List<String> _supertypes;
+  List<int> _members;
+  int _name;
 
   @override
-  List<String> get members => _members ??= <String>[];
+  List<int> get members => _members ??= <int>[];
 
   /**
    * The names of defined instance members.
+   * They are indexes into [AnalysisDriverUnitError.strings] list.
    * The list is sorted in ascending order.
    */
-  void set members(List<String> value) {
+  void set members(List<int> value) {
+    assert(value == null || value.every((e) => e >= 0));
     this._members = value;
   }
 
   @override
-  String get name => _name ??= '';
+  int get name => _name ??= 0;
 
   /**
    * The name of the class.
+   * It is an index into [AnalysisDriverUnitError.strings] list.
    */
-  void set name(String value) {
+  void set name(int value) {
+    assert(value == null || value >= 0);
     this._name = value;
   }
 
-  @override
-  List<String> get supertypes => _supertypes ??= <String>[];
-
-  /**
-   * The identifiers of the direct supertypes.
-   * The list is sorted in ascending order.
-   */
-  void set supertypes(List<String> value) {
-    this._supertypes = value;
-  }
-
-  AnalysisDriverSubtypeBuilder(
-      {List<String> members, String name, List<String> supertypes})
+  AnalysisDriverSubtypeBuilder({List<int> members, int name})
       : _members = members,
-        _name = name,
-        _supertypes = supertypes;
+        _name = name;
 
   /**
    * Flush [informative] data recursively.
@@ -723,49 +713,28 @@
    * Accumulate non-[informative] data into [signature].
    */
   void collectApiSignature(api_sig.ApiSignature signature) {
-    signature.addString(this._name ?? '');
-    if (this._supertypes == null) {
-      signature.addInt(0);
-    } else {
-      signature.addInt(this._supertypes.length);
-      for (var x in this._supertypes) {
-        signature.addString(x);
-      }
-    }
+    signature.addInt(this._name ?? 0);
     if (this._members == null) {
       signature.addInt(0);
     } else {
       signature.addInt(this._members.length);
       for (var x in this._members) {
-        signature.addString(x);
+        signature.addInt(x);
       }
     }
   }
 
   fb.Offset finish(fb.Builder fbBuilder) {
     fb.Offset offset_members;
-    fb.Offset offset_name;
-    fb.Offset offset_supertypes;
     if (!(_members == null || _members.isEmpty)) {
-      offset_members = fbBuilder
-          .writeList(_members.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    if (_name != null) {
-      offset_name = fbBuilder.writeString(_name);
-    }
-    if (!(_supertypes == null || _supertypes.isEmpty)) {
-      offset_supertypes = fbBuilder
-          .writeList(_supertypes.map((b) => fbBuilder.writeString(b)).toList());
+      offset_members = fbBuilder.writeListUint32(_members);
     }
     fbBuilder.startTable();
     if (offset_members != null) {
-      fbBuilder.addOffset(2, offset_members);
+      fbBuilder.addOffset(1, offset_members);
     }
-    if (offset_name != null) {
-      fbBuilder.addOffset(0, offset_name);
-    }
-    if (offset_supertypes != null) {
-      fbBuilder.addOffset(1, offset_supertypes);
+    if (_name != null && _name != 0) {
+      fbBuilder.addUint32(0, _name);
     }
     return fbBuilder.endTable();
   }
@@ -788,29 +757,21 @@
 
   _AnalysisDriverSubtypeImpl(this._bc, this._bcOffset);
 
-  List<String> _members;
-  String _name;
-  List<String> _supertypes;
+  List<int> _members;
+  int _name;
 
   @override
-  List<String> get members {
-    _members ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 2, const <String>[]);
+  List<int> get members {
+    _members ??=
+        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 1, const <int>[]);
     return _members;
   }
 
   @override
-  String get name {
-    _name ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 0, '');
+  int get name {
+    _name ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 0, 0);
     return _name;
   }
-
-  @override
-  List<String> get supertypes {
-    _supertypes ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 1, const <String>[]);
-    return _supertypes;
-  }
 }
 
 abstract class _AnalysisDriverSubtypeMixin
@@ -819,8 +780,7 @@
   Map<String, Object> toJson() {
     Map<String, Object> _result = <String, Object>{};
     if (members.isNotEmpty) _result["members"] = members;
-    if (name != '') _result["name"] = name;
-    if (supertypes.isNotEmpty) _result["supertypes"] = supertypes;
+    if (name != 0) _result["name"] = name;
     return _result;
   }
 
@@ -828,7 +788,6 @@
   Map<String, Object> toMap() => {
         "members": members,
         "name": name,
-        "supertypes": supertypes,
       };
 
   @override
@@ -1048,6 +1007,7 @@
   int _nullStringId;
   List<String> _strings;
   List<AnalysisDriverSubtypeBuilder> _subtypes;
+  List<int> _supertypes;
   List<int> _unitLibraryUris;
   List<int> _unitUnitUris;
   List<bool> _usedElementIsQualifiedFlags;
@@ -1164,6 +1124,20 @@
   }
 
   @override
+  List<int> get supertypes => _supertypes ??= <int>[];
+
+  /**
+   * The identifiers of supertypes of elements at corresponding indexes
+   * in [subtypes].  They are indexes into [strings] list. The list is sorted
+   * in ascending order.  There might be more than one element with the same
+   * value if there is more than one subtype of this supertype.
+   */
+  void set supertypes(List<int> value) {
+    assert(value == null || value.every((e) => e >= 0));
+    this._supertypes = value;
+  }
+
+  @override
   List<int> get unitLibraryUris => _unitLibraryUris ??= <int>[];
 
   /**
@@ -1304,6 +1278,7 @@
       int nullStringId,
       List<String> strings,
       List<AnalysisDriverSubtypeBuilder> subtypes,
+      List<int> supertypes,
       List<int> unitLibraryUris,
       List<int> unitUnitUris,
       List<bool> usedElementIsQualifiedFlags,
@@ -1323,6 +1298,7 @@
         _nullStringId = nullStringId,
         _strings = strings,
         _subtypes = subtypes,
+        _supertypes = supertypes,
         _unitLibraryUris = unitLibraryUris,
         _unitUnitUris = unitUnitUris,
         _usedElementIsQualifiedFlags = usedElementIsQualifiedFlags,
@@ -1483,6 +1459,14 @@
         signature.addBool(x);
       }
     }
+    if (this._supertypes == null) {
+      signature.addInt(0);
+    } else {
+      signature.addInt(this._supertypes.length);
+      for (var x in this._supertypes) {
+        signature.addInt(x);
+      }
+    }
     if (this._subtypes == null) {
       signature.addInt(0);
     } else {
@@ -1506,6 +1490,7 @@
     fb.Offset offset_elementUnits;
     fb.Offset offset_strings;
     fb.Offset offset_subtypes;
+    fb.Offset offset_supertypes;
     fb.Offset offset_unitLibraryUris;
     fb.Offset offset_unitUnitUris;
     fb.Offset offset_usedElementIsQualifiedFlags;
@@ -1547,6 +1532,9 @@
       offset_subtypes = fbBuilder
           .writeList(_subtypes.map((b) => b.finish(fbBuilder)).toList());
     }
+    if (!(_supertypes == null || _supertypes.isEmpty)) {
+      offset_supertypes = fbBuilder.writeListUint32(_supertypes);
+    }
     if (!(_unitLibraryUris == null || _unitLibraryUris.isEmpty)) {
       offset_unitLibraryUris = fbBuilder.writeListUint32(_unitLibraryUris);
     }
@@ -1611,7 +1599,10 @@
       fbBuilder.addOffset(0, offset_strings);
     }
     if (offset_subtypes != null) {
-      fbBuilder.addOffset(18, offset_subtypes);
+      fbBuilder.addOffset(19, offset_subtypes);
+    }
+    if (offset_supertypes != null) {
+      fbBuilder.addOffset(18, offset_supertypes);
     }
     if (offset_unitLibraryUris != null) {
       fbBuilder.addOffset(2, offset_unitLibraryUris);
@@ -1680,6 +1671,7 @@
   int _nullStringId;
   List<String> _strings;
   List<idl.AnalysisDriverSubtype> _subtypes;
+  List<int> _supertypes;
   List<int> _unitLibraryUris;
   List<int> _unitUnitUris;
   List<bool> _usedElementIsQualifiedFlags;
@@ -1745,11 +1737,18 @@
   List<idl.AnalysisDriverSubtype> get subtypes {
     _subtypes ??= const fb.ListReader<idl.AnalysisDriverSubtype>(
             const _AnalysisDriverSubtypeReader())
-        .vTableGet(_bc, _bcOffset, 18, const <idl.AnalysisDriverSubtype>[]);
+        .vTableGet(_bc, _bcOffset, 19, const <idl.AnalysisDriverSubtype>[]);
     return _subtypes;
   }
 
   @override
+  List<int> get supertypes {
+    _supertypes ??= const fb.Uint32ListReader()
+        .vTableGet(_bc, _bcOffset, 18, const <int>[]);
+    return _supertypes;
+  }
+
+  @override
   List<int> get unitLibraryUris {
     _unitLibraryUris ??=
         const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 2, const <int>[]);
@@ -1849,6 +1848,7 @@
     if (strings.isNotEmpty) _result["strings"] = strings;
     if (subtypes.isNotEmpty)
       _result["subtypes"] = subtypes.map((_value) => _value.toJson()).toList();
+    if (supertypes.isNotEmpty) _result["supertypes"] = supertypes;
     if (unitLibraryUris.isNotEmpty)
       _result["unitLibraryUris"] = unitLibraryUris;
     if (unitUnitUris.isNotEmpty) _result["unitUnitUris"] = unitUnitUris;
@@ -1885,6 +1885,7 @@
         "nullStringId": nullStringId,
         "strings": strings,
         "subtypes": subtypes,
+        "supertypes": supertypes,
         "unitLibraryUris": unitLibraryUris,
         "unitUnitUris": unitUnitUris,
         "usedElementIsQualifiedFlags": usedElementIsQualifiedFlags,
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index a37da95..0f70322 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -987,20 +987,16 @@
 table AnalysisDriverSubtype {
   /**
    * The names of defined instance members.
+   * They are indexes into [AnalysisDriverUnitError.strings] list.
    * The list is sorted in ascending order.
    */
-  members:[string] (id: 2);
+  members:[uint] (id: 1);
 
   /**
    * The name of the class.
+   * It is an index into [AnalysisDriverUnitError.strings] list.
    */
-  name:string (id: 0);
-
-  /**
-   * The identifiers of the direct supertypes.
-   * The list is sorted in ascending order.
-   */
-  supertypes:[string] (id: 1);
+  name:uint (id: 0);
 }
 
 /**
@@ -1089,7 +1085,15 @@
   /**
    * The list of classes declared in the unit.
    */
-  subtypes:[AnalysisDriverSubtype] (id: 18);
+  subtypes:[AnalysisDriverSubtype] (id: 19);
+
+  /**
+   * The identifiers of supertypes of elements at corresponding indexes
+   * in [subtypes].  They are indexes into [strings] list. The list is sorted
+   * in ascending order.  There might be more than one element with the same
+   * value if there is more than one subtype of this supertype.
+   */
+  supertypes:[uint] (id: 18);
 
   /**
    * Each item of this list corresponds to the library URI of a unique library
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index c9ca5fd..4a9640c 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -134,23 +134,18 @@
 abstract class AnalysisDriverSubtype extends base.SummaryClass {
   /**
    * The names of defined instance members.
-   * The list is sorted in ascending order.
-   */
-  @Id(2)
-  List<String> get members;
-
-  /**
-   * The name of the class.
-   */
-  @Id(0)
-  String get name;
-
-  /**
-   * The identifiers of the direct supertypes.
+   * They are indexes into [AnalysisDriverUnitError.strings] list.
    * The list is sorted in ascending order.
    */
   @Id(1)
-  List<String> get supertypes;
+  List<int> get members;
+
+  /**
+   * The name of the class.
+   * It is an index into [AnalysisDriverUnitError.strings] list.
+   */
+  @Id(0)
+  int get name;
 }
 
 /**
@@ -255,10 +250,19 @@
   /**
    * The list of classes declared in the unit.
    */
-  @Id(18)
+  @Id(19)
   List<AnalysisDriverSubtype> get subtypes;
 
   /**
+   * The identifiers of supertypes of elements at corresponding indexes
+   * in [subtypes].  They are indexes into [strings] list. The list is sorted
+   * in ascending order.  There might be more than one element with the same
+   * value if there is more than one subtype of this supertype.
+   */
+  @Id(18)
+  List<int> get supertypes;
+
+  /**
    * Each item of this list corresponds to the library URI of a unique library
    * specific unit referenced in the index.  It is an index into [strings] list.
    */
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 2095404..f97e1a3 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -715,7 +715,7 @@
               this.enclosingElement;
           if (enclosingElement is CompilationUnitElementInBuildUnit) {
             var mixinSupertypeConstraints = context.typeSystem
-                .gatherMixinSupertypeConstraints(mixinElement);
+                .gatherMixinSupertypeConstraintsForInference(mixinElement);
             if (mixinSupertypeConstraints.isNotEmpty) {
               if (supertypesForMixinInference == null) {
                 supertypesForMixinInference = <InterfaceType>[];
@@ -1241,6 +1241,9 @@
       for (ClassElementForLink_Class type in types) {
         _containedNames[type.name] = type;
       }
+      for (ClassElementForLink_Class mixin in mixins) {
+        _containedNames[mixin.name] = mixin;
+      }
       for (ClassElementForLink_Enum enm in enums) {
         _containedNames[enm.name] = enm;
       }
@@ -2353,6 +2356,17 @@
   bool get isStatic => unlinkedVariable.isStatic;
 
   @override
+  DartType get type {
+    if (declaredType != null) {
+      return declaredType;
+    }
+    if (Linker._isPerformingVariableTypeInference && !isStatic) {
+      return DynamicTypeImpl.instance;
+    }
+    return inferredType;
+  }
+
+  @override
   void set type(DartType inferredType) {
     assert(!isStatic);
     assert(_inferredInstanceType == null);
@@ -3585,6 +3599,11 @@
   /// instance variables in that same cycle.
   static LibraryCycleForLink _initializerTypeInferenceCycle;
 
+  /// If a top-level or an instance variable type inference is in progress,
+  /// this flag it set to `true`.  It is used to prevent type inference for
+  /// other instance variables (when they don't have declared type).
+  static bool _isPerformingVariableTypeInference = false;
+
   /// Callback to ask the client for a [LinkedLibrary] for a
   /// dependency.
   final GetDependencyCallback getDependency;
@@ -4952,11 +4971,13 @@
         assert(Linker._initializerTypeInferenceCycle == null);
         Linker._initializerTypeInferenceCycle =
             compilationUnit.library.libraryCycleForLink;
+        Linker._isPerformingVariableTypeInference = true;
         try {
           new TypeInferenceDependencyWalker().walk(_typeInferenceNode);
           assert(_inferredType != null);
         } finally {
           Linker._initializerTypeInferenceCycle = null;
+          Linker._isPerformingVariableTypeInference = false;
         }
       } else if (compilationUnit.isInBuildUnit) {
         _inferredType = DynamicTypeImpl.instance;
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index ec06d19..96e2632 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -5104,7 +5104,9 @@
     //
     RecordingErrorListener errorListener = new RecordingErrorListener();
     TypeResolverVisitor visitor = new TypeResolverVisitor(
-        library, unitElement.source, typeProvider, errorListener);
+        library, unitElement.source, typeProvider, errorListener,
+        shouldUseWithClauseInferredTypes: false,
+        shouldSetElementSupertypes: true);
     unit.accept(visitor);
     //
     // Re-write the AST to handle the optional new and const feature.
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..248b5db 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
@@ -13,11 +13,91 @@
 }
 
 @reflectiveTest
-class CompileTimeErrorCodeTest_Driver extends CompileTimeErrorCodeTest {
+class CompileTimeErrorCodeTest_Driver extends CompileTimeErrorCodeTestBase {
   @override
   bool get enableNewAnalysisDriver => true;
 
-  @override // Passes with driver
-  test_mixinInference_recursiveSubtypeCheck() =>
-      super.test_mixinInference_recursiveSubtypeCheck();
+  @override
+  @failingTest
+  test_awaitInWrongContext_sync() {
+    return super.test_awaitInWrongContext_sync();
+  }
+
+  @override
+  @failingTest
+  test_constEvalThrowsException() {
+    return super.test_constEvalThrowsException();
+  }
+
+  @override
+  @failingTest
+  test_genericFunctionTypeArgument_typedef() {
+    return super.test_genericFunctionTypeArgument_typedef();
+  }
+
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_async() {
+    return super.test_invalidIdentifierInAsync_async();
+  }
+
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_await() {
+    return super.test_invalidIdentifierInAsync_await();
+  }
+
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_yield() {
+    return super.test_invalidIdentifierInAsync_yield();
+  }
+
+  @override
+  @failingTest
+  test_mixinInference_noMatchingClass_typeParametersSupplied() {
+    return super.test_mixinInference_noMatchingClass_typeParametersSupplied();
+  }
+
+  @override
+  @failingTest
+  test_mixinOfNonClass() {
+    return super.test_mixinOfNonClass();
+  }
+
+  @override
+  @failingTest
+  test_objectCannotExtendAnotherClass() {
+    return super.test_objectCannotExtendAnotherClass();
+  }
+
+  @override
+  @failingTest
+  test_superInitializerInObject() {
+    return super.test_superInitializerInObject();
+  }
+
+  @override
+  @failingTest
+  test_yieldEachInNonGenerator_async() {
+    return super.test_yieldEachInNonGenerator_async();
+  }
+
+  @override
+  @failingTest
+  test_yieldEachInNonGenerator_sync() {
+    return super.test_yieldEachInNonGenerator_sync();
+  }
+
+  @override
+  @failingTest
+  test_yieldInNonGenerator_async() {
+    return super.test_yieldInNonGenerator_async();
+  }
+
+  @override
+  @failingTest
+  test_yieldInNonGenerator_sync() {
+    return super.test_yieldInNonGenerator_sync();
+  }
 }
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 1955f4a..724f3b8 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -21,92 +21,109 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompileTimeErrorCodeTest);
-    defineReflectiveTests(CompileTimeErrorCodeSpecTest);
   });
 }
 
 @reflectiveTest
-class CompileTimeErrorCodeSpecTest extends ResolverTestCase {
-  test_constWithTypeParameters_direct() async {
-    Source source = addSource(r'''
-class A<T> {
-  static const V = const A<T>();
-  const A();
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [
-      CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
-      StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
-    ]);
-    verify([source]);
+class CompileTimeErrorCodeTest extends CompileTimeErrorCodeTestBase {
+  @override
+  @failingTest
+  test_awaitInWrongContext_sync() {
+    return super.test_awaitInWrongContext_sync();
   }
 
-  test_constWithTypeParameters_indirect() async {
-    Source source = addSource(r'''
-class A<T> {
-  static const V = const A<List<T>>();
-  const A();
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [
-      CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
-      StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
-    ]);
-    verify([source]);
+  @override
+  @failingTest
+  test_constEvalThrowsException() {
+    return super.test_constEvalThrowsException();
   }
 
-  test_invalidTypeArgumentInConstList() async {
-    Source source = addSource(r'''
-class A<E> {
-  m() {
-    return const <E>[];
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST]);
-    verify([source]);
+  @override
+  @failingTest
+  test_genericFunctionTypeArgument_typedef() {
+    return super.test_genericFunctionTypeArgument_typedef();
   }
 
-  test_invalidTypeArgumentInConstMap() async {
-    Source source = addSource(r'''
-class A<E> {
-  m() {
-    return const <String, E>{};
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]);
-    verify([source]);
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_async() {
+    return super.test_invalidIdentifierInAsync_async();
   }
 
-  test_mixinOfDisallowedClass_classTypeAlias_String_num() async {
-    Source source = addSource(r'''
-class A {}
-class C = A with String, num;''');
-    await computeAnalysisResult(source);
-    if (previewDart2) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE_FROM_MIXIN,
-        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
-        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
-        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-      ]);
-    }
-    verify([source]);
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_await() {
+    return super.test_invalidIdentifierInAsync_await();
+  }
+
+  @override
+  @failingTest
+  test_invalidIdentifierInAsync_yield() {
+    return super.test_invalidIdentifierInAsync_yield();
+  }
+
+  @override
+  @failingTest
+  test_mixinInference_noMatchingClass_typeParametersSupplied() {
+    return super.test_mixinInference_noMatchingClass_typeParametersSupplied();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_mixinInference_recursiveSubtypeCheck() {
+    return super.test_mixinInference_recursiveSubtypeCheck();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_mixinInference_recursiveSubtypeCheck_new_syntax() {
+    return super.test_mixinInference_recursiveSubtypeCheck_new_syntax();
+  }
+
+  @override
+  @failingTest
+  test_mixinOfNonClass() {
+    return super.test_mixinOfNonClass();
+  }
+
+  @override
+  @failingTest
+  test_objectCannotExtendAnotherClass() {
+    return super.test_objectCannotExtendAnotherClass();
+  }
+
+  @override
+  @failingTest
+  test_superInitializerInObject() {
+    return super.test_superInitializerInObject();
+  }
+
+  @override
+  @failingTest
+  test_yieldEachInNonGenerator_async() {
+    return super.test_yieldEachInNonGenerator_async();
+  }
+
+  @override
+  @failingTest
+  test_yieldEachInNonGenerator_sync() {
+    return super.test_yieldEachInNonGenerator_sync();
+  }
+
+  @override
+  @failingTest
+  test_yieldInNonGenerator_async() {
+    return super.test_yieldInNonGenerator_async();
+  }
+
+  @override
+  @failingTest
+  test_yieldInNonGenerator_sync() {
+    return super.test_yieldInNonGenerator_sync();
   }
 }
 
-@reflectiveTest
-class CompileTimeErrorCodeTest extends ResolverTestCase {
-  @override
-  AnalysisOptions get defaultAnalysisOptions => new AnalysisOptionsImpl();
-
+class CompileTimeErrorCodeTestBase extends ResolverTestCase {
   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
@@ -526,7 +543,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_awaitInWrongContext_sync() async {
     // This test requires better error recovery than we currently have. In
     // particular, we need to be able to distinguish between an await expression
@@ -1078,7 +1094,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_constEvalThrowsException() async {
     Source source = addSource(r'''
 class C {
@@ -1505,28 +1520,6 @@
     verify([source]);
   }
 
-  test_constWithNonConst_with() async {
-    Source source = addSource(r'''
-class B {
-  const B();
-}
-class C = B with M;
-class M {}
-const x = const C();
-main() {
-  print(x);
-}
-''');
-    await computeAnalysisResult(source);
-    // TODO(a14n): the error CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE is
-    // redundant and ought to be suppressed.
-    assertErrors(source, [
-      CompileTimeErrorCode.CONST_WITH_NON_CONST,
-      CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-    ]);
-    verify([source]);
-  }
-
   test_constWithNonConstantArgument_annotation() async {
     Source source = addSource(r'''
 class A {
@@ -1582,6 +1575,34 @@
     verify([source1]);
   }
 
+  test_constWithTypeParameters_direct() async {
+    Source source = addSource(r'''
+class A<T> {
+  static const V = const A<T>();
+  const A();
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
+      StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
+    ]);
+    verify([source]);
+  }
+
+  test_constWithTypeParameters_indirect() async {
+    Source source = addSource(r'''
+class A<T> {
+  static const V = const A<List<T>>();
+  const A();
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
+      StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
+    ]);
+    verify([source]);
+  }
+
   test_constWithUndefinedConstructor() async {
     Source source = addSource(r'''
 class A {
@@ -2471,7 +2492,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_genericFunctionTypeArgument_typedef() async {
     // TODO(mfairhurst) diagnose these parse errors to give the correct error
     Source source = addSource(r'''
@@ -3363,7 +3383,6 @@
     // no verify() call, "B" is not resolved
   }
 
-  @failingTest
   test_invalidIdentifierInAsync_async() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
@@ -3377,7 +3396,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_invalidIdentifierInAsync_await() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
@@ -3391,7 +3409,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_invalidIdentifierInAsync_yield() async {
     // TODO(brianwilkerson) Report this error.
     Source source = addSource(r'''
@@ -3611,6 +3628,32 @@
     verify([source]);
   }
 
+  test_invalidTypeArgumentInConstList() async {
+    Source source = addSource(r'''
+class A<E> {
+  m() {
+    return const <E>[];
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(
+        source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST]);
+    verify([source]);
+  }
+
+  test_invalidTypeArgumentInConstMap() async {
+    Source source = addSource(r'''
+class A<E> {
+  m() {
+    return const <String, E>{};
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(
+        source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]);
+    verify([source]);
+  }
+
   test_invalidUri_export() async {
     Source source = addSource("export 'ht:';");
     await computeAnalysisResult(source);
@@ -3816,93 +3859,6 @@
     ]);
   }
 
-  test_mixinHasNoConstructors_mixinApp() async {
-    Source source = addSource(r'''
-class B {
-  B({x});
-}
-class M {}
-class C = B with M;
-''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
-    verify([source]);
-  }
-
-  test_mixinHasNoConstructors_mixinClass() async {
-    Source source = addSource(r'''
-class B {
-  B({x});
-}
-class M {}
-class C extends B with M {}
-''');
-    // Note: the implicit call from C's default constructor to B() should not
-    // generate a further error (despite the fact that it's not forwarded),
-    // since CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job
-    // of explaining the probem to the user.
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
-    verify([source]);
-  }
-
-  test_mixinHasNoConstructors_mixinClass_explicitSuperCall() async {
-    Source source = addSource(r'''
-class B {
-  B({x});
-}
-class M {}
-class C extends B with M {
-  C() : super();
-}
-''');
-    // Note: the explicit call from C() to B() should not generate a further
-    // error (despite the fact that it's not forwarded), since
-    // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
-    // explaining the error to the user.
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
-    verify([source]);
-  }
-
-  test_mixinHasNoConstructors_mixinClass_implicitSuperCall() async {
-    Source source = addSource(r'''
-class B {
-  B({x});
-}
-class M {}
-class C extends B with M {
-  C();
-}
-''');
-    // Note: the implicit call from C() to B() should not generate a further
-    // error (despite the fact that it's not forwarded), since
-    // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
-    // explaining the error to the user.
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
-    verify([source]);
-  }
-
-  test_mixinHasNoConstructors_mixinClass_namedSuperCall() async {
-    Source source = addSource(r'''
-class B {
-  B.named({x});
-}
-class M {}
-class C extends B with M {
-  C() : super.named();
-}
-''');
-    // Note: the explicit call from C() to B.named() should not generate a
-    // further error (despite the fact that it's not forwarded), since
-    // CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS does a better job of
-    // explaining the error to the user.
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
-    verify([source]);
-  }
-
   test_mixinInference_matchingClass() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -3932,6 +3888,29 @@
     assertNoErrors(source);
   }
 
+  test_mixinInference_matchingClass_inPreviousMixin_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M1 implements A<B> {}
+mixin M2<T> on A<T> {}
+class C extends Object with M1, M2 {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_mixinInference_matchingClass_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C extends A<int> with M {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
   test_mixinInference_noMatchingClass() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -3962,6 +3941,30 @@
         source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
   }
 
+  test_mixinInference_noMatchingClass_namedMixinApplication_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C = Object with M;
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source,
+        [CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE]);
+  }
+
+  test_mixinInference_noMatchingClass_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C extends Object with M {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source,
+        [CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE]);
+  }
+
   test_mixinInference_noMatchingClass_noSuperclassConstraint() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -3976,6 +3979,17 @@
     assertNoErrors(source);
   }
 
+  test_mixinInference_noMatchingClass_noSuperclassConstraint_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M<T> {}
+class C extends Object with M {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
   test_mixinInference_noMatchingClass_typeParametersSupplied() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -3987,10 +4001,22 @@
 class C extends Object with M<int> {}
 ''');
     await computeAnalysisResult(source);
-    assertNoErrors(source);
+    assertErrors(source,
+        [CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE]);
   }
 
-  @failingTest // Does not work with old task model
+  test_mixinInference_noMatchingClass_typeParametersSupplied_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C extends Object with M<int> {}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source,
+        [CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE]);
+  }
+
   test_mixinInference_recursiveSubtypeCheck() async {
     // See dartbug.com/32353 for a detailed explanation.
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
@@ -4029,6 +4055,41 @@
     expect(mixins[0].toString(), 'ForwardingDirectory<_LocalDirectory>');
   }
 
+  test_mixinInference_recursiveSubtypeCheck_new_syntax() async {
+    // See dartbug.com/32353 for a detailed explanation.
+    Source source = addSource('''
+class ioDirectory implements ioFileSystemEntity {}
+
+class ioFileSystemEntity {}
+
+abstract class _LocalDirectory
+    extends _LocalFileSystemEntity<_LocalDirectory, ioDirectory>
+    with ForwardingDirectory, DirectoryAddOnsMixin {}
+
+abstract class _LocalFileSystemEntity<T extends FileSystemEntity,
+  D extends ioFileSystemEntity> extends ForwardingFileSystemEntity<T, D> {}
+
+abstract class FileSystemEntity implements ioFileSystemEntity {}
+
+abstract class ForwardingFileSystemEntity<T extends FileSystemEntity,
+  D extends ioFileSystemEntity> implements FileSystemEntity {}
+
+
+mixin ForwardingDirectory<T extends Directory>
+    on ForwardingFileSystemEntity<T, ioDirectory>
+    implements Directory {}
+
+abstract class Directory implements FileSystemEntity, ioDirectory {}
+
+mixin DirectoryAddOnsMixin implements Directory {}
+''');
+    var analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    var mixins =
+        analysisResult.unit.declaredElement.getType('_LocalDirectory').mixins;
+    expect(mixins[0].toString(), 'ForwardingDirectory<_LocalDirectory>');
+  }
+
   test_mixinInheritsFromNotObject_classDeclaration_extends() async {
     Source source = addSource(r'''
 class A {}
@@ -4165,7 +4226,26 @@
     verify([source]);
   }
 
-  @failingTest
+  test_mixinOfDisallowedClass_classTypeAlias_String_num() async {
+    Source source = addSource(r'''
+class A {}
+class C = A with String, num;''');
+    await computeAnalysisResult(source);
+    if (previewDart2) {
+      assertErrors(source, [
+        StrongModeCode.INVALID_METHOD_OVERRIDE_FROM_MIXIN,
+        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
+        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+      ]);
+    } else {
+      assertErrors(source, [
+        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
+        CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+      ]);
+    }
+    verify([source]);
+  }
+
   test_mixinOfNonClass() async {
     // TODO(brianwilkerson) Compare with MIXIN_WITH_NON_CLASS_SUPERCLASS.
     Source source = addSource(r'''
@@ -4327,208 +4407,6 @@
     verify([source]);
   }
 
-  test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {
-  C(x) : super();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {
-  C();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B.named({x});
-  B.named2(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {
-  C(x) : super.named();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
-    // Don't verify since call to super.named() can't be resolved.
-  }
-
-  test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B([x]);
-  B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {
-  C();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.other();
-}
-class C extends B with M {
-  C(x) : super();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorExplicit_mixinWithNamedParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.named();
-}
-class C extends B with M {
-  C();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B.named({x});
-  B.other();
-}
-class C extends B with M {
-  C(x) : super.named();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
-    // Don't verify since call to super.named() can't be resolved.
-  }
-
-  test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B([x]);
-  B.other();
-}
-class C extends B with M {
-  C();
-}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B([x]);
-  B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
-}
-class Mixed = B with M;
-class C extends Mixed {}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorImplicit_mixinWithNamedParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B({x});
-  B.other();
-}
-class C extends B with M {}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    verify([source]);
-  }
-
-  test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam() async {
-    Source source = addSource(r'''
-class M {}
-class B {
-  B([x]);
-  B.other();
-}
-class C extends B with M {}
-''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    verify([source]);
-  }
-
   test_noDefaultSuperConstructorImplicit_superHasParameters() async {
     Source source = addSource(r'''
 class A {
@@ -5201,7 +5079,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_objectCannotExtendAnotherClass() async {
     Source source = addSource(r'''
 ''');
@@ -6181,7 +6058,6 @@
     // no verify(), 'super.y' is not resolved
   }
 
-  @failingTest
   test_superInitializerInObject() async {
     Source source = addSource(r'''
 ''');
@@ -6725,7 +6601,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_yieldEachInNonGenerator_async() async {
     // TODO(brianwilkerson) We are currently parsing the yield statement as a
     // binary expression.
@@ -6738,7 +6613,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_yieldEachInNonGenerator_sync() async {
     // TODO(brianwilkerson) We are currently parsing the yield statement as a
     // binary expression.
@@ -6751,7 +6625,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_yieldInNonGenerator_async() async {
     // TODO(brianwilkerson) We are currently trying to parse the yield statement
     // as a binary expression.
@@ -6764,7 +6637,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_yieldInNonGenerator_sync() async {
     // TODO(brianwilkerson) We are currently trying to parse the yield statement
     // as a binary expression.
diff --git a/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart
index 270773f..c524c9c 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_driver_test.dart
@@ -13,25 +13,31 @@
 }
 
 @reflectiveTest
-class NonErrorResolverTest_Driver extends NonErrorResolverTest {
+class NonErrorResolverTest_Driver extends NonErrorResolverTestBase {
   @override
   bool get enableNewAnalysisDriver => true;
 
-  @override // Passes with driver
-  test_infer_mixin() => super.test_infer_mixin();
+  @override
+  @failingTest
+  test_constConstructorWithMixinWithField_withoutSuperMixins() {
+    return super.test_constConstructorWithMixinWithField_withoutSuperMixins();
+  }
 
-  @override // Passes with driver
-  test_infer_mixin_multiplyConstrained() =>
-      super.test_infer_mixin_multiplyConstrained();
+  @override
+  @failingTest
+  test_intLiteralInDoubleContext_const_exact() {
+    return super.test_intLiteralInDoubleContext_const_exact();
+  }
 
-  @override // Passes with driver
-  test_infer_mixin_with_substitution() =>
-      super.test_infer_mixin_with_substitution();
+  @override
+  @failingTest
+  test_null_callMethod() {
+    return super.test_null_callMethod();
+  }
 
-  @override // Passes with driver
-  test_infer_mixin_with_substitution_functionType() =>
-      super.test_infer_mixin_with_substitution_functionType();
-
-  @override // Passes with driver
-  test_issue_32394() => super.test_issue_32394();
+  @override
+  @failingTest
+  test_null_callOperator() {
+    return super.test_null_callOperator();
+  }
 }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index f411b0f..d224d7f 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -25,7 +25,99 @@
 }
 
 @reflectiveTest
-class NonErrorResolverTest extends ResolverTestCase {
+class NonErrorResolverTest extends NonErrorResolverTestBase {
+  @override
+  @failingTest
+  test_constConstructorWithMixinWithField_withoutSuperMixins() {
+    return super.test_constConstructorWithMixinWithField_withoutSuperMixins();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin() {
+    return super.test_infer_mixin();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin_multiplyConstrained() {
+    return super.test_infer_mixin_multiplyConstrained();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin_new_syntax() {
+    return super.test_infer_mixin_new_syntax();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin_with_substitution() {
+    return super.test_infer_mixin_with_substitution();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin_with_substitution_functionType() {
+    return super.test_infer_mixin_with_substitution_functionType();
+  }
+
+  @override
+  @failingTest
+  test_infer_mixin_with_substitution_functionType_new_syntax() {
+    return super.test_infer_mixin_with_substitution_functionType_new_syntax();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_infer_mixin_with_substitution_new_syntax() {
+    return super.test_infer_mixin_with_substitution_new_syntax();
+  }
+
+  @override
+  @failingTest
+  test_intLiteralInDoubleContext_const_exact() {
+    return super.test_intLiteralInDoubleContext_const_exact();
+  }
+
+  @override
+  @failingTest // Fails with the old task model
+  test_issue_32394() {
+    return super.test_issue_32394();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_mixin_of_mixin_type_argument_inference_cascaded_mixin() {
+    return super.test_mixin_of_mixin_type_argument_inference_cascaded_mixin();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_mixinInference_with_actual_mixins() {
+    return super.test_mixinInference_with_actual_mixins();
+  }
+
+  @override
+  @failingTest // Does not work with old task model
+  test_mixinInference_with_actual_mixins_supermixins_enabled() {
+    return super.test_mixinInference_with_actual_mixins_supermixins_enabled();
+  }
+
+  @override
+  @failingTest
+  test_null_callMethod() {
+    return super.test_null_callMethod();
+  }
+
+  @override
+  @failingTest
+  test_null_callOperator() {
+    return super.test_null_callOperator();
+  }
+}
+
+class NonErrorResolverTestBase extends ResolverTestCase {
   @override
   AnalysisOptions get defaultAnalysisOptions => new AnalysisOptionsImpl();
 
@@ -1215,7 +1307,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_constConstructorWithMixinWithField_withoutSuperMixins() async {
     Source source = addSource(r'''
 class M {
@@ -1243,6 +1334,18 @@
     verify([source]);
   }
 
+  test_constConstructorWithMixinWithField_withSuperMixins_new_syntax() async {
+    Source source = addSource(r'''
+mixin M {
+}
+class A extends Object with M {
+  const A();
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_constConstructorWithNonConstSuper_explicit() async {
     Source source = addSource(r'''
 class A {
@@ -1756,21 +1859,6 @@
     verify([source]);
   }
 
-  test_extraPositionalArguments_implicitConstructor() async {
-    Source source = addSource(r'''
-class A<E extends num> {
-  A(E x, E y);
-}
-class M {}
-class B<E extends num> = A<E> with M;
-void main() {
-   B<int> x = new B<int>(0,0);
-}''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_extraPositionalArguments_typedef_local() async {
     Source source = addSource(r'''
 typedef A(p1, p2);
@@ -2264,29 +2352,6 @@
     verify([source]);
   }
 
-  test_implicitConstructorDependencies() async {
-    // No warning should be generated for the code below; this requires that
-    // implicit constructors are generated for C1 before C2, even though C1
-    // follows C2 in the file.  See dartbug.com/21600.
-    Source source = addSource(r'''
-class B {
-  B(int i);
-}
-class M1 {}
-class M2 {}
-
-class C2 = C1 with M2;
-class C1 = B with M1;
-
-main() {
-  new C2(5);
-}
-''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_implicitThisReferenceInInitializer_constructorName() async {
     Source source = addSource(r'''
 class A {
@@ -2613,7 +2678,6 @@
     verify([source]);
   }
 
-  @failingTest // Does not work with old task model
   test_infer_mixin() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -2637,7 +2701,6 @@
     expect(classC.mixins[0].toString(), 'M<B>');
   }
 
-  @failingTest // Does not work with old task model
   test_infer_mixin_multiplyConstrained() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -2667,7 +2730,26 @@
     expect(classF.mixins[0].toString(), 'M<C, D>');
   }
 
-  @failingTest // Does not work with old task model
+  test_infer_mixin_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+
+class B {}
+
+mixin M<T> on A<T> {}
+
+class C extends A<B> with M {}
+''');
+    TestAnalysisResult analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    CompilationUnit unit = analysisResult.unit;
+    ClassElement classC =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).getType('C');
+    expect(classC.mixins, hasLength(1));
+    expect(classC.mixins[0].toString(), 'M<B>');
+  }
+
   test_infer_mixin_with_substitution() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -2691,7 +2773,6 @@
     expect(classC.mixins[0].toString(), 'M<B>');
   }
 
-  @failingTest // Does not work with old task model
   test_infer_mixin_with_substitution_functionType() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -2714,6 +2795,45 @@
     expect(classC.mixins[0].toString(), 'M<int, String>');
   }
 
+  test_infer_mixin_with_substitution_functionType_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+
+class B {}
+
+mixin M<T, U> on A<T Function(U)> {}
+
+class C extends A<int Function(String)> with M {}
+''');
+    TestAnalysisResult analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    CompilationUnit unit = analysisResult.unit;
+    ClassElement classC =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).getType('C');
+    expect(classC.mixins, hasLength(1));
+    expect(classC.mixins[0].toString(), 'M<int, String>');
+  }
+
+  test_infer_mixin_with_substitution_new_syntax() async {
+    Source source = addSource('''
+abstract class A<T> {}
+
+class B {}
+
+mixin M<T> on A<List<T>> {}
+
+class C extends A<List<B>> with M {}
+''');
+    TestAnalysisResult analysisResult = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    CompilationUnit unit = analysisResult.unit;
+    ClassElement classC =
+        resolutionMap.elementDeclaredByCompilationUnit(unit).getType('C');
+    expect(classC.mixins, hasLength(1));
+    expect(classC.mixins[0].toString(), 'M<B>');
+  }
+
   test_initializingFormalForNonExistentField() async {
     Source source = addSource(r'''
 class A {
@@ -2883,7 +3003,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_intLiteralInDoubleContext_const_exact() async {
     // TODO(mfairhurst): get the commented out assertions to pass.
     Source source = addSource(r'''
@@ -3593,7 +3712,6 @@
     verify([source]);
   }
 
-  @failingTest // Fails with the old task model
   test_issue_32394() async {
     Source source = addSource('''
 var x = y.map((a) => a.toString());
@@ -3836,6 +3954,43 @@
     verify([source]);
   }
 
+  test_mixin_of_mixin_type_argument_inference() async {
+    // In the code below, B's superclass constraints don't include A, because
+    // superclass constraints are determined from the mixin's superclass, and
+    // B's superclass is Object.  So no mixin type inference is attempted, and
+    // "with B" is interpreted as "with B<dynamic>".
+    Source source = addSource('''
+class A<T> {}
+class B<T> = Object with A<T>;
+class C = Object with B;
+''');
+    var result = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    var bReference = result.unit.declaredElement.getType('C').mixins[0];
+    expect(bReference.typeArguments[0].toString(), 'dynamic');
+  }
+
+  test_mixin_of_mixin_type_argument_inference_cascaded_mixin() async {
+    // In the code below, B has a single superclass constraint, A1, because
+    // superclass constraints are determined from the mixin's superclass, and
+    // B's superclass is "Object with A1<T>".  So mixin type inference succeeds
+    // (since C's base class implements A1<int>), and "with B" is interpreted as
+    // "with B<int>".
+    Source source = addSource('''
+class A1<T> {}
+class A2<T> {}
+class B<T> = Object with A1<T>, A2<T>;
+class Base implements A1<int> {}
+class C = Base with B;
+''');
+    var result = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    var bReference = result.unit.declaredElement.getType('C').mixins[0];
+    expect(bReference.typeArguments[0].toString(), 'int');
+  }
+
   test_mixinDeclaresConstructor() async {
     Source source = addSource(r'''
 class A {
@@ -3858,6 +4013,61 @@
     verify([source]);
   }
 
+  test_mixinInference_with_actual_mixins() async {
+    Source source = addSource('''
+class I<X> {}
+
+mixin M0<T> on I<T> {}
+
+mixin M1<T> on I<T> {
+  T foo() => null;
+}
+
+class A = I<int> with M0, M1;
+
+void main () {
+  var x = new A().foo();
+}
+''');
+    var result = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    var main = result.unit.declarations.last as FunctionDeclaration;
+    var mainBody = main.functionExpression.body as BlockFunctionBody;
+    var xDecl = mainBody.block.statements[0] as VariableDeclarationStatement;
+    var xElem = xDecl.variables.variables[0].declaredElement;
+    expect(xElem.type.toString(), 'int');
+  }
+
+  test_mixinInference_with_actual_mixins_supermixins_enabled() async {
+    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+    options.enableSuperMixins = true;
+    resetWith(options: options);
+    Source source = addSource('''
+class I<X> {}
+
+mixin M0<T> on I<T> {}
+
+mixin M1<T> on I<T> {
+  T foo() => null;
+}
+
+class A = I<int> with M0, M1;
+
+void main () {
+  var x = new A().foo();
+}
+''');
+    var result = await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+    var main = result.unit.declarations.last as FunctionDeclaration;
+    var mainBody = main.functionExpression.body as BlockFunctionBody;
+    var xDecl = mainBody.block.statements[0] as VariableDeclarationStatement;
+    var xElem = xDecl.variables.variables[0].declaredElement;
+    expect(xElem.type.toString(), 'int');
+  }
+
   test_mixinInheritsFromNotObject_classDeclaration_extends() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -3865,7 +4075,17 @@
     Source source = addSource(r'''
 class A {}
 class B extends A {}
-class C extends Object with B {}''');
+class C extends A with B {}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_mixinInheritsFromNotObject_classDeclaration_extends_new_syntax() async {
+    Source source = addSource(r'''
+class A {}
+mixin B on A {}
+class C extends A with B {}''');
     await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
@@ -3901,7 +4121,17 @@
     Source source = addSource(r'''
 class A {}
 class B extends A {}
-class C = Object with B;''');
+class C = A with B;''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_mixinInheritsFromNotObject_typeAlias_extends_new_syntax() async {
+    Source source = addSource(r'''
+class A {}
+mixin B on A {}
+class C = A with B;''');
     await computeAnalysisResult(source);
     assertNoErrors(source);
     verify([source]);
@@ -3944,6 +4174,17 @@
     verify([source]);
   }
 
+  test_mixinReferencesSuper_new_syntax() async {
+    Source source = addSource(r'''
+mixin A {
+  toString() => super.toString();
+}
+class B extends Object with A {}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_multipleSuperInitializers_no() async {
     Source source = addSource(r'''
 class A {}
@@ -4743,7 +4984,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_null_callMethod() async {
     Source source = addSource(r'''
 main() {
@@ -4753,7 +4993,6 @@
     assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
-  @failingTest
   test_null_callOperator() async {
     Source source = addSource(r'''
 main() {
@@ -5845,18 +6084,6 @@
     verify([source]);
   }
 
-  test_undefinedConstructorInInitializer_implicit_typeAlias() async {
-    Source source = addSource(r'''
-class M {}
-class A = Object with M;
-class B extends A {
-  B();
-}''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_undefinedConstructorInInitializer_redirecting() async {
     Source source = addSource(r'''
 class Foo {
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 070694e..86c3bec 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -15470,6 +15470,29 @@
     expect(statement.rightBracket, isNotNull);
   }
 
+  void test_parseSwitchStatement_labeledCase2() {
+    SwitchStatement statement =
+        parseStatement('switch (a) {l1: case 0: l2: case 1: return;}');
+    assertNoErrors();
+    expect(statement.switchKeyword, isNotNull);
+    expect(statement.leftParenthesis, isNotNull);
+    expect(statement.expression, isNotNull);
+    expect(statement.rightParenthesis, isNotNull);
+    expect(statement.leftBracket, isNotNull);
+    expect(statement.members, hasLength(2));
+    {
+      List<Label> labels = statement.members[0].labels;
+      expect(labels, hasLength(1));
+      expect(labels[0].label.inDeclarationContext(), isTrue);
+    }
+    {
+      List<Label> labels = statement.members[1].labels;
+      expect(labels, hasLength(1));
+      expect(labels[0].label.inDeclarationContext(), isTrue);
+    }
+    expect(statement.rightBracket, isNotNull);
+  }
+
   void test_parseSwitchStatement_labeledDefault() {
     var statement =
         parseStatement('switch (a) {l1: l2: l3: default:}') as SwitchStatement;
@@ -15490,6 +15513,29 @@
     expect(statement.rightBracket, isNotNull);
   }
 
+  void test_parseSwitchStatement_labeledDefault2() {
+    SwitchStatement statement =
+        parseStatement('switch (a) {l1: case 0: l2: default: return;}');
+    assertNoErrors();
+    expect(statement.switchKeyword, isNotNull);
+    expect(statement.leftParenthesis, isNotNull);
+    expect(statement.expression, isNotNull);
+    expect(statement.rightParenthesis, isNotNull);
+    expect(statement.leftBracket, isNotNull);
+    expect(statement.members, hasLength(2));
+    {
+      List<Label> labels = statement.members[0].labels;
+      expect(labels, hasLength(1));
+      expect(labels[0].label.inDeclarationContext(), isTrue);
+    }
+    {
+      List<Label> labels = statement.members[1].labels;
+      expect(labels, hasLength(1));
+      expect(labels[0].label.inDeclarationContext(), isTrue);
+    }
+    expect(statement.rightBracket, isNotNull);
+  }
+
   void test_parseSwitchStatement_labeledStatementInCase() {
     var statement = parseStatement('switch (a) {case 0: f(); l1: g(); break;}')
         as SwitchStatement;
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 0f806d1..a786c34 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -28,7 +28,6 @@
 import 'package:analyzer/src/generated/testing/element_factory.dart';
 import 'package:analyzer/src/generated/testing/element_search.dart';
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/source/source_resource.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -1420,7 +1419,7 @@
     _listener.assertNoErrors();
   }
 
-  void setUp() {
+  void setUp({bool shouldSetElementSupertypes: false}) {
     _listener = new GatheringErrorListener();
     MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(
@@ -1435,7 +1434,8 @@
     libraryScope = new LibraryScope(element);
     _visitor = new TypeResolverVisitor(
         element, librarySource, _typeProvider, _listener,
-        nameScope: libraryScope);
+        nameScope: libraryScope,
+        shouldSetElementSupertypes: shouldSetElementSupertypes);
   }
 
   test_modeApi() async {
@@ -1882,6 +1882,7 @@
     // class B {}
     // class C {}
     // class D {}
+    setUp(shouldSetElementSupertypes: true);
     ClassElement elementA = ElementFactory.classElement2("A");
     ClassElement elementB = ElementFactory.classElement2("B");
     ClassElement elementC = ElementFactory.classElement2("C");
@@ -1911,6 +1912,7 @@
     // class B extends A {
     //   void A() {}
     // }
+    setUp(shouldSetElementSupertypes: true);
     ClassElementImpl elementA = ElementFactory.classElement2("A");
     ClassElementImpl elementB = ElementFactory.classElement2("B");
     elementB.methods = <MethodElement>[
@@ -1926,124 +1928,6 @@
     _listener.assertNoErrors();
   }
 
-  test_visitClassTypeAlias() async {
-    // class A = B with C implements D;
-    ClassElement elementA = ElementFactory.classElement2("A");
-    ClassElement elementB = ElementFactory.classElement2("B");
-    ClassElement elementC = ElementFactory.classElement2("C");
-    ClassElement elementD = ElementFactory.classElement2("D");
-    WithClause withClause =
-        AstTestFactory.withClause([AstTestFactory.typeName(elementC)]);
-    ImplementsClause implementsClause =
-        AstTestFactory.implementsClause([AstTestFactory.typeName(elementD)]);
-    ClassTypeAlias alias = AstTestFactory.classTypeAlias("A", null, null,
-        AstTestFactory.typeName(elementB), withClause, implementsClause);
-    alias.name.staticElement = elementA;
-    _resolveNode(alias, [elementA, elementB, elementC, elementD]);
-    expect(elementA.supertype, same(elementB.type));
-    List<InterfaceType> mixins = elementA.mixins;
-    expect(mixins, hasLength(1));
-    expect(mixins[0], same(elementC.type));
-    List<InterfaceType> interfaces = elementA.interfaces;
-    expect(interfaces, hasLength(1));
-    expect(interfaces[0], same(elementD.type));
-    _listener.assertNoErrors();
-  }
-
-  test_visitClassTypeAlias_constructorWithOptionalParams_ignored() async {
-    // class T {}
-    // class B {
-    //   B.c1();
-    //   B.c2([T a0]);
-    //   B.c3({T a0});
-    // }
-    // class M {}
-    // class C = B with M
-    ClassElement classT = ElementFactory.classElement2('T', []);
-    ClassElementImpl classB = ElementFactory.classElement2('B', []);
-    ConstructorElementImpl constructorBc1 =
-        ElementFactory.constructorElement2(classB, 'c1', []);
-    ConstructorElementImpl constructorBc2 =
-        ElementFactory.constructorElement2(classB, 'c2', [classT.type]);
-    (constructorBc2.parameters[0] as ParameterElementImpl).parameterKind =
-        ParameterKind.POSITIONAL;
-    ConstructorElementImpl constructorBc3 =
-        ElementFactory.constructorElement2(classB, 'c3', [classT.type]);
-    (constructorBc3.parameters[0] as ParameterElementImpl).parameterKind =
-        ParameterKind.NAMED;
-    classB.constructors = [constructorBc1, constructorBc2, constructorBc3];
-    ClassElement classM = ElementFactory.classElement2('M', []);
-    WithClause withClause =
-        AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]);
-    ClassElement classC = ElementFactory.classTypeAlias2('C', []);
-    ClassTypeAlias alias = AstTestFactory.classTypeAlias(
-        'C', null, null, AstTestFactory.typeName(classB, []), withClause, null);
-    alias.name.staticElement = classC;
-    _resolveNode(alias, [classT, classB, classM, classC]);
-    expect(classC.constructors, hasLength(1));
-    ConstructorElement constructor = classC.constructors[0];
-    expect(constructor.isFactory, isFalse);
-    expect(constructor.isSynthetic, isTrue);
-    expect(constructor.name, 'c1');
-    expect(constructor.parameters, isEmpty);
-  }
-
-  test_visitClassTypeAlias_constructorWithParams() async {
-    // class T {}
-    // class B {
-    //   B(T a0);
-    // }
-    // class M {}
-    // class C = B with M
-    ClassElement classT = ElementFactory.classElement2('T', []);
-    ClassElementImpl classB = ElementFactory.classElement2('B', []);
-    ConstructorElementImpl constructorB =
-        ElementFactory.constructorElement2(classB, '', [classT.type]);
-    classB.constructors = [constructorB];
-    ClassElement classM = ElementFactory.classElement2('M', []);
-    WithClause withClause =
-        AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]);
-    ClassElement classC = ElementFactory.classTypeAlias2('C', []);
-    ClassTypeAlias alias = AstTestFactory.classTypeAlias(
-        'C', null, null, AstTestFactory.typeName(classB, []), withClause, null);
-    alias.name.staticElement = classC;
-    _resolveNode(alias, [classT, classB, classM, classC]);
-    expect(classC.constructors, hasLength(1));
-    ConstructorElement constructor = classC.constructors[0];
-    expect(constructor.isFactory, isFalse);
-    expect(constructor.isSynthetic, isTrue);
-    expect(constructor.name, '');
-    expect(constructor.parameters, hasLength(1));
-    expect(constructor.parameters[0].type, equals(classT.type));
-    expect(constructor.parameters[0].name,
-        equals(constructorB.parameters[0].name));
-  }
-
-  test_visitClassTypeAlias_defaultConstructor() async {
-    // class B {}
-    // class M {}
-    // class C = B with M
-    ClassElementImpl classB = ElementFactory.classElement2('B', []);
-    ConstructorElementImpl constructorB =
-        ElementFactory.constructorElement2(classB, '', []);
-    constructorB.setModifier(Modifier.SYNTHETIC, true);
-    classB.constructors = [constructorB];
-    ClassElement classM = ElementFactory.classElement2('M', []);
-    WithClause withClause =
-        AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]);
-    ClassElement classC = ElementFactory.classTypeAlias2('C', []);
-    ClassTypeAlias alias = AstTestFactory.classTypeAlias(
-        'C', null, null, AstTestFactory.typeName(classB, []), withClause, null);
-    alias.name.staticElement = classC;
-    _resolveNode(alias, [classB, classM, classC]);
-    expect(classC.constructors, hasLength(1));
-    ConstructorElement constructor = classC.constructors[0];
-    expect(constructor.isFactory, isFalse);
-    expect(constructor.isSynthetic, isTrue);
-    expect(constructor.name, '');
-    expect(constructor.parameters, isEmpty);
-  }
-
   test_visitFieldFormalParameter_functionType() async {
     InterfaceType intType = _typeProvider.intType;
     TypeName intTypeName = AstTestFactory.typeName4('int');
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index b29d20d..5003da0 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -1389,6 +1389,17 @@
     assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
+  test_generalizedVoid_negateVoidValueError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  !x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
   test_generalizedVoid_throwVoidValueError() async {
     Source source = addSource(r'''
 void main() {
@@ -1400,6 +1411,21 @@
     assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
+  test_generalizedVoid_unaryNegativeVoidValueError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  -x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [
+      StaticWarningCode.USE_OF_VOID_RESULT,
+      // TODO(mfairhurst) suppress UNDEFINED_OPERATOR
+      StaticTypeWarningCode.UNDEFINED_OPERATOR
+    ]);
+  }
+
   test_generalizedVoid_useOfInForeachIterableError() async {
     Source source = addSource(r'''
 void main() {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index ca03d8e..1fd77a5 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -2311,6 +2311,17 @@
     expect(_getTopLevelVarType(result.unit, 'b'), 'B');
   }
 
+  test_instantiateToBounds_invalid() async {
+    var a = _p('/test/lib/a.dart');
+    provider.newFile(a, r'''
+class A<T extends B> {}
+class B<T extends A<B>> {}
+''');
+
+    driver.addFile(a);
+    await waitForIdleWithoutExceptions();
+  }
+
   test_knownFiles() async {
     var a = _p('/test/lib/a.dart');
     var b = _p('/test/lib/b.dart');
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 0379c6b..104997b 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -588,6 +588,43 @@
     expect(files, [filePackageUri, fileFileUri]);
   }
 
+  test_getFilesSubtypingName() {
+    String a = _p('/a.dart');
+    String b = _p('/b.dart');
+
+    provider.newFile(a, r'''
+class A {}
+class B extends A {}
+''');
+    provider.newFile(b, r'''
+class A {}
+class D implements A {}
+''');
+
+    FileState aFile = fileSystemState.getFileForPath(a);
+    FileState bFile = fileSystemState.getFileForPath(b);
+
+    expect(
+      fileSystemState.getFilesSubtypingName('A'),
+      unorderedEquals([aFile, bFile]),
+    );
+
+    // Change b.dart so that it does not subtype A.
+    provider.newFile(b, r'''
+class C {}
+class D implements C {}
+''');
+    bFile.refresh();
+    expect(
+      fileSystemState.getFilesSubtypingName('A'),
+      unorderedEquals([aFile]),
+    );
+    expect(
+      fileSystemState.getFilesSubtypingName('C'),
+      unorderedEquals([bFile]),
+    );
+  }
+
   test_hasUri() {
     Uri uri = Uri.parse('package:aaa/foo.dart');
     String templatePath = _p('/aaa/lib/foo.dart');
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 179e4c4..e3106d1 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -1014,27 +1014,20 @@
 }
 ''');
 
-    {
-      AnalysisDriverSubtype X =
-          index.subtypes.singleWhere((t) => t.name == 'X');
-      expect(X.supertypes, ['$libP;A']);
-      expect(X.members, ['field1', 'field2', 'getter1', 'method1', 'setter1']);
-    }
+    expect(index.supertypes, hasLength(6));
+    expect(index.subtypes, hasLength(6));
 
-    {
-      AnalysisDriverSubtype Y =
-          index.subtypes.singleWhere((t) => t.name == 'Y');
-      expect(
-          Y.supertypes, ['dart:core;dart:core;Object', '$libP;B', '$libP;C']);
-      expect(Y.members, ['methodY']);
-    }
-
-    {
-      AnalysisDriverSubtype Z =
-          index.subtypes.singleWhere((t) => t.name == 'Z');
-      expect(Z.supertypes, ['$libP;D', '$libP;E']);
-      expect(Z.members, ['methodZ']);
-    }
+    _assertSubtype(0, 'dart:core;dart:core;Object', 'Y', ['methodY']);
+    _assertSubtype(
+      1,
+      '$libP;A',
+      'X',
+      ['field1', 'field2', 'getter1', 'method1', 'setter1'],
+    );
+    _assertSubtype(2, '$libP;B', 'Y', ['methodY']);
+    _assertSubtype(3, '$libP;C', 'Y', ['methodY']);
+    _assertSubtype(4, '$libP;D', 'Z', ['methodZ']);
+    _assertSubtype(5, '$libP;E', 'Z', ['methodZ']);
   }
 
   test_subtypes_classTypeAlias() async {
@@ -1052,19 +1045,16 @@
 class Y = A with B implements C, D;
 ''');
 
-    {
-      AnalysisDriverSubtype X =
-          index.subtypes.singleWhere((t) => t.name == 'X');
-      expect(X.supertypes, ['$libP;A', '$libP;B', '$libP;C']);
-      expect(X.members, isEmpty);
-    }
+    expect(index.supertypes, hasLength(7));
+    expect(index.subtypes, hasLength(7));
 
-    {
-      AnalysisDriverSubtype Y =
-          index.subtypes.singleWhere((t) => t.name == 'Y');
-      expect(Y.supertypes, ['$libP;A', '$libP;B', '$libP;C', '$libP;D']);
-      expect(Y.members, isEmpty);
-    }
+    _assertSubtype(0, '$libP;A', 'X', []);
+    _assertSubtype(1, '$libP;A', 'Y', []);
+    _assertSubtype(2, '$libP;B', 'X', []);
+    _assertSubtype(3, '$libP;B', 'Y', []);
+    _assertSubtype(4, '$libP;C', 'X', []);
+    _assertSubtype(5, '$libP;C', 'Y', []);
+    _assertSubtype(6, '$libP;D', 'Y', []);
   }
 
   test_subtypes_dynamic() async {
@@ -1074,9 +1064,8 @@
 }
 ''');
 
-    AnalysisDriverSubtype X = index.subtypes.singleWhere((t) => t.name == 'X');
-    expect(X.supertypes, isEmpty);
-    expect(X.members, ['foo']);
+    expect(index.supertypes, isEmpty);
+    expect(index.subtypes, isEmpty);
   }
 
   test_subtypes_mixinDeclaration() async {
@@ -1095,17 +1084,15 @@
 mixin Y on A, B implements C;
 ''');
 
-    {
-      var X = index.subtypes.singleWhere((t) => t.name == 'X');
-      expect(X.supertypes, ['$libP;A', '$libP;B', '$libP;C']);
-      expect(X.members, isEmpty);
-    }
+    expect(index.supertypes, hasLength(6));
+    expect(index.subtypes, hasLength(6));
 
-    {
-      var Y = index.subtypes.singleWhere((t) => t.name == 'Y');
-      expect(Y.supertypes, ['$libP;A', '$libP;B', '$libP;C']);
-      expect(Y.members, isEmpty);
-    }
+    _assertSubtype(0, '$libP;A', 'X', []);
+    _assertSubtype(1, '$libP;A', 'Y', []);
+    _assertSubtype(2, '$libP;B', 'X', []);
+    _assertSubtype(3, '$libP;B', 'Y', []);
+    _assertSubtype(4, '$libP;C', 'X', []);
+    _assertSubtype(5, '$libP;C', 'Y', []);
   }
 
   test_usedName_inLibraryIdentifier() async {
@@ -1213,6 +1200,14 @@
         'not found\n$element $expectedRelationKind at $expectedLocation');
   }
 
+  void _assertSubtype(
+      int i, String superEncoded, String subName, List<String> members) {
+    expect(index.strings[index.supertypes[i]], superEncoded);
+    var subtype = index.subtypes[i];
+    expect(index.strings[subtype.name], subName);
+    expect(_decodeStringList(subtype.members), members);
+  }
+
   void _assertUsedName(String name, IndexRelationKind kind,
       ExpectedLocation expectedLocation, bool isNot) {
     int nameId = _getStringId(name);
@@ -1233,6 +1228,10 @@
     _failWithIndexDump('Not found $name $kind at $expectedLocation');
   }
 
+  List<String> _decodeStringList(List<int> stringIds) {
+    return stringIds.map((i) => index.strings[i]).toList();
+  }
+
   ExpectedLocation _expectedLocation(String search, bool isQualified,
       {int length}) {
     int offset = findOffset(search);
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 7f21b03..c07703f 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
new file mode 100644
index 0000000..aea7e0f
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -0,0 +1,136 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ClassAliasDriverResolutionTest);
+    defineReflectiveTests(ClassAliasTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class ClassAliasDriverResolutionTest extends DriverResolutionTest
+    with ClassAliasResolutionMixin {}
+
+abstract class ClassAliasResolutionMixin implements ResolutionTest {
+  test_defaultConstructor() async {
+    addTestFile(r'''
+class A {}
+class M {}
+class X = A with M;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+    assertConstructors(findElement.class_('X'), ['X() → X']);
+  }
+
+  test_element() async {
+    addTestFile(r'''
+class A {}
+class B {}
+class C {}
+
+class X = A with B implements C;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var x = findElement.class_('X');
+
+    assertTypeName(findNode.typeName('A with'), findElement.class_('A'), 'A');
+    assertTypeName(findNode.typeName('B impl'), findElement.class_('B'), 'B');
+    assertTypeName(findNode.typeName('C;'), findElement.class_('C'), 'C');
+
+    assertElementTypeString(x.supertype, 'A');
+    assertElementTypeStrings(x.mixins, ['B']);
+    assertElementTypeStrings(x.interfaces, ['C']);
+  }
+
+  @failingTest
+  test_implicitConstructors_const() async {
+    addTestFile(r'''
+class A {
+  const A();
+}
+
+class M {}
+
+class C = A with M;
+
+const x = const C();
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+    // TODO(scheglov) add also negative test with fields
+  }
+
+  test_implicitConstructors_dependencies() async {
+    addTestFile(r'''
+class A {
+  A(int i);
+}
+class M1 {}
+class M2 {}
+
+class C2 = C1 with M2;
+class C1 = A with M1;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    assertConstructors(findElement.class_('C1'), ['C1(int i) → C1']);
+    assertConstructors(findElement.class_('C2'), ['C2(int i) → C2']);
+  }
+
+  test_implicitConstructors_optionalParameters() async {
+    addTestFile(r'''
+class A {
+  A.c1(int a);
+  A.c2(int a, [int b, int c]);
+  A.c3(int a, {int b, int c});
+}
+
+class M {}
+
+class C = A with M;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    assertConstructors(
+      findElement.class_('C'),
+      [
+        'C.c1(int a) → C',
+        'C.c2(int a, [int b, int c]) → C',
+        'C.c3(int a, {int b, int c}) → C'
+      ],
+    );
+  }
+
+  test_implicitConstructors_requiredParameters() async {
+    addTestFile(r'''
+class A<T extends num> {
+  A(T x, T y);
+}
+
+class M {}
+
+class B<E extends num> = A<E> with M;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    assertConstructors(findElement.class_('B'), ['B(E x, E y) → B<E>']);
+  }
+}
+
+@reflectiveTest
+class ClassAliasTaskResolutionTest extends TaskResolutionTest
+    with ClassAliasResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 7edebf0..02afc12 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -92,6 +96,33 @@
     assertElement(findNode.simple('foo; // ref'), findElement.method('foo'));
   }
 
+  test_abstractSuperMemberReference_noSuchMethod() async {
+    setAnalysisOptions(enableSuperMixins: true);
+    addTestFile('''
+class A {
+  void foo();
+  noSuchMethod(im) {}
+}
+
+abstract class B {
+  void foo();
+  noSuchMethod(im) {}
+}
+
+class C extends A with B {
+  void bar() {
+    super.foo(); // ref
+  }
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
+    assertElement(
+      findNode.simple('foo(); // ref'),
+      findElement.method('foo', of: 'B'),
+    );
+  }
+
   test_abstractSuperMemberReference_OK_mixinHasConcrete2_method() async {
     addTestFile('''
 class A {
@@ -117,33 +148,6 @@
     );
   }
 
-  test_abstractSuperMemberReference_OK_noSuchMethod() async {
-    setAnalysisOptions(enableSuperMixins: true);
-    addTestFile('''
-class A {
-  void foo();
-  noSuchMethod(im) {}
-}
-
-abstract class B {
-  void foo();
-  noSuchMethod(im) {}
-}
-
-class C extends A with B {
-  void bar() {
-    super.foo(); // ref
-  }
-}
-''');
-    await resolveTestFile();
-    assertNoTestErrors();
-    assertElement(
-      findNode.simple('foo(); // ref'),
-      findElement.method('foo', of: 'B'),
-    );
-  }
-
   test_abstractSuperMemberReference_OK_superHasConcrete_mixinHasAbstract_method() async {
     addTestFile('''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart
index 2f4059c..1ad3cfa 100644
--- a/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'dart:async';
 
 import 'package:analyzer/file_system/file_system.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/enum_test.dart b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
index 2171622..d30bf67 100644
--- a/pkg/analyzer/test/src/dart/resolution/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analyzer/test/src/dart/resolution/find_element.dart b/pkg/analyzer/test/src/dart/resolution/find_element.dart
index fe7cb76..dff0500 100644
--- a/pkg/analyzer/test/src/dart/resolution/find_element.dart
+++ b/pkg/analyzer/test/src/dart/resolution/find_element.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -95,6 +99,15 @@
     fail('Not found top-level function: $name');
   }
 
+  GenericTypeAliasElement genericTypeAlias(String name) {
+    for (var element in unitElement.functionTypeAliases) {
+      if (element is GenericTypeAliasElement && element.name == name) {
+        return element;
+      }
+    }
+    fail('Not found generic type alias: $name');
+  }
+
   PropertyAccessorElement getter(String name, {String className}) {
     for (var class_ in unitElement.types) {
       if (className != null && class_.name != className) {
diff --git a/pkg/analyzer/test/src/dart/resolution/find_node.dart b/pkg/analyzer/test/src/dart/resolution/find_node.dart
index 2b99226..67271af 100644
--- a/pkg/analyzer/test/src/dart/resolution/find_node.dart
+++ b/pkg/analyzer/test/src/dart/resolution/find_node.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/for_in_test.dart b/pkg/analyzer/test/src/dart/resolution/for_in_test.dart
index 3062f41..fdbdd76 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_in_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_in_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart b/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart
index d860e9c..82ae780 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
new file mode 100644
index 0000000..7f24421a
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(GenericTypeAliasDriverResolutionTest);
+    defineReflectiveTests(GenericTypeAliasTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class GenericTypeAliasDriverResolutionTest extends DriverResolutionTest
+    with GenericTypeAliasResolutionMixin {}
+
+abstract class GenericTypeAliasResolutionMixin implements ResolutionTest {
+  test_typeParameters() async {
+    addTestFile(r'''
+class A {}
+
+class B {}
+
+typedef F<T extends A> = B<T> Function<U extends B>(T a, U b);
+''');
+    await resolveTestFile();
+
+    var f = findElement.genericTypeAlias('F');
+    expect(f.typeParameters, hasLength(1));
+
+    var t = f.typeParameters[0];
+    expect(t.name, 'T');
+    assertElementTypeString(t.bound, 'A');
+
+    var ff = f.function;
+    expect(ff.typeParameters, hasLength(1));
+
+    var u = ff.typeParameters[0];
+    expect(u.name, 'U');
+    assertElementTypeString(u.bound, 'B');
+  }
+}
+
+@reflectiveTest
+class GenericTypeAliasTaskResolutionTest extends TaskResolutionTest
+    with GenericTypeAliasResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart b/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart
index ea22bc8..a269e79 100644
--- a/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index 6ac6d4c..ddcfe34 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index c06d210..52d0187 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -165,6 +169,10 @@
     expect(element.typeParameters, isEmpty);
 
     expect(element.supertype, isNull);
+    expect(element.isAbstract, isTrue);
+    expect(element.isEnum, isFalse);
+    expect(element.isMixin, isTrue);
+    expect(element.isMixinApplication, isFalse);
     expect(element.type.isObject, isFalse);
 
     assertElementTypes(element.superclassConstraints, [objectType]);
@@ -914,6 +922,50 @@
     ]);
   }
 
+  test_error_mixinApplicationNoConcreteSuperInvokedMember_inNextMixin() async {
+    addTestFile('''
+abstract class A {
+  void foo();
+}
+
+mixin M1 on A {
+  void foo() {
+    super.foo();
+  }
+}
+
+mixin M2 on A {
+  void foo() {}
+}
+
+class X extends A with M1, M2 {}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
+    ]);
+  }
+
+  test_error_mixinApplicationNoConcreteSuperInvokedMember_inSameMixin() async {
+    addTestFile('''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {
+  void foo() {
+    super.foo();
+  }
+}
+
+class X extends A with M {}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
+    ]);
+  }
+
   test_error_mixinApplicationNoConcreteSuperInvokedMember_method() async {
     addTestFile(r'''
 abstract class A {
@@ -956,6 +1008,30 @@
     assertNoTestErrors();
   }
 
+  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_inSuper_fromMixin() async {
+    addTestFile(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M1 {
+  void foo() {}
+}
+
+class B extends A with M1 {}
+
+mixin M2 on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+class X extends B with M2 {}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+  }
+
   test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_notInvoked() async {
     addTestFile(r'''
 abstract class A {
@@ -1507,6 +1583,30 @@
     ]);
   }
 
+  test_isMoreSpecificThan() async {
+    addTestFile(r'''
+mixin M {}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+    var type = element.type;
+    expect(type.isMoreSpecificThan(intType), isFalse);
+  }
+
+  test_lookUpMemberInInterfaces_Object() async {
+    addTestFile(r'''
+class Foo {}
+
+mixin UnhappyMixin on Foo {
+  String toString() => '$runtimeType';
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+  }
+
   test_metadata() async {
     addTestFile(r'''
 const a = 0;
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index e01671b..27ee8fb 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'dart:async';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -56,6 +60,13 @@
     newFile('/test/lib/test.dart', content: content);
   }
 
+  void assertConstructors(ClassElement class_, List<String> expected) {
+    expect(
+      class_.constructors.map((c) => c.toString()).toList(),
+      unorderedEquals(expected),
+    );
+  }
+
   void assertElement(AstNode node, Element expected) {
     Element actual = getNodeElement(node);
     expect(actual, same(expected));
@@ -96,6 +107,10 @@
     expect(type.toString(), expected);
   }
 
+  void assertElementTypeStrings(List<DartType> types, List<String> expected) {
+    expect(types.map((t) => t.displayName).toList(), expected);
+  }
+
   void assertEnclosingElement(Element element, Element expectedEnclosing) {
     expect(element.enclosingElement, expectedEnclosing);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/task_resolution.dart b/pkg/analyzer/test/src/dart/resolution/task_resolution.dart
index 4fcb693..3bfd858 100644
--- a/pkg/analyzer/test/src/dart/resolution/task_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/task_resolution.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'dart:async';
 
 import 'package:analyzer/file_system/file_system.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index d93d42c..744c8d9 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -8,6 +8,7 @@
 import 'class_test.dart' as class_test;
 import 'enum_test.dart' as enum_test;
 import 'for_in_test.dart' as for_in_test;
+import 'generic_type_alias_test.dart' as generic_type_alias_test;
 import 'import_prefix_test.dart' as import_prefix_test;
 import 'instance_creation_test.dart' as instance_creation_test;
 import 'instance_member_inference_class_test.dart'
@@ -15,6 +16,7 @@
 import 'instance_member_inference_mixin_test.dart'
     as instance_member_inference_mixin_test;
 import 'mixin_test.dart' as mixin_test;
+import 'top_type_inference_test.dart' as top_type_inference_test;
 
 main() {
   defineReflectiveSuite(() {
@@ -22,10 +24,12 @@
     class_test.main();
     enum_test.main();
     for_in_test.main();
+    generic_type_alias_test.main();
     import_prefix_test.main();
     instance_creation_test.main();
     instance_member_inference_class_test.main();
     instance_member_inference_mixin_test.main();
     mixin_test.main();
+    top_type_inference_test.main();
   }, name: 'resolution');
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart b/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart
new file mode 100644
index 0000000..3b6eb93
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TopTypeInferenceDriverResolutionTest);
+    defineReflectiveTests(TopTypeInferenceTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class TopTypeInferenceDriverResolutionTest extends DriverResolutionTest
+    with TopTypeInstanceMixin {}
+
+@reflectiveTest
+class TopTypeInferenceTaskResolutionTest extends TaskResolutionTest
+    with TopTypeInstanceMixin {}
+
+abstract class TopTypeInstanceMixin implements ResolutionTest {
+  test_referenceInstanceVariable_withDeclaredType() async {
+    addTestFile(r'''
+class A {
+  final int a = b + 1;
+}
+final b = new A().a;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    assertElementTypeString(findElement.field('a').type, 'int');
+    assertElementTypeString(findElement.topVar('b').type, 'int');
+  }
+
+  test_referenceInstanceVariable_withoutDeclaredType() async {
+    addTestFile(r'''
+class A {
+  final a = b + 1;
+}
+final b = new A().a;
+''');
+    await resolveTestFile();
+    assertTestErrors([StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+
+    assertElementTypeDynamic(findElement.field('a').type);
+    assertElementTypeDynamic(findElement.topVar('b').type);
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
index c61a1dc..3f834fd 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
@@ -20,7 +20,38 @@
               ParserErrorCode.MISSING_INITIALIZER,
               ParserErrorCode.MISSING_FUNCTION_BODY
             ],
-            'C() {}',
+            'C() : _s_ = _s_ {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+            failing: ['methodNonVoid', 'getter', 'setter'],
+          ),
+          new TestDescriptor(
+            'colon_field',
+            'C() : f',
+            [
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : f = _s_ {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+          ),
+          new TestDescriptor(
+            'colon_field_increment',
+            'C() : f++',
+            [
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : _s_ = f++ {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+          ),
+          new TestDescriptor(
+            'colon_field_comma',
+            'C() : f = 0,',
+            [
+              ParserErrorCode.MISSING_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : f = 0, _s_ = _s_ {}',
             adjustValidUnitBeforeComparison: setSeparator,
             failing: ['methodNonVoid', 'getter', 'setter'],
           ),
@@ -28,14 +59,14 @@
             'colon_block',
             'C() : {}',
             [ParserErrorCode.MISSING_INITIALIZER],
-            'C() {}',
+            'C() : _s_ = _s_ {}',
             adjustValidUnitBeforeComparison: setSeparator,
           ),
           new TestDescriptor(
             'colon_semicolon',
             'C() : ;',
             [ParserErrorCode.MISSING_INITIALIZER],
-            'C();',
+            'C() : _s_ = _s_ ;',
             adjustValidUnitBeforeComparison: setSeparator,
           ),
           new TestDescriptor(
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 09b1a87..d913441 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -169,7 +169,7 @@
     writeDocumentation(e);
     writeMetadata(e, '', '\n');
 
-    writeIf(e.isAbstract, 'abstract ');
+    writeIf(e.isAbstract && !e.isMixin, 'abstract ');
 
     if (e.isEnum) {
       buffer.write('enum ');
diff --git a/pkg/analyzer/test/src/summary/linker_test.dart b/pkg/analyzer/test/src/summary/linker_test.dart
index 9568a0b..3622597 100644
--- a/pkg/analyzer/test/src/summary/linker_test.dart
+++ b/pkg/analyzer/test/src/summary/linker_test.dart
@@ -527,7 +527,7 @@
 ''');
     LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('x')).inferredType.toString(),
-        'int');
+        'dynamic');
   }
 
   void test_inferredTypeFromOutsideBuildUnit_instanceField_toInstanceField() {
@@ -545,7 +545,7 @@
 ''');
     LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class classD = library.getContainedName('D');
-    expect(classD.fields[0].inferredType.toString(), 'int');
+    expect(classD.fields[0].inferredType.toString(), 'dynamic');
   }
 
   void test_inferredTypeFromOutsideBuildUnit_methodParamType_viaInheritance() {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index ab472d5..d9a2ab2 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -267,8 +267,8 @@
   Base();
   Base.noArgs();
   Base.requiredArg(x);
-  Base.positionalArg([x]);
-  Base.namedArg({x});
+  Base.positionalArg([bool x = true]);
+  Base.namedArg({int x = 42});
   factory Base.fact() => null;
   factory Base.fact2() = Base.noArgs;
 }
@@ -286,6 +286,8 @@
   synthetic MixinApp() = Base;
   synthetic MixinApp.noArgs() = Base.noArgs;
   synthetic MixinApp.requiredArg(dynamic x) = Base.requiredArg;
+  synthetic MixinApp.positionalArg([bool x = true]) = Base.positionalArg;
+  synthetic MixinApp.namedArg({int x: 42}) = Base.namedArg;
   synthetic MixinApp.fact() = Base.fact;
   synthetic MixinApp.fact2() = Base.fact2;
 }
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index 4d895f0..939596c 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -697,7 +697,7 @@
 ''');
     checkElementText(library, r'''
 import 'a.dart';
-int t1;
+dynamic t1;
 ''');
   }
 
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 61e3f65..3e99766 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -122,7 +122,7 @@
       out.writeln('const $className _$errorCode =');
       out.writeln('const $className(');
       out.writeln("'$errorCode',");
-      out.writeln('"${entry['template']}"');
+      out.writeln('r"${entry['template']}"');
       final tip = entry['tip'];
       if (tip is String) {
         out.writeln(',correction: "$tip"');
@@ -138,7 +138,7 @@
     for (Map entry in translatedEntries) {
       final name = nameForEntry(entry);
       final errorCode = name[1];
-      if (errorConverterSource.contains(errorCode)) {
+      if (errorConverterSource.contains('"$errorCode"')) {
         if (converterCount == 0) {
           print('');
           print('The following ParserErrorCodes could be removed'
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index 78642c2..aec1b06 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -4,7 +4,7 @@
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/summary/summary_file_builder.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   String command;
   String outFilePath;
   String sdkPath;
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 4d18427..2e9ce1b 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -485,6 +485,11 @@
     List list = pop();
     return list != null ? new List<T>.from(list) : null;
   }
+
+  List popList(int n, List list) {
+    if (n == 0) return null;
+    return stack.popList(n, list, null);
+  }
 }
 
 /// Parser intended for use with [MiniAstBuilder].
diff --git a/pkg/analyzer_cli/bin/fix.dart b/pkg/analyzer_cli/bin/fix.dart
new file mode 100644
index 0000000..2ef38e4
--- /dev/null
+++ b/pkg/analyzer_cli/bin/fix.dart
@@ -0,0 +1,14 @@
+#!/usr/bin/env dart
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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_cli/src/fix/driver.dart';
+
+/// The entry point for dartfix.
+main(List<String> args) async {
+  Driver starter = new Driver();
+
+  // Wait for the starter to complete.
+  await starter.start(args);
+}
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index db9192d..4390547 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -28,6 +28,7 @@
 import 'package:analyzer/src/source/sdk_ext.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/src/util/yaml.dart';
@@ -210,6 +211,22 @@
       }
     }
 
+    // When training a snapshot, in addition to training regular analysis
+    // (above), we train build mode as well.
+    if (options.trainSnapshot) {
+      // TODO(devoncarew): Iterate on this training to make it more
+      // representative of what we see internally; call into _buildModeAnalyze()
+      // with some appropriate options.
+      print('\nGenerating strong mode summary...');
+      final Stopwatch stopwatch = new Stopwatch()..start();
+
+      new SummaryBuilder.forSdk(options.dartSdkPath).build();
+      new SummaryBuilder.forSdk(options.dartSdkPath).build();
+      new SummaryBuilder.forSdk(options.dartSdkPath).build();
+
+      print('Done in ${stopwatch.elapsedMilliseconds} ms.');
+    }
+
     if (analysisDriver != null) {
       _analyzedFileCount += analysisDriver.knownFiles.length;
     }
@@ -564,8 +581,9 @@
     // If we have the analysis driver, and the new analysis options are the
     // same, we can reuse this analysis driver.
     if (analysisDriver != null &&
-        _equalAnalysisOptions(
-            analysisDriver.analysisOptions, analysisOptions)) {
+        AnalysisOptions.signaturesEqual(
+            analysisDriver.analysisOptions.signature,
+            analysisOptions.signature)) {
       return;
     }
 
@@ -645,21 +663,6 @@
     return null;
   }
 
-  /// Return whether [a] and [b] options are equal for the purpose of
-  /// command line analysis.
-  bool _equalAnalysisOptions(AnalysisOptions a, AnalysisOptions b) {
-    return a.enableLazyAssignmentOperators == b.enableLazyAssignmentOperators &&
-        a.enableSuperMixins == b.enableSuperMixins &&
-        a.enableTiming == b.enableTiming &&
-        a.generateImplicitErrors == b.generateImplicitErrors &&
-        a.generateSdkErrors == b.generateSdkErrors &&
-        a.hint == b.hint &&
-        a.lint == b.lint &&
-        AnalysisOptionsImpl.compareLints(a.lintRules, b.lintRules) &&
-        a.preserveComments == b.preserveComments &&
-        a.useFastaParser == b.useFastaParser;
-  }
-
   _PackageInfo _findPackages(CommandLineOptions options) {
     if (packageResolverProvider != null) {
       // The resolver provider will do all the work later.
diff --git a/pkg/analyzer_cli/lib/src/fix/driver.dart b/pkg/analyzer_cli/lib/src/fix/driver.dart
new file mode 100644
index 0000000..5888e26
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/fix/driver.dart
@@ -0,0 +1,212 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
+
+import 'package:analyzer_cli/src/fix/options.dart';
+import 'package:analyzer_cli/src/fix/server.dart';
+import 'package:analysis_server/src/protocol/protocol_internal.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+class Driver {
+  static const timeout = const Duration(seconds: 5);
+
+  final Server server = new Server();
+
+  Completer serverConnected;
+  Completer analysisComplete;
+  bool verbose;
+
+  Future start(List<String> args) async {
+    final options = Options.parse(args);
+
+    /// Only happens in testing.
+    if (options == null) {
+      return null;
+    }
+    verbose = options.verbose;
+
+    serverConnected = new Completer();
+    analysisComplete = new Completer();
+
+    await startServer(options);
+    outSink.writeln('Analyzing...');
+    await setupAnalysis(options);
+
+    // TODO(danrubel): Request fixes rather than waiting for analysis complete
+    await analysisComplete.future;
+
+    outSink.writeln('Analysis complete.');
+    await stopServer(server);
+  }
+
+  Future startServer(Options options) async {
+    if (options.verbose) {
+      server.debugStdio();
+    }
+    verboseOut('Starting...');
+    await server.start(sdkPath: options.sdkPath);
+    server.listenToOutput(dispatchNotification);
+    return serverConnected.future.timeout(timeout, onTimeout: () {
+      printAndFail('Failed to connect to server');
+    });
+  }
+
+  Future setupAnalysis(Options options) async {
+    verboseOut('Setup analysis');
+
+    await server.send("server.setSubscriptions",
+        new ServerSetSubscriptionsParams([ServerService.STATUS]).toJson());
+
+    await server.send(
+        "analysis.setAnalysisRoots",
+        new AnalysisSetAnalysisRootsParams(
+          options.analysisRoots,
+          const [],
+        ).toJson());
+  }
+
+  Future stopServer(Server server) async {
+    verboseOut('Stopping...');
+    await server.send("server.shutdown", null);
+    await server.exitCode.timeout(const Duration(seconds: 5), onTimeout: () {
+      return server.kill('server failed to exit');
+    });
+  }
+
+  /**
+   * Dispatch the notification named [event], and containing parameters
+   * [params], to the appropriate stream.
+   */
+  void dispatchNotification(String event, params) {
+    ResponseDecoder decoder = new ResponseDecoder(null);
+    switch (event) {
+      case "server.connected":
+        onServerConnected(
+            new ServerConnectedParams.fromJson(decoder, 'params', params));
+        break;
+//      case "server.error":
+//        outOfTestExpect(params, isServerErrorParams);
+//        _onServerError
+//            .add(new ServerErrorParams.fromJson(decoder, 'params', params));
+//        break;
+      case "server.status":
+        onServerStatus(
+            new ServerStatusParams.fromJson(decoder, 'params', params));
+        break;
+//      case "analysis.analyzedFiles":
+//        outOfTestExpect(params, isAnalysisAnalyzedFilesParams);
+//        _onAnalysisAnalyzedFiles.add(new AnalysisAnalyzedFilesParams.fromJson(
+//            decoder, 'params', params));
+//        break;
+//      case "analysis.closingLabels":
+//        outOfTestExpect(params, isAnalysisClosingLabelsParams);
+//        _onAnalysisClosingLabels.add(new AnalysisClosingLabelsParams.fromJson(
+//            decoder, 'params', params));
+//        break;
+      case "analysis.errors":
+        onAnalysisErrors(
+            new AnalysisErrorsParams.fromJson(decoder, 'params', params));
+        break;
+//      case "analysis.flushResults":
+//        outOfTestExpect(params, isAnalysisFlushResultsParams);
+//        _onAnalysisFlushResults.add(
+//            new AnalysisFlushResultsParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.folding":
+//        outOfTestExpect(params, isAnalysisFoldingParams);
+//        _onAnalysisFolding
+//            .add(new AnalysisFoldingParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.highlights":
+//        outOfTestExpect(params, isAnalysisHighlightsParams);
+//        _onAnalysisHighlights.add(
+//            new AnalysisHighlightsParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.implemented":
+//        outOfTestExpect(params, isAnalysisImplementedParams);
+//        _onAnalysisImplemented.add(
+//            new AnalysisImplementedParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.invalidate":
+//        outOfTestExpect(params, isAnalysisInvalidateParams);
+//        _onAnalysisInvalidate.add(
+//            new AnalysisInvalidateParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.navigation":
+//        outOfTestExpect(params, isAnalysisNavigationParams);
+//        _onAnalysisNavigation.add(
+//            new AnalysisNavigationParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.occurrences":
+//        outOfTestExpect(params, isAnalysisOccurrencesParams);
+//        _onAnalysisOccurrences.add(
+//            new AnalysisOccurrencesParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.outline":
+//        outOfTestExpect(params, isAnalysisOutlineParams);
+//        _onAnalysisOutline
+//            .add(new AnalysisOutlineParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "analysis.overrides":
+//        outOfTestExpect(params, isAnalysisOverridesParams);
+//        _onAnalysisOverrides.add(
+//            new AnalysisOverridesParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "completion.results":
+//        outOfTestExpect(params, isCompletionResultsParams);
+//        _onCompletionResults.add(
+//            new CompletionResultsParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "search.results":
+//        outOfTestExpect(params, isSearchResultsParams);
+//        _onSearchResults
+//            .add(new SearchResultsParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "execution.launchData":
+//        outOfTestExpect(params, isExecutionLaunchDataParams);
+//        _onExecutionLaunchData.add(
+//            new ExecutionLaunchDataParams.fromJson(decoder, 'params', params));
+//        break;
+//      case "flutter.outline":
+//        outOfTestExpect(params, isFlutterOutlineParams);
+//        _onFlutterOutline
+//            .add(new FlutterOutlineParams.fromJson(decoder, 'params', params));
+//        break;
+//      default:
+//        printAndFail('Unexpected notification: $event');
+//        break;
+    }
+  }
+
+  void onAnalysisErrors(AnalysisErrorsParams params) {
+    List<AnalysisError> errors = params.errors;
+    if (errors.isNotEmpty) {
+      outSink.writeln(params.file);
+      for (AnalysisError error in errors) {
+        Location loc = error.location;
+        outSink.writeln('  ${error.message}'
+            ' at ${loc.startLine}:${loc.startColumn}');
+      }
+    }
+  }
+
+  void onServerConnected(ServerConnectedParams params) {
+    verboseOut('Connected to server');
+    serverConnected.complete();
+  }
+
+  void onServerStatus(ServerStatusParams params) {
+    if (params.analysis != null && !params.analysis.isAnalyzing) {
+      verboseOut('Analysis complete');
+      analysisComplete.complete();
+    }
+  }
+
+  void verboseOut(String message) {
+    if (verbose) {
+      outSink.writeln(message);
+    }
+  }
+}
diff --git a/pkg/analyzer_cli/lib/src/fix/options.dart b/pkg/analyzer_cli/lib/src/fix/options.dart
new file mode 100644
index 0000000..0cb29c0
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/fix/options.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+import 'dart:io';
+
+import 'package:analyzer/src/util/sdk.dart';
+import 'package:args/args.dart';
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+StringSink errorSink = stderr;
+
+@visibleForTesting
+StringSink outSink = stdout;
+
+@visibleForTesting
+ExitHandler exitHandler = exit;
+
+@visibleForTesting
+typedef void ExitHandler(int code);
+
+/// Command line options for `dartfix`.
+class Options {
+  String sdkPath;
+  List<String> analysisRoots;
+  bool verbose;
+
+  static Options parse(List<String> args,
+      {printAndFail(String msg) = printAndFail}) {
+    final parser = new ArgParser(allowTrailingOptions: true);
+
+    parser
+      ..addOption(_sdkPathOption, help: 'The path to the Dart SDK.')
+      ..addFlag(_helpOption,
+          abbr: 'h',
+          help:
+              'Display this help message. Add --verbose to show hidden options.',
+          defaultsTo: false,
+          negatable: false)
+      ..addFlag(_verboseOption,
+          abbr: 'v',
+          defaultsTo: false,
+          help: 'Verbose output.',
+          negatable: false);
+
+    ArgResults results;
+    try {
+      results = parser.parse(args);
+    } on FormatException catch (e) {
+      errorSink.writeln(e.message);
+      _showUsage(parser);
+      exitHandler(15);
+      return null; // Only reachable in testing.
+    }
+
+    if (results[_helpOption] as bool) {
+      _showUsage(parser);
+      exitHandler(0);
+      return null; // Only reachable in testing.
+    }
+
+    Options options = new Options._fromArgs(results);
+
+    // Check Dart SDK, and infer if unspecified.
+    options.sdkPath ??= getSdkPath(args);
+    String sdkPath = options.sdkPath;
+    if (sdkPath == null) {
+      errorSink.writeln('No Dart SDK found.');
+      _showUsage(parser);
+      return null; // Only reachable in testing.
+    }
+    if (!(new Directory(sdkPath)).existsSync()) {
+      printAndFail('Invalid Dart SDK path: $sdkPath');
+      return null; // Only reachable in testing.
+    }
+
+    // Check for files and/or directories to analyze.
+    if (options.analysisRoots == null || options.analysisRoots.isEmpty) {
+      errorSink.writeln('Expected at least one file or directory to analyze.');
+      _showUsage(parser);
+      exitHandler(15);
+      return null; // Only reachable in testing.
+    }
+
+    return options;
+  }
+
+  Options._fromArgs(ArgResults results)
+      : analysisRoots = results.rest,
+        sdkPath = results[_sdkPathOption] as String,
+        verbose = results[_verboseOption] as bool;
+
+  static _showUsage(ArgParser parser) {
+    errorSink.writeln(
+        'Usage: $_binaryName [options...] <directory or list of files>');
+    errorSink.writeln('');
+    errorSink.writeln(parser.usage);
+  }
+}
+
+const _binaryName = 'dartfix';
+const _helpOption = 'help';
+const _sdkPathOption = 'dart-sdk';
+const _verboseOption = 'verbose';
+
+/// Print the given [message] to stderr and exit with the given [exitCode].
+void printAndFail(String message, {int exitCode: 15}) {
+  errorSink.writeln(message);
+  exitHandler(exitCode);
+}
diff --git a/pkg/analyzer_cli/lib/src/fix/server.dart b/pkg/analyzer_cli/lib/src/fix/server.dart
new file mode 100644
index 0000000..66f031c
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/fix/server.dart
@@ -0,0 +1,345 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:path/path.dart';
+
+/**
+ * Type of callbacks used to process notifications.
+ */
+typedef void NotificationProcessor(String event, params);
+
+/**
+ * Instances of the class [Server] manage a connection to a server process, and
+ * facilitate communication to and from the server.
+ */
+class Server {
+  /**
+   * Server process object, or null if server hasn't been started yet.
+   */
+  Process _process;
+
+  /**
+   * Commands that have been sent to the server but not yet acknowledged, and
+   * the [Completer] objects which should be completed when acknowledgement is
+   * received.
+   */
+  final Map<String, Completer<Map<String, dynamic>>> _pendingCommands =
+      <String, Completer<Map<String, dynamic>>>{};
+
+  /**
+   * Number which should be used to compute the 'id' to send in the next command
+   * sent to the server.
+   */
+  int _nextId = 0;
+
+  /**
+   * Messages which have been exchanged with the server; we buffer these
+   * up until the test finishes, so that they can be examined in the debugger
+   * or printed out in response to a call to [debugStdio].
+   */
+  final List<String> _recordedStdio = <String>[];
+
+  /**
+   * True if we are currently printing out messages exchanged with the server.
+   */
+  bool _debuggingStdio = false;
+
+  /**
+   * True if we've received bad data from the server, and we are aborting the
+   * test.
+   */
+  bool _receivedBadDataFromServer = false;
+
+  /**
+   * Stopwatch that we use to generate timing information for debug output.
+   */
+  Stopwatch _time = new Stopwatch();
+
+  /**
+   * The [currentElapseTime] at which the last communication was received from the server
+   * or `null` if no communication has been received.
+   */
+  double lastCommunicationTime;
+
+  /**
+   * The current elapse time (seconds) since the server was started.
+   */
+  double get currentElapseTime => _time.elapsedTicks / _time.frequency;
+
+  /**
+   * Future that completes when the server process exits.
+   */
+  Future<int> get exitCode => _process.exitCode;
+
+  /**
+   * Print out any messages exchanged with the server.  If some messages have
+   * already been exchanged with the server, they are printed out immediately.
+   */
+  void debugStdio() {
+    if (_debuggingStdio) {
+      return;
+    }
+    _debuggingStdio = true;
+    for (String line in _recordedStdio) {
+      print(line);
+    }
+  }
+
+  /**
+   * Find the root directory of the analysis_server package by proceeding
+   * upward to the 'test' dir, and then going up one more directory.
+   */
+  String findRoot(String pathname) {
+    while (!['benchmark', 'test'].contains(basename(pathname))) {
+      String parent = dirname(pathname);
+      if (parent.length >= pathname.length) {
+        throw new Exception("Can't find root directory");
+      }
+      pathname = parent;
+    }
+    return dirname(pathname);
+  }
+
+  /**
+   * Return a future that will complete when all commands that have been sent
+   * to the server so far have been flushed to the OS buffer.
+   */
+  Future flushCommands() {
+    return _process.stdin.flush();
+  }
+
+  /**
+   * Stop the server.
+   */
+  Future<int> kill(String reason) {
+    debugStdio();
+    _recordStdio('FORCIBLY TERMINATING PROCESS: $reason');
+    _process.kill();
+    return _process.exitCode;
+  }
+
+  /**
+   * Start listening to output from the server, and deliver notifications to
+   * [notificationProcessor].
+   */
+  void listenToOutput(NotificationProcessor notificationProcessor) {
+    _process.stdout
+        .transform(utf8.decoder)
+        .transform(new LineSplitter())
+        .listen((String line) {
+      lastCommunicationTime = currentElapseTime;
+      String trimmedLine = line.trim();
+
+      // Guard against lines like:
+      //   {"event":"server.connected","params":{...}}Observatory listening on ...
+      final String observatoryMessage = 'Observatory listening on ';
+      if (trimmedLine.contains(observatoryMessage)) {
+        trimmedLine = trimmedLine
+            .substring(0, trimmedLine.indexOf(observatoryMessage))
+            .trim();
+      }
+      if (trimmedLine.isEmpty) {
+        return;
+      }
+
+      _recordStdio('<== $trimmedLine');
+      var message;
+      try {
+        message = json.decoder.convert(trimmedLine);
+      } catch (exception) {
+        _badDataFromServer('JSON decode failure: $exception');
+        return;
+      }
+      Map messageAsMap = message;
+      if (messageAsMap.containsKey('id')) {
+        String id = message['id'];
+        Completer<Map<String, dynamic>> completer = _pendingCommands[id];
+        if (completer == null) {
+          throw 'Unexpected response from server: id=$id';
+        } else {
+          _pendingCommands.remove(id);
+        }
+        if (messageAsMap.containsKey('error')) {
+          completer.completeError(new ServerErrorMessage(messageAsMap));
+        } else {
+          Map<String, dynamic> result = messageAsMap['result'];
+          completer.complete(result);
+        }
+      } else {
+        String event = messageAsMap['event'];
+        notificationProcessor(event, messageAsMap['params']);
+      }
+    });
+    _process.stderr
+        .transform((new Utf8Codec()).decoder)
+        .transform(new LineSplitter())
+        .listen((String line) {
+      String trimmedLine = line.trim();
+      _recordStdio('ERR:  $trimmedLine');
+      _badDataFromServer('Message received on stderr', silent: true);
+    });
+  }
+
+  /**
+   * Send a command to the server.  An 'id' will be automatically assigned.
+   * The returned [Future] will be completed when the server acknowledges the
+   * command with a response.  If the server acknowledges the command with a
+   * normal (non-error) response, the future will be completed with the 'result'
+   * field from the response.  If the server acknowledges the command with an
+   * error response, the future will be completed with an error.
+   */
+  Future<Map<String, dynamic>> send(
+      String method, Map<String, dynamic> params) {
+    String id = '${_nextId++}';
+    Map<String, dynamic> command = <String, dynamic>{
+      'id': id,
+      'method': method
+    };
+    if (params != null) {
+      command['params'] = params;
+    }
+    Completer<Map<String, dynamic>> completer =
+        new Completer<Map<String, dynamic>>();
+    _pendingCommands[id] = completer;
+    String line = json.encode(command);
+    _recordStdio('==> $line');
+    _process.stdin.add(utf8.encoder.convert("$line\n"));
+    return completer.future;
+  }
+
+  /**
+   * Start the server. If [profileServer] is `true`, the server will be started
+   * with "--observe" and "--pause-isolates-on-exit", allowing the observatory
+   * to be used.
+   */
+  Future start({
+    int diagnosticPort,
+    String instrumentationLogFile,
+    bool profileServer: false,
+    String sdkPath,
+    int servicesPort,
+    bool useAnalysisHighlight2: false,
+  }) async {
+    if (_process != null) {
+      throw new Exception('Process already started');
+    }
+    _time.start();
+    String dartBinary = Platform.executable;
+
+    // The integration tests run 3x faster when run from snapshots (you need to
+    // run test.py with --use-sdk).
+    final bool useSnapshot = true;
+    String serverPath;
+
+    if (useSnapshot) {
+      // Look for snapshots/analysis_server.dart.snapshot.
+      serverPath = normalize(join(dirname(Platform.resolvedExecutable),
+          'snapshots', 'analysis_server.dart.snapshot'));
+
+      if (!FileSystemEntity.isFileSync(serverPath)) {
+        // Look for dart-sdk/bin/snapshots/analysis_server.dart.snapshot.
+        serverPath = normalize(join(dirname(Platform.resolvedExecutable),
+            'dart-sdk', 'bin', 'snapshots', 'analysis_server.dart.snapshot'));
+      }
+    } else {
+      String rootDir =
+          findRoot(Platform.script.toFilePath(windows: Platform.isWindows));
+      serverPath = normalize(join(rootDir, 'bin', 'server.dart'));
+    }
+
+    List<String> arguments = [];
+    //
+    // Add VM arguments.
+    //
+    if (profileServer) {
+      if (servicesPort == null) {
+        arguments.add('--observe');
+      } else {
+        arguments.add('--observe=$servicesPort');
+      }
+      arguments.add('--pause-isolates-on-exit');
+    } else if (servicesPort != null) {
+      arguments.add('--enable-vm-service=$servicesPort');
+    }
+    if (Platform.packageConfig != null) {
+      arguments.add('--packages=${Platform.packageConfig}');
+    }
+    //
+    // Add the server executable.
+    //
+    arguments.add(serverPath);
+    //
+    // Add server arguments.
+    //
+    arguments.add('--suppress-analytics');
+    if (diagnosticPort != null) {
+      arguments.add('--port');
+      arguments.add(diagnosticPort.toString());
+    }
+    if (instrumentationLogFile != null) {
+      arguments.add('--instrumentation-log-file=$instrumentationLogFile');
+    }
+    if (sdkPath != null) {
+      arguments.add('--sdk=$sdkPath');
+    }
+    if (useAnalysisHighlight2) {
+      arguments.add('--useAnalysisHighlight2');
+    }
+    _process = await Process.start(dartBinary, arguments);
+    _process.exitCode.then((int code) {
+      if (code != 0) {
+        _badDataFromServer('server terminated with exit code $code');
+      }
+    });
+  }
+
+  /**
+   * Deal with bad data received from the server.
+   */
+  void _badDataFromServer(String details, {bool silent: false}) {
+    if (!silent) {
+      _recordStdio('BAD DATA FROM SERVER: $details');
+    }
+    if (_receivedBadDataFromServer) {
+      // We're already dealing with it.
+      return;
+    }
+    _receivedBadDataFromServer = true;
+    debugStdio();
+    // Give the server 1 second to continue outputting bad data
+    // such as outputting a stacktrace.
+    new Future.delayed(new Duration(seconds: 1), () {
+      throw 'Bad data received from server: $details';
+    });
+  }
+
+  /**
+   * Record a message that was exchanged with the server, and print it out if
+   * [debugStdio] has been called.
+   */
+  void _recordStdio(String line) {
+    double elapsedTime = currentElapseTime;
+    line = "$elapsedTime: $line";
+    if (_debuggingStdio) {
+      print(line);
+    }
+    _recordedStdio.add(line);
+  }
+}
+
+/**
+ * An error result from a server request.
+ */
+class ServerErrorMessage {
+  final Map message;
+
+  ServerErrorMessage(this.message);
+
+  dynamic get error => message['error'];
+
+  String toString() => message.toString();
+}
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 7667945..3c1fb51 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -157,6 +157,10 @@
   /// Use ANSI color codes for output.
   final bool color;
 
+  /// Whether we should analyze the given source for the purposes of training a
+  /// Dart analyzer snapshot.
+  final bool trainSnapshot;
+
   /// Initialize options from the given parsed [args].
   CommandLineOptions._fromArgs(ArgResults args)
       : buildAnalysisOutput = cast(args['build-analysis-output']),
@@ -199,6 +203,7 @@
         lintsAreFatal = cast(args['fatal-lints']),
         implicitCasts = cast(args[implicitCastsFlag]),
         implicitDynamic = !cast<bool>(args['no-implicit-dynamic']),
+        trainSnapshot = cast(args['train-snapshot']),
         verbose = cast(args['verbose']),
         color = cast(args['color']);
 
@@ -510,7 +515,12 @@
           help: 'Enable the Dart 2.0 preview.',
           defaultsTo: true,
           hide: hide,
-          negatable: true);
+          negatable: true)
+      ..addFlag('train-snapshot',
+          help: "Analyze the given source for the purposes of training a "
+              "dartanalyzer snapshot.",
+          hide: hide,
+          negatable: false);
 
     try {
       if (args.contains('--$ignoreUnrecognizedFlagsFlag')) {
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index 7b88142..32c08eb 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -74,6 +74,7 @@
         expect(options.strongMode, isTrue);
         expect(options.lintsAreFatal, isFalse);
         expect(options.previewDart2, isTrue);
+        expect(options.trainSnapshot, isFalse);
       });
 
       test('batch', () {
@@ -242,6 +243,12 @@
             CommandLineOptions.parse(['--preview-dart-2', 'foo.dart']);
         expect(options.previewDart2, isTrue);
       });
+
+      test('--train-snapshot', () {
+        CommandLineOptions options =
+            CommandLineOptions.parse(['--train-snapshot', 'foo.dart']);
+        expect(options.trainSnapshot, isTrue);
+      });
     });
   });
   defineReflectiveTests(CommandLineOptionsTest);
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index da0506a..2bbd9c2 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -34,6 +34,7 @@
   static const String previewDart2 = '--preview-dart-2';
 
   static const String omitImplicitChecks = '--omit-implicit-checks';
+  static const String omitAsCasts = '--omit-as-casts';
   static const String laxRuntimeTypeToString = '--lax-runtime-type-to-string';
 
   static const String platformBinaries = '--platform-binaries=.+';
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index a16065a..195fb6d 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -10,22 +10,587 @@
 import 'constants/expressions.dart' show ConstantExpression;
 import 'constants/values.dart';
 import 'elements/entities.dart';
-import 'elements/names.dart' show PublicName;
 import 'elements/types.dart';
 import 'js_backend/backend.dart' show JavaScriptBackend;
 import 'js_backend/constant_system_javascript.dart';
 import 'js_backend/native_data.dart' show NativeBasicData;
 import 'native/native.dart';
 import 'types/abstract_value_domain.dart';
-import 'universe/call_structure.dart' show CallStructure;
 import 'universe/selector.dart' show Selector;
-import 'universe/call_structure.dart';
 
 /// The common elements and types in Dart.
-class CommonElements {
+abstract class CommonElements {
+  /// The `Object` class defined in 'dart:core'.
+  ClassEntity get objectClass;
+
+  /// The `bool` class defined in 'dart:core'.
+  ClassEntity get boolClass;
+
+  /// The `num` class defined in 'dart:core'.
+  ClassEntity get numClass;
+
+  /// The `int` class defined in 'dart:core'.
+  ClassEntity get intClass;
+
+  /// The `double` class defined in 'dart:core'.
+  ClassEntity get doubleClass;
+
+  /// The `String` class defined in 'dart:core'.
+  ClassEntity get stringClass;
+
+  /// The `Function` class defined in 'dart:core'.
+  ClassEntity get functionClass;
+
+  /// The `Resource` class defined in 'dart:core'.
+  ClassEntity get resourceClass;
+
+  /// The `Symbol` class defined in 'dart:core'.
+  ClassEntity get symbolClass;
+
+  /// The `Null` class defined in 'dart:core'.
+  ClassEntity get nullClass;
+
+  /// The `Type` class defined in 'dart:core'.
+  ClassEntity get typeClass;
+
+  /// The `StackTrace` class defined in 'dart:core';
+  ClassEntity get stackTraceClass;
+
+  /// The `List` class defined in 'dart:core';
+  ClassEntity get listClass;
+
+  /// The `Map` class defined in 'dart:core';
+  ClassEntity get mapClass;
+
+  /// The `Iterable` class defined in 'dart:core';
+  ClassEntity get iterableClass;
+
+  /// The `Future` class defined in 'async';.
+  ClassEntity get futureClass;
+
+  /// The `Stream` class defined in 'async';
+  ClassEntity get streamClass;
+
+  /// The dart:core library.
+  LibraryEntity get coreLibrary;
+
+  /// The dart:async library.
+  LibraryEntity get asyncLibrary;
+
+  /// The dart:mirrors library.
+  LibraryEntity get mirrorsLibrary;
+
+  /// The dart:typed_data library.
+  LibraryEntity get typedDataLibrary;
+
+  /// The dart:_js_helper library.
+  LibraryEntity get jsHelperLibrary;
+
+  /// The dart:_interceptors library.
+  LibraryEntity get interceptorsLibrary;
+
+  /// The dart:_foreign_helper library.
+  LibraryEntity get foreignLibrary;
+
+  /// The dart:_internal library.
+  LibraryEntity get internalLibrary;
+
+  /// The `NativeTypedData` class from dart:typed_data.
+  ClassEntity get typedDataClass;
+
+  /// Constructor of the `Symbol` class in dart:internal. This getter will
+  /// ensure that `Symbol` is resolved and lookup the constructor on demand.
+  ConstructorEntity get symbolConstructorTarget;
+
+  /// Whether [element] is the same as [symbolConstructor]. Used to check
+  /// for the constructor without computing it until it is likely to be seen.
+  bool isSymbolConstructor(ConstructorEntity element);
+
+  /// The function `identical` in dart:core.
+  FunctionEntity get identicalFunction;
+
+  /// Whether [element] is the `Function.apply` method. This will not
+  /// resolve the apply method if it hasn't been seen yet during compilation.
+  bool isFunctionApplyMethod(MemberEntity element);
+
+  /// The `dynamic` type.
+  DynamicType get dynamicType;
+
+  /// The `Object` type defined in 'dart:core'.
+  InterfaceType get objectType;
+
+  /// The `bool` type defined in 'dart:core'.
+  InterfaceType get boolType;
+
+  /// The `num` type defined in 'dart:core'.
+  InterfaceType get numType;
+
+  /// The `int` type defined in 'dart:core'.
+  InterfaceType get intType;
+
+  /// The `double` type defined in 'dart:core'.
+  InterfaceType get doubleType;
+
+  /// The `Resource` type defined in 'dart:core'.
+  InterfaceType get resourceType;
+
+  /// The `String` type defined in 'dart:core'.
+  InterfaceType get stringType;
+
+  /// The `Symbol` type defined in 'dart:core'.
+  InterfaceType get symbolType;
+
+  /// The `Function` type defined in 'dart:core'.
+  InterfaceType get functionType;
+
+  /// The `Null` type defined in 'dart:core'.
+  InterfaceType get nullType;
+
+  /// The `Type` type defined in 'dart:core'.
+  InterfaceType get typeType;
+
+  InterfaceType get typeLiteralType;
+
+  /// The `StackTrace` type defined in 'dart:core';
+  InterfaceType get stackTraceType;
+
+  /// Returns an instance of the `List` type defined in 'dart:core' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType listType([DartType elementType]);
+
+  /// Returns an instance of the `Map` type defined in 'dart:core' with
+  /// [keyType] and [valueType] as its type arguments.
+  ///
+  /// If no type arguments are provided, the canonical raw type is returned.
+  InterfaceType mapType([DartType keyType, DartType valueType]);
+
+  /// Returns an instance of the `Iterable` type defined in 'dart:core' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType iterableType([DartType elementType]);
+
+  /// Returns an instance of the `Future` type defined in 'dart:async' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType futureType([DartType elementType]);
+
+  /// Returns an instance of the `Stream` type defined in 'dart:async' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType streamType([DartType elementType]);
+
+  /// Returns `true` if [element] is a superclass of `String` or `num`.
+  bool isNumberOrStringSupertype(ClassEntity element);
+
+  /// Returns `true` if [element] is a superclass of `String`.
+  bool isStringOnlySupertype(ClassEntity element);
+
+  /// Returns `true` if [element] is a superclass of `List`.
+  bool isListSupertype(ClassEntity element);
+
+  InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
+      {bool hasProtoKey: false, bool onlyStringKeys: false});
+
+  FieldEntity get symbolField;
+
+  InterfaceType get symbolImplementationType;
+
+  // From dart:core
+  ClassEntity get mapLiteralClass;
+
+  ConstructorEntity get mapLiteralConstructor;
+
+  ConstructorEntity get mapLiteralConstructorEmpty;
+
+  FunctionEntity get mapLiteralUntypedMaker;
+
+  FunctionEntity get mapLiteralUntypedEmptyMaker;
+
+  FunctionEntity get objectNoSuchMethod;
+
+  bool isDefaultNoSuchMethodImplementation(FunctionEntity element);
+
+  // From dart:async
+  FunctionEntity get asyncHelperStart;
+  FunctionEntity get asyncHelperStartSync;
+  FunctionEntity get asyncHelperAwait;
+  FunctionEntity get asyncHelperReturn;
+  FunctionEntity get asyncHelperRethrow;
+
+  FunctionEntity get wrapBody;
+
+  FunctionEntity get yieldStar;
+
+  FunctionEntity get yieldSingle;
+
+  FunctionEntity get syncStarUncaughtError;
+
+  FunctionEntity get asyncStarHelper;
+
+  FunctionEntity get streamOfController;
+
+  FunctionEntity get endOfIteration;
+
+  ClassEntity get syncStarIterable;
+
+  ClassEntity get futureImplementation;
+
+  ClassEntity get controllerStream;
+
+  ClassEntity get streamIterator;
+
+  ConstructorEntity get streamIteratorConstructor;
+
+  FunctionEntity get syncStarIterableFactory;
+
+  FunctionEntity get asyncAwaitCompleterFactory;
+
+  FunctionEntity get syncCompleterFactory;
+
+  FunctionEntity get asyncStarStreamControllerFactory;
+
+  ClassEntity get jsInterceptorClass;
+
+  ClassEntity get jsStringClass;
+
+  ClassEntity get jsArrayClass;
+
+  ClassEntity get jsNumberClass;
+
+  ClassEntity get jsIntClass;
+
+  ClassEntity get jsDoubleClass;
+
+  ClassEntity get jsNullClass;
+
+  ClassEntity get jsBoolClass;
+
+  ClassEntity get jsPlainJavaScriptObjectClass;
+
+  ClassEntity get jsUnknownJavaScriptObjectClass;
+
+  ClassEntity get jsJavaScriptFunctionClass;
+
+  ClassEntity get jsJavaScriptObjectClass;
+
+  ClassEntity get jsIndexableClass;
+
+  ClassEntity get jsMutableIndexableClass;
+
+  ClassEntity get jsMutableArrayClass;
+
+  ClassEntity get jsFixedArrayClass;
+
+  ClassEntity get jsExtendableArrayClass;
+
+  ClassEntity get jsUnmodifiableArrayClass;
+
+  ClassEntity get jsPositiveIntClass;
+
+  ClassEntity get jsUInt32Class;
+
+  ClassEntity get jsUInt31Class;
+
+  /// Returns `true` member is the 'findIndexForNativeSubclassType' method
+  /// declared in `dart:_interceptors`.
+  bool isFindIndexForNativeSubclassType(MemberEntity member);
+
+  FunctionEntity get getNativeInterceptorMethod;
+
+  ConstructorEntity get jsArrayTypedConstructor;
+
+  // From dart:_js_helper
+  // TODO(johnniwinther): Avoid the need for this (from [CheckedModeHelper]).
+  FunctionEntity findHelperFunction(String name);
+
+  ClassEntity get closureClass;
+
+  ClassEntity get boundClosureClass;
+
+  ClassEntity get typeLiteralClass;
+
+  ClassEntity get constMapLiteralClass;
+
+  ClassEntity get typeVariableClass;
+
+  ClassEntity get jsInvocationMirrorClass;
+
+  MemberEntity get invocationTypeArgumentGetter;
+
+  /// Interface used to determine if an object has the JavaScript
+  /// indexing behavior. The interface is only visible to specific libraries.
+  ClassEntity get jsIndexingBehaviorInterface;
+
+  ClassEntity get stackTraceHelperClass;
+
+  ClassEntity get constantMapClass;
+  ClassEntity get constantStringMapClass;
+  ClassEntity get constantProtoMapClass;
+  ClassEntity get generalConstantMapClass;
+
+  ClassEntity get annotationCreatesClass;
+
+  ClassEntity get annotationReturnsClass;
+
+  ClassEntity get annotationJSNameClass;
+
+  /// The class for native annotations defined in dart:_js_helper.
+  ClassEntity get nativeAnnotationClass;
+
+  ConstructorEntity get typeVariableConstructor;
+
+  FunctionEntity get assertTest;
+
+  FunctionEntity get assertThrow;
+
+  FunctionEntity get assertHelper;
+
+  FunctionEntity get assertUnreachableMethod;
+
+  /// Holds the method "getIsolateAffinityTag" when dart:_js_helper has been
+  /// loaded.
+  FunctionEntity get getIsolateAffinityTagMarker;
+
+  /// Holds the method "requiresPreamble" in _js_helper.
+  FunctionEntity get requiresPreambleMarker;
+
+  FunctionEntity get loadLibraryWrapper;
+
+  FunctionEntity get loadDeferredLibrary;
+
+  FunctionEntity get boolConversionCheck;
+
+  FunctionEntity get traceHelper;
+
+  FunctionEntity get closureFromTearOff;
+
+  FunctionEntity get isJsIndexable;
+
+  FunctionEntity get throwIllegalArgumentException;
+
+  FunctionEntity get throwIndexOutOfRangeException;
+
+  FunctionEntity get exceptionUnwrapper;
+
+  FunctionEntity get throwRuntimeError;
+
+  FunctionEntity get throwUnsupportedError;
+
+  FunctionEntity get throwTypeError;
+
+  FunctionEntity get throwAbstractClassInstantiationError;
+
+  FunctionEntity get checkConcurrentModificationError;
+
+  FunctionEntity get throwConcurrentModificationError;
+
+  FunctionEntity get stringInterpolationHelper;
+
+  FunctionEntity get wrapExceptionHelper;
+
+  FunctionEntity get throwExpressionHelper;
+
+  FunctionEntity get closureConverter;
+
+  FunctionEntity get traceFromException;
+
+  FunctionEntity get setRuntimeTypeInfo;
+
+  FunctionEntity get getRuntimeTypeInfo;
+
+  FunctionEntity get getTypeArgumentByIndex;
+
+  FunctionEntity get computeSignature;
+
+  FunctionEntity get getRuntimeTypeArguments;
+
+  FunctionEntity get getRuntimeTypeArgument;
+
+  FunctionEntity get getRuntimeTypeArgumentIntercepted;
+
+  FunctionEntity get assertIsSubtype;
+
+  FunctionEntity get checkSubtype;
+
+  FunctionEntity get assertSubtype;
+
+  FunctionEntity get subtypeCast;
+
+  FunctionEntity get functionTypeTest;
+
+  FunctionEntity get futureOrTest;
+
+  FunctionEntity get checkSubtypeOfRuntimeType;
+
+  FunctionEntity get assertSubtypeOfRuntimeType;
+
+  FunctionEntity get subtypeOfRuntimeTypeCast;
+
+  FunctionEntity get checkDeferredIsLoaded;
+
+  FunctionEntity get throwNoSuchMethod;
+
+  FunctionEntity get createRuntimeType;
+
+  FunctionEntity get fallThroughError;
+
+  FunctionEntity get createInvocationMirror;
+
+  FunctionEntity get createUnmangledInvocationMirror;
+
+  FunctionEntity get cyclicThrowHelper;
+
+  FunctionEntity get defineProperty;
+
+  bool isExtractTypeArguments(FunctionEntity member);
+
+  ClassEntity getInstantiationClass(int typeArgumentCount);
+
+  FunctionEntity getInstantiateFunction(int typeArgumentCount);
+
+  FunctionEntity get instantiatedGenericFunctionType;
+
+  FunctionEntity get extractFunctionTypeObjectFromInternal;
+
+  // From dart:_internal
+
+  ClassEntity get symbolImplementationClass;
+
+  /// Used to annotate items that have the keyword "native".
+  ClassEntity get externalNameClass;
+
+  InterfaceType get externalNameType;
+
+  ConstructorEntity get symbolValidatedConstructor;
+
+  // From dart:_js_embedded_names
+
+  ClassEntity get jsGetNameEnum;
+
+  ClassEntity get expectNoInlineClass;
+
+  ClassEntity get expectTrustTypeAnnotationsClass;
+
+  ClassEntity get expectAssumeDynamicClass;
+
+  /// Returns `true` if [member] is a "foreign helper", that is, a member whose
+  /// semantics is defined synthetically and not through Dart code.
+  ///
+  /// Most foreign helpers are located in the `dart:_foreign_helper` library.
+  bool isForeignHelper(MemberEntity member);
+
+  ClassEntity getDefaultSuperclass(
+      ClassEntity cls, NativeBasicData nativeBasicData);
+}
+
+abstract class KCommonElements implements CommonElements {
+  // From package:js
+  ClassEntity get jsAnnotationClass;
+
+  ClassEntity get jsAnonymousClass;
+
+  ClassEntity get noSideEffectsClass;
+
+  ClassEntity get noThrowsClass;
+
+  ClassEntity get noInlineClass;
+
+  ClassEntity get forceInlineClass;
+
+  bool isCreateInvocationMirrorHelper(MemberEntity member);
+
+  bool isSymbolValidatedConstructor(ConstructorEntity element);
+
+  ClassEntity get metaNoInlineClass;
+
+  ClassEntity get metaTryInlineClass;
+
+  /// Returns `true` if [function] is allowed to be external.
+  ///
+  /// This returns `true` for foreign helpers, from environment constructors and
+  /// members of libraries that support native.
+  ///
+  /// This returns `false` for JS interop members which therefore must be
+  /// allowed to be external through the JS interop annotation handling.
+  bool isExternalAllowed(FunctionEntity function);
+}
+
+abstract class JCommonElements implements CommonElements {
+  /// Returns `true` if [element] is the unnamed constructor of `List`. This
+  /// will not resolve the constructor if it hasn't been seen yet during
+  /// compilation.
+  bool isUnnamedListConstructor(ConstructorEntity element);
+
+  /// Returns `true` if [element] is the 'filled' constructor of `List`. This
+  /// will not resolve the constructor if it hasn't been seen yet during
+  /// compilation.
+  bool isFilledListConstructor(ConstructorEntity element);
+
+  bool isDefaultEqualityImplementation(MemberEntity element);
+
+  /// Returns `true` if [selector] applies to `JSIndexable.length`.
+  bool appliesToJsIndexableLength(Selector selector);
+
+  FunctionEntity get jsArrayRemoveLast;
+
+  FunctionEntity get jsArrayAdd;
+
+  bool isJsStringSplit(MemberEntity member);
+
+  /// Returns `true` if [selector] applies to `JSString.split` on [receiver]
+  /// in the given [world].
+  ///
+  /// Returns `false` if `JSString.split` is not available.
+  bool appliesToJsStringSplit(Selector selector, AbstractValue receiver,
+      AbstractValueDomain abstractValueDomain);
+
+  FunctionEntity get jsStringSplit;
+
+  FunctionEntity get jsStringToString;
+
+  FunctionEntity get jsStringOperatorAdd;
+
+  ClassEntity get jsConstClass;
+
+  /// Return `true` if [member] is the 'checkInt' function defined in
+  /// dart:_js_helpers.
+  bool isCheckInt(MemberEntity member);
+
+  /// Return `true` if [member] is the 'checkNum' function defined in
+  /// dart:_js_helpers.
+  bool isCheckNum(MemberEntity member);
+
+  /// Return `true` if [member] is the 'checkString' function defined in
+  /// dart:_js_helpers.
+  bool isCheckString(MemberEntity member);
+
+  bool isInstantiationClass(ClassEntity cls);
+
+  // From dart:_native_typed_data
+
+  ClassEntity get typedArrayOfIntClass;
+
+  ClassEntity get typedArrayOfDoubleClass;
+
+  ClassEntity get jsBuiltinEnum;
+
+  bool isForeign(MemberEntity element);
+
+  /// Returns `true` if the implementation of the 'operator ==' [function] is
+  /// known to handle `null` as argument.
+  bool operatorEqHandlesNullArgument(FunctionEntity function);
+}
+
+class CommonElementsImpl
+    implements CommonElements, KCommonElements, JCommonElements {
   final ElementEnvironment _env;
 
-  CommonElements(this._env);
+  CommonElementsImpl(this._env);
 
   /// The `Object` class defined in 'dart:core'.
   ClassEntity _objectClass;
@@ -193,57 +758,12 @@
         element == _symbolConstructorTarget;
   }
 
-  /// The `MirrorSystem` class in dart:mirrors.
-  ClassEntity _mirrorSystemClass;
-  ClassEntity get mirrorSystemClass => _mirrorSystemClass ??=
-      _findClass(mirrorsLibrary, 'MirrorSystem', required: false);
-
-  /// Whether [element] is `MirrorClass.getName`. Used to check for the use of
-  /// that static method without forcing the resolution of the `MirrorSystem`
-  /// class until it is necessary.
-  FunctionEntity _mirrorSystemGetNameFunction;
-  bool isMirrorSystemGetNameFunction(MemberEntity element) {
-    if (_mirrorSystemGetNameFunction == null) {
-      if (!element.isFunction || mirrorsLibrary == null) return false;
-      ClassEntity cls = mirrorSystemClass;
-      if (element.enclosingClass != cls) return false;
-      if (cls != null) {
-        _mirrorSystemGetNameFunction =
-            _findClassMember(cls, 'getName', required: false);
-      }
-    }
-    return element == _mirrorSystemGetNameFunction;
-  }
-
-  /// The `MirrorsUsed` annotation in dart:mirrors.
-  ClassEntity _mirrorsUsedClass;
-  ClassEntity get mirrorsUsedClass => _mirrorsUsedClass ??=
-      _findClass(mirrorsLibrary, 'MirrorsUsed', required: false);
-
-  /// Whether [element] is the constructor of the `MirrorsUsed` class. Used to
-  /// check for the constructor without forcing the resolution of the
-  /// `MirrorsUsed` class until it is necessary.
-  bool isMirrorsUsedConstructor(ConstructorEntity element) =>
-      mirrorsLibrary != null && mirrorsUsedClass == element.enclosingClass;
-
-  /// The `DeferredLibrary` annotation in dart:async that was used before the
-  /// deferred import syntax was introduced.
-  // TODO(sigmund): drop support for this old syntax?
-  ClassEntity _deferredLibraryClass;
-  ClassEntity get deferredLibraryClass =>
-      _deferredLibraryClass ??= _findClass(asyncLibrary, "DeferredLibrary");
-
   /// The function `identical` in dart:core.
   FunctionEntity _identicalFunction;
   FunctionEntity get identicalFunction =>
       _identicalFunction ??= _findLibraryMember(coreLibrary, 'identical');
 
-  /// The method `Function.apply`.
-  FunctionEntity _functionApplyMethod;
-  FunctionEntity get functionApplyMethod =>
-      _functionApplyMethod ??= _findClassMember(functionClass, 'apply');
-
-  /// Whether [element] is the same as [functionApplyMethod]. This will not
+  /// Whether [element] is the `Function.apply` method. This will not
   /// resolve the apply method if it hasn't been seen yet during compilation.
   bool isFunctionApplyMethod(MemberEntity element) =>
       element.name == 'apply' && element.enclosingClass == functionClass;
@@ -436,32 +956,6 @@
   }
 
   // From dart:core
-  FunctionEntity get malformedTypeError =>
-      _cachedCoreHelper('_malformedTypeError');
-  FunctionEntity get genericNoSuchMethod =>
-      _cachedCoreHelper('_genericNoSuchMethod');
-  FunctionEntity get unresolvedConstructorError =>
-      _cachedCoreHelper('_unresolvedConstructorError');
-  FunctionEntity get unresolvedStaticGetterError =>
-      _cachedCoreHelper('_unresolvedStaticGetterError');
-  FunctionEntity get unresolvedStaticSetterError =>
-      _cachedCoreHelper('_unresolvedStaticSetterError');
-  FunctionEntity get unresolvedStaticMethodError =>
-      _cachedCoreHelper('_unresolvedStaticMethodError');
-  FunctionEntity get unresolvedTopLevelGetterError =>
-      _cachedCoreHelper('_unresolvedTopLevelGetterError');
-  FunctionEntity get unresolvedTopLevelSetterError =>
-      _cachedCoreHelper('_unresolvedTopLevelSetterError');
-  FunctionEntity get unresolvedTopLevelMethodError =>
-      _cachedCoreHelper('_unresolvedTopLevelMethodError');
-
-  Map<String, FunctionEntity> _cachedCoreHelpers = <String, FunctionEntity>{};
-  FunctionEntity _cachedCoreHelper(String name) => _cachedCoreHelpers[name] ??=
-      _env.lookupLibraryMember(coreLibrary, name, required: true);
-
-  FunctionEntity _objectEquals;
-  FunctionEntity get objectEquals =>
-      _objectEquals ??= _findClassMember(objectClass, '==');
 
   ClassEntity _mapLiteralClass;
   ClassEntity get mapLiteralClass {
@@ -595,19 +1089,6 @@
       _asyncStarStreamControllerFactory ??=
           _findAsyncHelperFunction('_makeAsyncStarStreamController');
 
-  /// Holds the method "preserveNames" in js_mirrors when
-  /// dart:mirrors has been loaded.
-  FunctionEntity _preserveNamesMarker;
-  FunctionEntity get preserveNamesMarker {
-    if (_preserveNamesMarker == null) {
-      LibraryEntity library = _env.lookupLibrary(Uris.dart__js_names);
-      if (library != null) {
-        _preserveNamesMarker = _findLibraryMember(library, 'preserveNames');
-      }
-    }
-    return _preserveNamesMarker;
-  }
-
   // From dart:_interceptors
   ClassEntity _findInterceptorsClass(String name) =>
       _findClass(interceptorsLibrary, name);
@@ -730,14 +1211,14 @@
   FunctionEntity get jsArrayAdd =>
       _jsArrayAdd ??= _findClassMember(jsArrayClass, 'add');
 
-  bool isJsStringClass(ClassEntity cls) {
+  bool _isJsStringClass(ClassEntity cls) {
     return cls.name == 'JSString' && cls.library == interceptorsLibrary;
   }
 
   bool isJsStringSplit(MemberEntity member) {
     return member.name == 'split' &&
         member.isInstanceMember &&
-        isJsStringClass(member.enclosingClass);
+        _isJsStringClass(member.enclosingClass);
   }
 
   /// Returns `true` if [selector] applies to `JSString.split` on [receiver]
@@ -840,10 +1321,6 @@
   ClassEntity get forceInlineClass =>
       _forceInlineClass ??= _findHelperClass('ForceInline');
 
-  ClassEntity _irRepresentationClass;
-  ClassEntity get irRepresentationClass =>
-      _irRepresentationClass ??= _findHelperClass('IrRepresentation');
-
   ClassEntity _jsInvocationMirrorClass;
   ClassEntity get jsInvocationMirrorClass =>
       _jsInvocationMirrorClass ??= _findHelperClass('JSInvocationMirror');
@@ -860,8 +1337,6 @@
       _jsIndexingBehaviorInterface ??=
           _findHelperClass('JavaScriptIndexingBehavior');
 
-  ClassEntity get VoidRuntimeType => _findHelperClass('VoidRuntimeType');
-
   ClassEntity get stackTraceHelperClass => _findHelperClass('_StackTrace');
 
   ClassEntity get constantMapClass =>
@@ -879,11 +1354,6 @@
 
   ClassEntity get annotationJSNameClass => _findHelperClass('JSName');
 
-  /// The class for patch annotations defined in dart:_js_helper.
-  ClassEntity _patchAnnotationClass;
-  ClassEntity get patchAnnotationClass =>
-      _patchAnnotationClass ??= _findHelperClass('_Patch');
-
   /// The class for native annotations defined in dart:_js_helper.
   ClassEntity _nativeAnnotationClass;
   ClassEntity get nativeAnnotationClass =>
@@ -921,13 +1391,6 @@
   FunctionEntity get requiresPreambleMarker =>
       _requiresPreambleMarker ??= _findHelperFunction('requiresPreamble');
 
-  FunctionEntity get badMain => _findHelperFunction('badMain');
-
-  FunctionEntity get missingMain => _findHelperFunction('missingMain');
-
-  FunctionEntity get mainHasTooManyParameters =>
-      _findHelperFunction('mainHasTooManyParameters');
-
   FunctionEntity get loadLibraryWrapper =>
       _findHelperFunction("_loadLibraryWrapper");
 
@@ -1095,20 +1558,11 @@
 
   FunctionEntity get defineProperty => _findHelperFunction('defineProperty');
 
-  FunctionEntity get convertRtiToRuntimeType =>
-      _findHelperFunction('convertRtiToRuntimeType');
-
   bool isExtractTypeArguments(FunctionEntity member) {
     return member.name == 'extractTypeArguments' &&
         member.library == internalLibrary;
   }
 
-  FunctionEntity get toStringForNativeObject =>
-      _findHelperFunction('toStringForNativeObject');
-
-  FunctionEntity get hashCodeForNativeObject =>
-      _findHelperFunction('hashCodeForNativeObject');
-
   // TODO(johnniwinther,sra): Support arbitrary type argument count.
   void _checkTypeArgumentCount(int typeArgumentCount) {
     assert(typeArgumentCount > 0);
@@ -1154,12 +1608,9 @@
       _externalNameClass ??= _findClass(internalLibrary, 'ExternalName');
   InterfaceType get externalNameType => _getRawType(externalNameClass);
 
-  final Selector symbolValidatedConstructorSelector =
-      new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG);
-
   ConstructorEntity get symbolValidatedConstructor =>
-      _symbolValidatedConstructor ??= _findConstructor(
-          symbolImplementationClass, symbolValidatedConstructorSelector.name);
+      _symbolValidatedConstructor ??=
+          _findConstructor(symbolImplementationClass, 'validated');
 
   /// Returns the field that holds the internal name in the implementation class
   /// for `Symbol`.
@@ -1178,11 +1629,6 @@
 
   // From dart:_native_typed_data
 
-  ClassEntity _typedArrayClass;
-  ClassEntity get typedArrayClass => _typedArrayClass ??= _findClass(
-      _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
-      'NativeTypedArray');
-
   ClassEntity _typedArrayOfIntClass;
   ClassEntity get typedArrayOfIntClass => _typedArrayOfIntClass ??= _findClass(
       _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
@@ -1406,9 +1852,6 @@
   /// Calls [f] for each class member declared in [cls].
   void forEachLocalClassMember(ClassEntity cls, void f(MemberEntity member));
 
-  /// Calls [f] for each class member added to [cls] during compilation.
-  void forEachInjectedClassMember(ClassEntity cls, void f(MemberEntity member));
-
   /// Calls [f] for each class member declared or inherited in [cls] together
   /// with the class that declared the member.
   ///
@@ -1421,18 +1864,8 @@
   ///
   /// Will ensure that the class and all constructors are resolved if
   /// [ensureResolved] is `true`.
-  // TODO(redemption): Remove the 'ensureResolved' parameter
   void forEachConstructor(
-      ClassEntity cls, void f(ConstructorEntity constructor),
-      {bool ensureResolved: true});
-
-  /// Calls [f] for every constructor body in [cls].
-  void forEachConstructorBody(
-      ClassEntity cls, void f(ConstructorBodyEntity constructorBody));
-
-  /// Calls [f] for each nested closure in [member].
-  void forEachNestedClosure(
-      MemberEntity member, void f(FunctionEntity closure));
+      ClassEntity cls, void f(ConstructorEntity constructor));
 
   /// Returns the superclass of [cls].
   ///
@@ -1453,10 +1886,6 @@
   /// Calls [f] for each supertype of [cls].
   void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype));
 
-  /// Calls [f] for each class that is mixed into [cls] or one of its
-  /// superclasses.
-  void forEachMixin(ClassEntity cls, void f(ClassEntity mixin));
-
   /// Create the instantiation of [cls] with the given [typeArguments].
   InterfaceType createInterfaceType(
       ClassEntity cls, List<DartType> typeArguments);
@@ -1481,6 +1910,78 @@
   /// Returns `true` if [cls] is an unnamed mixin application.
   bool isUnnamedMixinApplication(ClassEntity cls);
 
+  /// The upper bound on the [typeVariable]. If not explicitly declared, this is
+  /// `Object`.
+  DartType getTypeVariableBound(TypeVariableEntity typeVariable);
+
+  /// Returns the type of [function].
+  FunctionType getFunctionType(FunctionEntity function);
+
+  /// Returns the function type variables defined on [function].
+  List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function);
+
+  /// Returns the 'element' type of a function with an async, async* or sync*
+  /// marker. The return type of the method is inspected to determine the type
+  /// parameter of the Future, Stream or Iterable.
+  DartType getFunctionAsyncOrSyncStarElementType(FunctionEntity function);
+
+  /// Returns the 'element' type of a function with the async, async* or sync*
+  /// marker [marker]. [returnType] is the return type marked function.
+  DartType getAsyncOrSyncStarElementType(
+      AsyncMarker marker, DartType returnType);
+
+  /// Returns the type of the [local] function.
+  FunctionType getLocalFunctionType(Local local);
+
+  /// Returns the 'unaliased' type of [type]. For typedefs this is the function
+  /// type it is an alias of, for other types it is the type itself.
+  ///
+  /// Use this during resolution to ensure that the alias has been computed.
+  // TODO(johnniwinther): Remove this when the resolver is removed.
+  DartType getUnaliasedType(DartType type);
+
+  /// Returns `true` if [cls] is a Dart enum class.
+  bool isEnumClass(ClassEntity cls);
+}
+
+abstract class KElementEnvironment extends ElementEnvironment {
+  /// Calls [f] for each class that is mixed into [cls] or one of its
+  /// superclasses.
+  void forEachMixin(ClassEntity cls, void f(ClassEntity mixin));
+
+  /// Gets the constant value of [field], or `null` if [field] is non-const.
+  ConstantExpression getFieldConstantForTesting(FieldEntity field);
+
+  /// Returns `true` if [member] a the synthetic getter `loadLibrary` injected
+  /// on deferred libraries.
+  bool isDeferredLoadLibraryGetter(MemberEntity member);
+
+  /// Returns the imports seen in [library]
+  Iterable<ImportEntity> getImports(LibraryEntity library);
+
+  /// Returns the metadata constants declared on [library].
+  Iterable<ConstantValue> getLibraryMetadata(LibraryEntity library);
+
+  /// Returns the metadata constants declared on [cls].
+  Iterable<ConstantValue> getClassMetadata(ClassEntity cls);
+
+  /// Returns the metadata constants declared on [member].
+  Iterable<ConstantValue> getMemberMetadata(MemberEntity member,
+      {bool includeParameterMetadata: false});
+}
+
+abstract class JElementEnvironment extends ElementEnvironment {
+  /// Calls [f] for each class member added to [cls] during compilation.
+  void forEachInjectedClassMember(ClassEntity cls, void f(MemberEntity member));
+
+  /// Calls [f] for every constructor body in [cls].
+  void forEachConstructorBody(
+      ClassEntity cls, void f(ConstructorBodyEntity constructorBody));
+
+  /// Calls [f] for each nested closure in [member].
+  void forEachNestedClosure(
+      MemberEntity member, void f(FunctionEntity closure));
+
   /// Returns `true` if [cls] is a mixin application that mixes in methods with
   /// super calls.
   bool isSuperMixinApplication(ClassEntity cls);
@@ -1502,65 +2003,12 @@
   /// _effective_ mixin class of both is `A`.
   ClassEntity getEffectiveMixinClass(ClassEntity cls);
 
-  /// The upper bound on the [typeVariable]. If not explicitly declared, this is
-  /// `Object`.
-  DartType getTypeVariableBound(TypeVariableEntity typeVariable);
-
   /// The default type of the [typeVariable].
   ///
   /// This is the type used as the default type argument when no explicit type
   /// argument is passed.
   DartType getTypeVariableDefaultType(TypeVariableEntity typeVariable);
 
-  /// Returns the type of [function].
-  FunctionType getFunctionType(FunctionEntity function);
-
-  /// Returns the function type variables defined on [function].
-  List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function);
-
-  /// Returns the 'element' type of a function with an async, async* or sync*
-  /// marker. The return type of the method is inspected to determine the type
-  /// parameter of the Future, Stream or Iterable.
-  DartType getFunctionAsyncOrSyncStarElementType(FunctionEntity function);
-
-  /// Returns the 'element' type of a function with the async, async* or sync*
-  /// marker [marker]. [returnType] is the return type marked function.
-  DartType getAsyncOrSyncStarElementType(
-      AsyncMarker marker, DartType returnType);
-
   /// Returns the type of [field].
   DartType getFieldType(FieldEntity field);
-
-  /// Returns the type of the [local] function.
-  FunctionType getLocalFunctionType(Local local);
-
-  /// Gets the constant value of [field], or `null` if [field] is non-const.
-  ConstantExpression getFieldConstant(FieldEntity field);
-
-  /// Returns the 'unaliased' type of [type]. For typedefs this is the function
-  /// type it is an alias of, for other types it is the type itself.
-  ///
-  /// Use this during resolution to ensure that the alias has been computed.
-  // TODO(johnniwinther): Remove this when the resolver is removed.
-  DartType getUnaliasedType(DartType type);
-
-  /// Returns `true` if [member] a the synthetic getter `loadLibrary` injected
-  /// on deferred libraries.
-  bool isDeferredLoadLibraryGetter(MemberEntity member);
-
-  /// Returns the metadata constants declared on [library].
-  Iterable<ConstantValue> getLibraryMetadata(LibraryEntity library);
-
-  /// Returns the imports seen in [library]
-  Iterable<ImportEntity> getImports(LibraryEntity library);
-
-  /// Returns the metadata constants declared on [cls].
-  Iterable<ConstantValue> getClassMetadata(ClassEntity cls);
-
-  /// Returns the metadata constants declared on [member].
-  Iterable<ConstantValue> getMemberMetadata(MemberEntity member,
-      {bool includeParameterMetadata: false});
-
-  /// Returns `true` if [cls] is a Dart enum class.
-  bool isEnumClass(ClassEntity cls);
 }
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f261270..9fbf28a 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -353,6 +353,7 @@
     new OptionHandler('--strong', ignoreOption),
     new OptionHandler(Flags.previewDart2, ignoreOption),
     new OptionHandler(Flags.omitImplicitChecks, passThrough),
+    new OptionHandler(Flags.omitAsCasts, passThrough),
     new OptionHandler(Flags.laxRuntimeTypeToString, passThrough),
     new OptionHandler(Flags.benchmarkingProduction, passThrough),
 
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index c176d1d..5da90be 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -8,7 +8,7 @@
 
 import 'common/tasks.dart' show CompilerTask;
 import 'common.dart';
-import 'common_elements.dart' show ElementEnvironment;
+import 'common_elements.dart' show KElementEnvironment;
 import 'compiler.dart' show Compiler;
 import 'constants/values.dart'
     show
@@ -147,7 +147,7 @@
     allOutputUnits.add(mainOutputUnit);
   }
 
-  ElementEnvironment get elementEnvironment =>
+  KElementEnvironment get elementEnvironment =>
       compiler.frontendStrategy.elementEnvironment;
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -359,10 +359,14 @@
             case TypeUseKind.INSTANTIATION:
             case TypeUseKind.NATIVE_INSTANTIATION:
             case TypeUseKind.IS_CHECK:
-            case TypeUseKind.AS_CAST:
             case TypeUseKind.CATCH_TYPE:
               _collectTypeDependencies(type, dependencies);
               break;
+            case TypeUseKind.AS_CAST:
+              if (!compiler.options.omitAsCasts) {
+                _collectTypeDependencies(type, dependencies);
+              }
+              break;
             case TypeUseKind.IMPLICIT_CAST:
               if (compiler.options.implicitDowncastCheckPolicy.isEmitted) {
                 _collectTypeDependencies(type, dependencies);
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index e6f6948..fc1c3c2 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -13,7 +13,7 @@
 import 'common/names.dart';
 import 'common/tasks.dart' show CompilerTask;
 import 'common.dart';
-import 'common_elements.dart';
+import 'common_elements.dart' show JElementEnvironment;
 import 'compiler.dart' show Compiler;
 import 'constants/values.dart' show ConstantValue, InterceptorConstantValue;
 import 'deferred_load.dart' show OutputUnit;
@@ -33,7 +33,7 @@
   final JClosedWorld closedWorld;
   final GlobalTypeInferenceResults _globalInferenceResults;
 
-  ElementEnvironment get environment => closedWorld.elementEnvironment;
+  JElementEnvironment get environment => closedWorld.elementEnvironment;
   CodegenWorldBuilder get codegenWorldBuilder => compiler.codegenWorldBuilder;
 
   final AllInfo result = new AllInfo();
@@ -207,7 +207,7 @@
           size += closureInfo.size;
         }
       }
-    }, ensureResolved: false);
+    });
 
     classInfo.size = size;
 
diff --git a/pkg/compiler/lib/src/elements/indexed.dart b/pkg/compiler/lib/src/elements/indexed.dart
index 28545af..f20a4ffab 100644
--- a/pkg/compiler/lib/src/elements/indexed.dart
+++ b/pkg/compiler/lib/src/elements/indexed.dart
@@ -13,16 +13,19 @@
 abstract class IndexedLibrary extends _Indexed implements LibraryEntity {
   /// Library index used for fast lookup in [KernelToElementMapBase].
   int get libraryIndex => _index;
+  int get hashCode => 7 * _index + 2;
 }
 
 abstract class IndexedClass extends _Indexed implements ClassEntity {
   /// Class index used for fast lookup in [KernelToElementMapBase].
   int get classIndex => _index;
+  int get hashCode => 7 * _index + 1;
 }
 
 abstract class IndexedMember extends _Indexed implements MemberEntity {
   /// Member index used for fast lookup in [KernelToElementMapBase].
   int get memberIndex => _index;
+  int get hashCode => 7 * _index;
 }
 
 abstract class IndexedFunction extends _Indexed
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index fa58347..3cef111 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -367,10 +367,14 @@
             nativeUsage: true, globalDependency: true);
         break;
       case TypeUseKind.IS_CHECK:
-      case TypeUseKind.AS_CAST:
       case TypeUseKind.CATCH_TYPE:
         _registerIsCheck(type);
         break;
+      case TypeUseKind.AS_CAST:
+        if (!_options.omitAsCasts) {
+          _registerIsCheck(type);
+        }
+        break;
       case TypeUseKind.IMPLICIT_CAST:
         if (_options.implicitDowncastCheckPolicy.isEmitted) {
           _registerIsCheck(type);
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 08f5f29..6597fcd 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -1278,7 +1278,7 @@
   KernelTypeSystemStrategy(
       this._elementMap, this._globalLocalsMap, this._closureDataLookup);
 
-  ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment;
+  JElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment;
 
   @override
   bool checkClassEntity(ClassEntity cls) => true;
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
new file mode 100644
index 0000000..0833c83
--- /dev/null
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -0,0 +1,543 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/class_hierarchy.dart' as ir;
+import 'package:kernel/core_types.dart' as ir;
+import 'package:kernel/type_algebra.dart' as ir;
+import 'package:kernel/type_environment.dart' as ir;
+
+/// Visitor that computes the static type of an expression.
+///
+/// This visitor doesn't traverse subtrees that are not needed for computing
+/// the static type.
+// TODO(johnniwinther): Add improved type promotion to handle negative
+// reasoning.
+abstract class StaticTypeVisitor extends ir.Visitor<ir.DartType> {
+  ir.TypeEnvironment _typeEnvironment;
+
+  StaticTypeVisitor(this._typeEnvironment);
+
+  fail(String message) => message;
+
+  ir.TypeEnvironment get typeEnvironment => _typeEnvironment;
+
+  /// Returns the static type of the expression as an instantiation of
+  /// [superclass].
+  ///
+  /// Should only be used on code compiled in strong mode, as this method
+  /// assumes the IR is strongly typed.
+  ///
+  /// This method furthermore assumes that the type of the expression actually
+  /// is a subtype of (some instantiation of) the given [superclass].
+  /// If this is not the case the raw type of [superclass] is returned.
+  ///
+  /// This method is derived from `ir.Expression.getStaticTypeAsInstanceOf`.
+  ir.InterfaceType getTypeAsInstanceOf(ir.DartType type, ir.Class superclass) {
+    // This method assumes the program is correctly typed, so if the superclass
+    // is not generic, we can just return its raw type without computing the
+    // type of this expression.  It also ensures that all types are considered
+    // subtypes of Object (not just interface types), and function types are
+    // considered subtypes of Function.
+    if (superclass.typeParameters.isEmpty) {
+      return superclass.rawType;
+    }
+    while (type is ir.TypeParameterType) {
+      type = (type as ir.TypeParameterType).parameter.bound;
+    }
+    if (type is ir.InterfaceType) {
+      ir.InterfaceType upcastType =
+          typeEnvironment.hierarchy.getTypeAsInstanceOf(type, superclass);
+      if (upcastType != null) return upcastType;
+    } else if (type is ir.BottomType) {
+      return superclass.bottomType;
+    }
+    return superclass.rawType;
+  }
+
+  @override
+  ir.DartType defaultNode(ir.Node node) {
+    return null;
+  }
+
+  ir.DartType visitNode(ir.Node node) {
+    return node?.accept(this);
+  }
+
+  Null visitNodes(List<ir.Node> nodes) {
+    for (ir.Node node in nodes) {
+      visitNode(node);
+    }
+  }
+
+  ir.DartType defaultExpression(ir.Expression node) {
+    throw fail('Unhandled node $node (${node.runtimeType})');
+  }
+
+  @override
+  ir.DartType visitAsExpression(ir.AsExpression node) {
+    return node.type;
+  }
+
+  @override
+  ir.DartType visitAwaitExpression(ir.AwaitExpression node) {
+    return typeEnvironment.unfutureType(visitNode(node.operand));
+  }
+
+  @override
+  ir.DartType visitBoolLiteral(ir.BoolLiteral node) => typeEnvironment.boolType;
+
+  @override
+  ir.DartType visitCheckLibraryIsLoaded(ir.CheckLibraryIsLoaded node) =>
+      typeEnvironment.objectType;
+
+  @override
+  ir.DartType visitStringLiteral(ir.StringLiteral node) =>
+      typeEnvironment.stringType;
+
+  @override
+  ir.DartType visitStringConcatenation(ir.StringConcatenation node) {
+    return typeEnvironment.stringType;
+  }
+
+  @override
+  ir.DartType visitNullLiteral(ir.NullLiteral node) => const ir.BottomType();
+
+  @override
+  ir.DartType visitIntLiteral(ir.IntLiteral node) => typeEnvironment.intType;
+
+  @override
+  ir.DartType visitDoubleLiteral(ir.DoubleLiteral node) =>
+      typeEnvironment.doubleType;
+
+  @override
+  ir.DartType visitSymbolLiteral(ir.SymbolLiteral node) =>
+      typeEnvironment.symbolType;
+
+  @override
+  ir.DartType visitListLiteral(ir.ListLiteral node) {
+    return typeEnvironment.literalListType(node.typeArgument);
+  }
+
+  @override
+  ir.DartType visitMapLiteral(ir.MapLiteral node) {
+    return typeEnvironment.literalMapType(node.keyType, node.valueType);
+  }
+
+  @override
+  ir.DartType visitVariableGet(ir.VariableGet node) =>
+      node.promotedType ?? node.variable.type;
+
+  @override
+  ir.DartType visitVariableSet(ir.VariableSet node) {
+    return visitNode(node.value);
+  }
+
+  ir.DartType computePropertyGetType(
+      ir.PropertyGet node, ir.DartType receiverType) {
+    ir.Member interfaceTarget = node.interfaceTarget;
+    if (interfaceTarget != null) {
+      ir.Class superclass = interfaceTarget.enclosingClass;
+      receiverType = getTypeAsInstanceOf(receiverType, superclass);
+      return ir.Substitution.fromInterfaceType(receiverType)
+          .substituteType(interfaceTarget.getterType);
+    }
+    // Treat the properties of Object specially.
+    String nameString = node.name.name;
+    if (nameString == 'hashCode') {
+      return typeEnvironment.intType;
+    } else if (nameString == 'runtimeType') {
+      return typeEnvironment.typeType;
+    }
+    return const ir.DynamicType();
+  }
+
+  @override
+  ir.DartType visitPropertyGet(ir.PropertyGet node) {
+    ir.DartType receiverType = visitNode(node.receiver);
+    return computePropertyGetType(node, receiverType);
+  }
+
+  @override
+  ir.DartType visitPropertySet(ir.PropertySet node) {
+    return visitNode(node.value);
+  }
+
+  @override
+  ir.DartType visitDirectPropertyGet(ir.DirectPropertyGet node) {
+    ir.DartType receiverType = visitNode(node.receiver);
+    ir.Class superclass = node.target.enclosingClass;
+    receiverType = getTypeAsInstanceOf(receiverType, superclass);
+    return ir.Substitution.fromInterfaceType(receiverType)
+        .substituteType(node.target.getterType);
+  }
+
+  @override
+  ir.DartType visitDirectMethodInvocation(ir.DirectMethodInvocation node) {
+    ir.DartType receiverType = visitNode(node.receiver);
+    if (typeEnvironment.isOverloadedArithmeticOperator(node.target)) {
+      ir.DartType argumentType = visitNode(node.arguments.positional[0]);
+      return typeEnvironment.getTypeOfOverloadedArithmetic(
+          receiverType, argumentType);
+    }
+    ir.Class superclass = node.target.enclosingClass;
+    receiverType = getTypeAsInstanceOf(receiverType, superclass);
+    ir.DartType returnType = ir.Substitution.fromInterfaceType(receiverType)
+        .substituteType(node.target.function.returnType);
+    return ir.Substitution.fromPairs(
+            node.target.function.typeParameters, node.arguments.types)
+        .substituteType(returnType);
+  }
+
+  @override
+  ir.DartType visitDirectPropertySet(ir.DirectPropertySet node) {
+    return visitNode(node.value);
+  }
+
+  @override
+  ir.DartType visitThisExpression(ir.ThisExpression node) =>
+      typeEnvironment.thisType;
+
+  /// Returns `true` if [interfaceTarget] is an arithmetic operator whose result
+  /// type is computed using both the receiver type and the argument type.
+  ///
+  /// Visitors that subclass the [StaticTypeVisitor] must special case this
+  /// target as to avoid visiting the argument twice.
+  bool isSpecialCasedBinaryOperator(ir.Member interfaceTarget) {
+    return interfaceTarget is ir.Procedure &&
+        typeEnvironment.isOverloadedArithmeticOperator(interfaceTarget);
+  }
+
+  ir.DartType computeMethodInvocationType(
+      ir.MethodInvocation node, ir.DartType receiverType) {
+    ir.Member interfaceTarget = node.interfaceTarget;
+    if (interfaceTarget != null) {
+      if (isSpecialCasedBinaryOperator(interfaceTarget)) {
+        ir.DartType argumentType = visitNode(node.arguments.positional[0]);
+        return typeEnvironment.getTypeOfOverloadedArithmetic(
+            receiverType, argumentType);
+      }
+      ir.Class superclass = interfaceTarget.enclosingClass;
+      receiverType = getTypeAsInstanceOf(receiverType, superclass);
+      ir.DartType getterType = ir.Substitution.fromInterfaceType(receiverType)
+          .substituteType(interfaceTarget.getterType);
+      if (getterType is ir.FunctionType) {
+        return ir.Substitution.fromPairs(
+                getterType.typeParameters, node.arguments.types)
+            .substituteType(getterType.returnType);
+      } else {
+        return const ir.DynamicType();
+      }
+    }
+    if (node.name.name == 'call') {
+      if (receiverType is ir.FunctionType) {
+        if (receiverType.typeParameters.length != node.arguments.types.length) {
+          return const ir.BottomType();
+        }
+        return ir.Substitution.fromPairs(
+                receiverType.typeParameters, node.arguments.types)
+            .substituteType(receiverType.returnType);
+      }
+    }
+    if (node.name.name == '==') {
+      // We use this special case to simplify generation of '==' checks.
+      return typeEnvironment.boolType;
+    }
+    return const ir.DynamicType();
+  }
+
+  @override
+  ir.DartType visitMethodInvocation(ir.MethodInvocation node) {
+    ir.DartType receiverType = visitNode(node.receiver);
+    return computeMethodInvocationType(node, receiverType);
+  }
+
+  @override
+  ir.DartType visitStaticGet(ir.StaticGet node) => node.target.getterType;
+
+  @override
+  ir.DartType visitStaticSet(ir.StaticSet node) {
+    return visitNode(node.value);
+  }
+
+  @override
+  ir.DartType visitStaticInvocation(ir.StaticInvocation node) {
+    return ir.Substitution.fromPairs(
+            node.target.function.typeParameters, node.arguments.types)
+        .substituteType(node.target.function.returnType);
+  }
+
+  @override
+  ir.DartType visitConstructorInvocation(ir.ConstructorInvocation node) {
+    return node.arguments.types.isEmpty
+        ? node.target.enclosingClass.rawType
+        : new ir.InterfaceType(
+            node.target.enclosingClass, node.arguments.types);
+  }
+
+  @override
+  ir.DartType visitSuperPropertyGet(ir.SuperPropertyGet node) {
+    if (node.interfaceTarget == null) {
+      // TODO(johnniwinther): Resolve and set the target here.
+      return const ir.DynamicType();
+    }
+    ir.Class declaringClass = node.interfaceTarget.enclosingClass;
+    if (declaringClass.typeParameters.isEmpty) {
+      return node.interfaceTarget.getterType;
+    }
+    ir.DartType receiver = typeEnvironment.hierarchy
+        .getTypeAsInstanceOf(typeEnvironment.thisType, declaringClass);
+    return ir.Substitution.fromInterfaceType(receiver)
+        .substituteType(node.interfaceTarget.getterType);
+  }
+
+  @override
+  ir.DartType visitSuperPropertySet(ir.SuperPropertySet node) {
+    return visitNode(node.value);
+  }
+
+  @override
+  ir.DartType visitSuperMethodInvocation(ir.SuperMethodInvocation node) {
+    if (node.interfaceTarget == null) {
+      // TODO(johnniwinther): Resolve and set the target here.
+      return const ir.DynamicType();
+    }
+    ir.Class superclass = node.interfaceTarget.enclosingClass;
+    ir.InterfaceType receiverType = typeEnvironment.hierarchy
+        .getTypeAsInstanceOf(typeEnvironment.thisType, superclass);
+    ir.DartType returnType = ir.Substitution.fromInterfaceType(receiverType)
+        .substituteType(node.interfaceTarget.function.returnType);
+    return ir.Substitution.fromPairs(
+            node.interfaceTarget.function.typeParameters, node.arguments.types)
+        .substituteType(returnType);
+  }
+
+  @override
+  ir.DartType visitThrow(ir.Throw node) => const ir.BottomType();
+
+  @override
+  ir.DartType visitRethrow(ir.Rethrow node) => const ir.BottomType();
+
+  @override
+  ir.DartType visitLogicalExpression(ir.LogicalExpression node) =>
+      typeEnvironment.boolType;
+
+  @override
+  ir.DartType visitNot(ir.Not node) {
+    return typeEnvironment.boolType;
+  }
+
+  @override
+  ir.DartType visitConditionalExpression(ir.ConditionalExpression node) {
+    return node.staticType;
+  }
+
+  @override
+  ir.DartType visitIsExpression(ir.IsExpression node) {
+    return typeEnvironment.boolType;
+  }
+
+  @override
+  ir.DartType visitTypeLiteral(ir.TypeLiteral node) => typeEnvironment.typeType;
+
+  @override
+  ir.DartType visitFunctionExpression(ir.FunctionExpression node) {
+    return node.function.functionType;
+  }
+
+  @override
+  ir.DartType visitLet(ir.Let node) {
+    return visitNode(node.body);
+  }
+
+  ir.DartType computeInstantiationType(
+      ir.Instantiation node, ir.FunctionType expressionType) {
+    return ir.Substitution.fromPairs(
+            expressionType.typeParameters, node.typeArguments)
+        .substituteType(expressionType.withoutTypeParameters);
+  }
+
+  @override
+  ir.DartType visitInstantiation(ir.Instantiation node) {
+    ir.FunctionType expressionType = visitNode(node.expression);
+    return computeInstantiationType(node, expressionType);
+  }
+
+  @override
+  ir.DartType visitInvalidExpression(ir.InvalidExpression node) =>
+      const ir.BottomType();
+
+  @override
+  ir.DartType visitLoadLibrary(ir.LoadLibrary node) {
+    return typeEnvironment.futureType(const ir.DynamicType());
+  }
+}
+
+/// Visitor that computes the static type of an expression using a cache to
+/// avoid recomputations.
+class CachingStaticTypeVisitor extends StaticTypeVisitor {
+  Map<ir.Expression, ir.DartType> _cache = {};
+
+  CachingStaticTypeVisitor(ir.TypeEnvironment typeEnvironment)
+      : super(typeEnvironment);
+
+  @override
+  ir.DartType visitNode(ir.Node node) {
+    ir.DartType result;
+    if (node is ir.Expression) {
+      result = _cache[node];
+      if (result != null) return result;
+      result = super.visitNode(node);
+      _cache[node] = result;
+    } else {
+      result = super.visitNode(node);
+    }
+    return result;
+  }
+}
+
+/// Visitor that traverse the whole tree while returning the static type of
+/// expressions.
+abstract class StaticTypeTraversalVisitor extends StaticTypeVisitor {
+  StaticTypeTraversalVisitor(ir.TypeEnvironment typeEnvironment)
+      : super(typeEnvironment);
+
+  @override
+  ir.DartType defaultNode(ir.Node node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  Null defaultMember(ir.Member node) {
+    typeEnvironment.thisType =
+        node.enclosingClass != null ? node.enclosingClass.thisType : null;
+    node.visitChildren(this);
+    typeEnvironment.thisType = null;
+    return null;
+  }
+
+  ir.DartType visitExpressionStatement(ir.ExpressionStatement node) {
+    visitNode(node.expression);
+    return null;
+  }
+
+  @override
+  ir.DartType visitAsExpression(ir.AsExpression node) {
+    visitNode(node.operand);
+    return super.visitAsExpression(node);
+  }
+
+  @override
+  ir.DartType visitStringConcatenation(ir.StringConcatenation node) {
+    visitNodes(node.expressions);
+    return super.visitStringConcatenation(node);
+  }
+
+  @override
+  ir.DartType visitListLiteral(ir.ListLiteral node) {
+    visitNodes(node.expressions);
+    return super.visitListLiteral(node);
+  }
+
+  @override
+  ir.DartType visitMapLiteral(ir.MapLiteral node) {
+    visitNodes(node.entries);
+    return super.visitMapLiteral(node);
+  }
+
+  @override
+  ir.DartType visitPropertySet(ir.PropertySet node) {
+    visitNode(node.receiver);
+    return super.visitPropertySet(node);
+  }
+
+  @override
+  ir.DartType visitDirectMethodInvocation(ir.DirectMethodInvocation node) {
+    visitNodes(node.arguments.positional);
+    visitNodes(node.arguments.named);
+    return super.visitDirectMethodInvocation(node);
+  }
+
+  @override
+  ir.DartType visitDirectPropertySet(ir.DirectPropertySet node) {
+    visitNode(node.receiver);
+    return super.visitDirectPropertySet(node);
+  }
+
+  @override
+  ir.DartType visitMethodInvocation(ir.MethodInvocation node) {
+    if (isSpecialCasedBinaryOperator(node.interfaceTarget)) {
+      return super.visitMethodInvocation(node);
+    }
+    visitNodes(node.arguments.positional);
+    visitNodes(node.arguments.named);
+    return super.visitMethodInvocation(node);
+  }
+
+  @override
+  ir.DartType visitStaticInvocation(ir.StaticInvocation node) {
+    visitNodes(node.arguments.positional);
+    visitNodes(node.arguments.named);
+    return super.visitStaticInvocation(node);
+  }
+
+  @override
+  ir.DartType visitConstructorInvocation(ir.ConstructorInvocation node) {
+    visitNodes(node.arguments.positional);
+    visitNodes(node.arguments.named);
+    return super.visitConstructorInvocation(node);
+  }
+
+  @override
+  ir.DartType visitSuperMethodInvocation(ir.SuperMethodInvocation node) {
+    visitNodes(node.arguments.positional);
+    visitNodes(node.arguments.named);
+    return super.visitSuperMethodInvocation(node);
+  }
+
+  @override
+  ir.DartType visitThrow(ir.Throw node) {
+    visitNode(node.expression);
+    return super.visitThrow(node);
+  }
+
+  @override
+  ir.DartType visitLogicalExpression(ir.LogicalExpression node) {
+    visitNode(node.left);
+    visitNode(node.right);
+    return super.visitLogicalExpression(node);
+  }
+
+  @override
+  ir.DartType visitNot(ir.Not node) {
+    visitNode(node.operand);
+    return super.visitNot(node);
+  }
+
+  @override
+  ir.DartType visitConditionalExpression(ir.ConditionalExpression node) {
+    visitNode(node.condition);
+    visitNode(node.then);
+    visitNode(node.otherwise);
+    return super.visitConditionalExpression(node);
+  }
+
+  @override
+  ir.DartType visitIsExpression(ir.IsExpression node) {
+    visitNode(node.operand);
+    return super.visitIsExpression(node);
+  }
+
+  @override
+  ir.DartType visitFunctionExpression(ir.FunctionExpression node) {
+    visitNode(node.function.body);
+    return super.visitFunctionExpression(node);
+  }
+
+  @override
+  ir.DartType visitLet(ir.Let node) {
+    visitNode(node.variable.initializer);
+    return super.visitLet(node);
+  }
+}
diff --git a/pkg/compiler/lib/src/ir/visitors.dart b/pkg/compiler/lib/src/ir/visitors.dart
index 3e97494..5cc478d 100644
--- a/pkg/compiler/lib/src/ir/visitors.dart
+++ b/pkg/compiler/lib/src/ir/visitors.dart
@@ -3,6 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/class_hierarchy.dart' as ir;
+import 'package:kernel/core_types.dart' as ir;
+import 'package:kernel/type_algebra.dart' as ir;
+import 'package:kernel/type_environment.dart' as ir;
 
 import '../common.dart';
 import '../constants/constructors.dart';
diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index a36eea2..f2e11f2 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.dart
@@ -4,7 +4,7 @@
 
 library js_backend.backend.annotations;
 
-import '../common_elements.dart';
+import '../common_elements.dart' show KCommonElements, KElementEnvironment;
 import '../constants/values.dart';
 import '../diagnostics/diagnostic_listener.dart';
 import '../diagnostics/messages.dart';
@@ -14,8 +14,8 @@
 const VERBOSE_OPTIMIZER_HINTS = false;
 
 /// Returns `true` if inlining is disabled for [element].
-bool _noInline(ElementEnvironment elementEnvironment,
-    CommonElements commonElements, MemberEntity element) {
+bool _noInline(KElementEnvironment elementEnvironment,
+    KCommonElements commonElements, MemberEntity element) {
   if (_hasAnnotation(
       elementEnvironment, element, commonElements.metaNoInlineClass)) {
     return true;
@@ -30,8 +30,8 @@
 }
 
 /// Returns `true` if inlining is requested for [element].
-bool _tryInline(ElementEnvironment elementEnvironment,
-    CommonElements commonElements, MemberEntity element) {
+bool _tryInline(KElementEnvironment elementEnvironment,
+    KCommonElements commonElements, MemberEntity element) {
   if (_hasAnnotation(
       elementEnvironment, element, commonElements.metaTryInlineClass)) {
     return true;
@@ -41,22 +41,22 @@
 
 /// Returns `true` if parameter and returns types should be trusted for
 /// [element].
-bool _trustTypeAnnotations(ElementEnvironment elementEnvironment,
-    CommonElements commonElements, MemberEntity element) {
+bool _trustTypeAnnotations(KElementEnvironment elementEnvironment,
+    KCommonElements commonElements, MemberEntity element) {
   return _hasAnnotation(elementEnvironment, element,
       commonElements.expectTrustTypeAnnotationsClass);
 }
 
 /// Returns `true` if inference of parameter types is disabled for [element].
-bool _assumeDynamic(ElementEnvironment elementEnvironment,
-    CommonElements commonElements, MemberEntity element) {
+bool _assumeDynamic(KElementEnvironment elementEnvironment,
+    KCommonElements commonElements, MemberEntity element) {
   return _hasAnnotation(
       elementEnvironment, element, commonElements.expectAssumeDynamicClass);
 }
 
 /// Returns `true` if [element] is annotated with [annotationClass].
-bool _hasAnnotation(ElementEnvironment elementEnvironment, MemberEntity element,
-    ClassEntity annotationClass) {
+bool _hasAnnotation(KElementEnvironment elementEnvironment,
+    MemberEntity element, ClassEntity annotationClass) {
   if (annotationClass == null) return false;
   for (ConstantValue value in elementEnvironment.getMemberMetadata(element)) {
     if (value.isConstructedObject) {
@@ -73,8 +73,8 @@
 // TODO(johnniwinther): Merge this with [AnnotationProcessor].
 AnnotationsData processAnnotations(
     DiagnosticReporter reporter,
-    CommonElements commonElements,
-    ElementEnvironment elementEnvironment,
+    KCommonElements commonElements,
+    KElementEnvironment elementEnvironment,
     Iterable<MemberEntity> processedMembers) {
   AnnotationsDataBuilder annotationsDataBuilder = new AnnotationsDataBuilder();
 
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 75186d5..b3e02ac 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -115,7 +115,7 @@
 
   BackendUsageBuilderImpl(this._frontendStrategy);
 
-  CommonElements get _commonElements => _frontendStrategy.commonElements;
+  KCommonElements get _commonElements => _frontendStrategy.commonElements;
 
   @override
   void registerBackendFunctionUse(FunctionEntity element) {
@@ -160,10 +160,6 @@
         element == _commonElements.stringClass) {
       // TODO(johnniwinther): Avoid these.
       return true;
-    } else if (element == _commonElements.genericNoSuchMethod ||
-        element == _commonElements.unresolvedConstructorError ||
-        element == _commonElements.malformedTypeError) {
-      return true;
     }
     return false;
   }
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 709b64f..2d2ddea 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -36,7 +36,7 @@
       new RegExp(r'''^ *(//.*)?\n|  *//[^''"\n]*$''', multiLine: true);
 
   final CompilerOptions _options;
-  final CommonElements _commonElements;
+  final JCommonElements _commonElements;
   final CodegenWorldBuilder _worldBuilder;
   final RuntimeTypesNeed _rtiNeed;
   final RuntimeTypesEncoder _rtiEncoder;
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 361a39b..44c9b93 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -180,10 +180,14 @@
         _registerInstantiatedType(type, nativeUsage: true);
         break;
       case TypeUseKind.IS_CHECK:
-      case TypeUseKind.AS_CAST:
       case TypeUseKind.CATCH_TYPE:
         _registerIsCheck(type);
         break;
+      case TypeUseKind.AS_CAST:
+        if (!_options.omitAsCasts) {
+          _registerIsCheck(type);
+        }
+        break;
       case TypeUseKind.IMPLICIT_CAST:
         if (_options.implicitDowncastCheckPolicy.isEmitted) {
           _registerIsCheck(type);
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 8876430..282086e 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -160,8 +160,10 @@
           onIsCheck(type, transformed);
           break;
         case TypeUseKind.AS_CAST:
-          onIsCheck(type, transformed);
-          hasAsCast = true;
+          if (!_options.omitAsCasts) {
+            onIsCheck(type, transformed);
+            hasAsCast = true;
+          }
           break;
         case TypeUseKind.IMPLICIT_CAST:
           if (_options.implicitDowncastCheckPolicy.isEmitted) {
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index f621411..f4db4d7 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -5,7 +5,8 @@
 library js_backend.interceptor_data;
 
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common_elements.dart'
+    show CommonElements, KCommonElements, KElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
@@ -219,8 +220,8 @@
 
 class InterceptorDataBuilderImpl implements InterceptorDataBuilder {
   final NativeBasicData _nativeData;
-  final ElementEnvironment _elementEnvironment;
-  final CommonElements _commonElements;
+  final KElementEnvironment _elementEnvironment;
+  final KCommonElements _commonElements;
 
   /// The members of instantiated interceptor classes: maps a member name to the
   /// list of members that have that name. This map is used by the codegen to
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index e73e773..aef92595 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -5,7 +5,7 @@
 library js_backend.backend.resolution_listener;
 
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common_elements.dart' show KCommonElements, KElementEnvironment;
 import '../constants/values.dart';
 import '../deferred_load.dart';
 import '../elements/entities.dart';
@@ -32,8 +32,8 @@
   final DeferredLoadTask _deferredLoadTask;
 
   final CompilerOptions _options;
-  final ElementEnvironment _elementEnvironment;
-  final CommonElements _commonElements;
+  final KElementEnvironment _elementEnvironment;
+  final KCommonElements _commonElements;
   final BackendImpacts _impacts;
 
   final NativeBasicData _nativeData;
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index d2ff93c..0faa130 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -6,7 +6,12 @@
 
 import '../common.dart';
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common_elements.dart'
+    show
+        CommonElements,
+        ElementEnvironment,
+        JCommonElements,
+        JElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
@@ -286,7 +291,8 @@
   JClosedWorld get _closedWorld;
   TypeChecks get _requiredChecks;
 
-  ElementEnvironment get _elementEnvironment => _closedWorld.elementEnvironment;
+  JElementEnvironment get _elementEnvironment =>
+      _closedWorld.elementEnvironment;
   DartTypes get _types => _closedWorld.dartTypes;
   RuntimeTypesNeed get _rtiNeed => _closedWorld.rtiNeed;
 
@@ -1719,9 +1725,6 @@
         });
         localFunctionsNeedingSignature.addAll(localFunctions);
       }
-      for (FunctionEntity function in resolutionWorldBuilder.genericMethods) {
-        potentiallyNeedTypeArguments(function);
-      }
       for (FunctionEntity function
           in resolutionWorldBuilder.closurizedMembersWithFreeTypeVariables) {
         methodsNeedingSignature.add(function);
@@ -1852,8 +1855,9 @@
 
   RuntimeTypesImpl(this._closedWorld) : super(_closedWorld.dartTypes);
 
-  CommonElements get _commonElements => _closedWorld.commonElements;
-  ElementEnvironment get _elementEnvironment => _closedWorld.elementEnvironment;
+  JCommonElements get _commonElements => _closedWorld.commonElements;
+  JElementEnvironment get _elementEnvironment =>
+      _closedWorld.elementEnvironment;
   RuntimeTypesNeed get _rtiNeed => _closedWorld.rtiNeed;
 
   @override
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
index 4b4b1c4..6592f68 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
@@ -12,8 +12,8 @@
  */
 class Collector {
   final CompilerOptions _options;
-  final CommonElements _commonElements;
-  final ElementEnvironment _elementEnvironment;
+  final JCommonElements _commonElements;
+  final JElementEnvironment _elementEnvironment;
   final OutputUnitData _outputUnitData;
   final CodegenWorldBuilder _worldBuilder;
   // TODO(floitsch): the code-emitter task should not need a namer.
@@ -116,7 +116,7 @@
 
   // Return the classes that are just helpers for the backend's type system.
   static Iterable<ClassEntity> getBackendTypeHelpers(
-      CommonElements commonElements) {
+      JCommonElements commonElements) {
     return <ClassEntity>[
       commonElements.jsMutableArrayClass,
       commonElements.jsFixedArrayClass,
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
index ae7de9e..c5f8d9a 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
@@ -27,8 +27,8 @@
 
 class FieldVisitor {
   final CompilerOptions _options;
-  final ElementEnvironment _elementEnvironment;
-  final CommonElements _commonElements;
+  final JElementEnvironment _elementEnvironment;
+  final JCommonElements _commonElements;
   final CodegenWorldBuilder _codegenWorldBuilder;
   final NativeData _nativeData;
   final Namer _namer;
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 de9d367..519a395 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
@@ -11,7 +11,7 @@
 import '../../common/names.dart' show Names, Selectors;
 import '../../constants/values.dart'
     show ConstantValue, InterceptorConstantValue;
-import '../../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../../common_elements.dart' show JCommonElements, JElementEnvironment;
 import '../../deferred_load.dart'
     show DeferredLoadTask, OutputUnit, OutputUnitData;
 import '../../elements/entities.dart';
@@ -61,8 +61,8 @@
 class ProgramBuilder {
   final CompilerOptions _options;
   final DiagnosticReporter _reporter;
-  final ElementEnvironment _elementEnvironment;
-  final CommonElements _commonElements;
+  final JElementEnvironment _elementEnvironment;
+  final JCommonElements _commonElements;
   final DeferredLoadTask _deferredLoadTask;
   final OutputUnitData _outputUnitData;
   final CodegenWorldBuilder _worldBuilder;
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index 32e0c66..2195bc8 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -6,7 +6,7 @@
 
 import '../common.dart';
 import '../constants/values.dart';
-import '../common_elements.dart';
+import '../common_elements.dart' show JCommonElements, JElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
 import '../elements/names.dart';
@@ -28,7 +28,7 @@
 /// global type inference and building the SSA graph for members.
 abstract class JsToElementMap {
   /// Access to the commonly used elements and types.
-  CommonElements get commonElements;
+  JCommonElements get commonElements;
 
   /// Access to the [DartTypes] object.
   DartTypes get types;
@@ -126,7 +126,7 @@
   DartType getStaticType(ir.Expression node);
 
   /// [ElementEnvironment] for library, class and member lookup.
-  ElementEnvironment get elementEnvironment;
+  JElementEnvironment get elementEnvironment;
 
   /// Returns the list of [DartType]s corresponding to [types].
   List<DartType> getDartTypes(List<ir.DartType> types);
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 4bb698f..5d2fb0c 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/type_environment.dart' as ir;
 
 import '../common.dart';
 import '../constants/values.dart';
-import '../common_elements.dart';
+import '../common_elements.dart' show KCommonElements, KElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
@@ -21,15 +22,17 @@
 /// Interface that translates between Kernel IR nodes and entities used for
 /// computing the [WorldImpact] for members.
 abstract class KernelToElementMap {
-  ElementEnvironment get elementEnvironment;
+  KElementEnvironment get elementEnvironment;
   NativeBasicData get nativeBasicData;
 
   /// Access to the commonly used elements and types.
-  CommonElements get commonElements;
+  KCommonElements get commonElements;
 
   /// Access to the [DartTypes] object.
   DartTypes get types;
 
+  ir.TypeEnvironment get typeEnvironment;
+
   /// Returns the [DartType] corresponding to [type].
   DartType getDartType(ir.DartType type);
 
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index d09ed9c..5fd5bfb 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -9,6 +9,7 @@
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
+import 'package:kernel/type_algebra.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
 
 import '../common.dart';
@@ -68,8 +69,8 @@
 abstract class KernelToElementMapBase implements IrToElementMap {
   final CompilerOptions options;
   final DiagnosticReporter reporter;
-  CommonElements _commonElements;
-  ElementEnvironment _elementEnvironment;
+  CommonElementsImpl _commonElements;
+  KernelElementEnvironment _elementEnvironment;
   DartTypeConverter _typeConverter;
   KernelConstantEnvironment _constantEnvironment;
   KernelDartTypes _types;
@@ -91,7 +92,7 @@
 
   KernelToElementMapBase(this.options, this.reporter, Environment environment) {
     _elementEnvironment = new KernelElementEnvironment(this);
-    _commonElements = new CommonElements(_elementEnvironment);
+    _commonElements = new CommonElementsImpl(_elementEnvironment);
     _constantEnvironment = new KernelConstantEnvironment(this, environment);
     _typeConverter = new DartTypeConverter(this);
     _types = new KernelDartTypes(this);
@@ -101,10 +102,10 @@
 
   DartTypes get types => _types;
 
-  ElementEnvironment get elementEnvironment => _elementEnvironment;
+  KernelElementEnvironment get elementEnvironment => _elementEnvironment;
 
   @override
-  CommonElements get commonElements => _commonElements;
+  CommonElementsImpl get commonElements => _commonElements;
 
   /// NativeBasicData is need for computation of the default super class.
   NativeBasicData get nativeBasicData;
@@ -130,10 +131,12 @@
       } else if (spannable is IndexedClass &&
           spannable.classIndex < classes.length) {
         ClassData data = classes.getData(spannable);
+        assert(data != null, "No data for $spannable in $this");
         return data.definition.location;
       } else if (spannable is IndexedMember &&
           spannable.memberIndex < members.length) {
         MemberData data = members.getData(spannable);
+        assert(data != null, "No data for $spannable in $this");
         return data.definition.location;
       } else if (spannable is KLocalFunction) {
         return getSourceSpan(spannable.memberContext, currentElement);
@@ -284,7 +287,47 @@
           return supertype;
         }
 
-        InterfaceType supertype = processSupertype(node.supertype);
+        InterfaceType supertype;
+        LinkBuilder<InterfaceType> linkBuilder =
+            new LinkBuilder<InterfaceType>();
+        if (node.isMixinDeclaration) {
+          // A mixin declaration
+          //
+          //   mixin M on A, B, C {}
+          //
+          // is encoded by CFE as
+          //
+          //   abstract class M extends A with B, C {}
+          //
+          // but we encode it as
+          //
+          //   abstract class M extends Object implements A, B, C {}
+          //
+          // so we need to collect the non-Object superclasses and add them
+          // to the interfaces of M.
+
+          ir.Class superclass = node.superclass;
+          while (superclass != null) {
+            if (superclass.isAnonymousMixin) {
+              // Add second to last mixed in superclasses. `B` and `C` in the
+              // example above.
+              ir.DartType mixinType = typeEnvironment.hierarchy
+                  .getTypeAsInstanceOf(node.thisType, superclass.mixedInClass);
+              linkBuilder.addLast(getDartType(mixinType));
+            } else {
+              // Add first mixed in superclass. `A` in the example above.
+              ir.DartType mixinType = typeEnvironment.hierarchy
+                  .getTypeAsInstanceOf(node.thisType, superclass);
+              linkBuilder.addLast(getDartType(mixinType));
+              break;
+            }
+            superclass = superclass.superclass;
+          }
+          // Set superclass to `Object`.
+          supertype = _commonElements.objectType;
+        } else {
+          supertype = processSupertype(node.supertype);
+        }
         if (supertype == _commonElements.objectType) {
           ClassEntity defaultSuperclass =
               _commonElements.getDefaultSuperclass(cls, nativeBasicData);
@@ -292,8 +335,6 @@
         } else {
           data.supertype = supertype;
         }
-        LinkBuilder<InterfaceType> linkBuilder =
-            new LinkBuilder<InterfaceType>();
         if (node.mixedInType != null) {
           data.isMixinApplication = true;
           linkBuilder
@@ -709,20 +750,24 @@
     return data.imports[node];
   }
 
-  DartType getStaticType(ir.Expression node) {
+  ir.TypeEnvironment get typeEnvironment {
     if (_typeEnvironment == null) {
       _typeEnvironment ??= new ir.TypeEnvironment(
           new ir.CoreTypes(env.mainComponent),
           new ir.ClassHierarchy(env.mainComponent));
     }
+    return _typeEnvironment;
+  }
+
+  DartType getStaticType(ir.Expression node) {
     ir.TreeNode enclosingClass = node;
     while (enclosingClass != null && enclosingClass is! ir.Class) {
       enclosingClass = enclosingClass.parent;
     }
     try {
-      _typeEnvironment.thisType =
+      typeEnvironment.thisType =
           enclosingClass is ir.Class ? enclosingClass.thisType : null;
-      return getDartType(node.getStaticType(_typeEnvironment));
+      return getDartType(node.getStaticType(typeEnvironment));
     } catch (e) {
       // The static type computation crashes on type errors. Use `dynamic`
       // as static type.
@@ -1717,7 +1762,8 @@
   }
 }
 
-class KernelElementEnvironment extends ElementEnvironment {
+class KernelElementEnvironment extends ElementEnvironment
+    implements KElementEnvironment, JElementEnvironment {
   final KernelToElementMapBase elementMap;
 
   KernelElementEnvironment(this.elementMap);
@@ -1855,7 +1901,7 @@
   }
 
   @override
-  ConstantExpression getFieldConstant(FieldEntity field) {
+  ConstantExpression getFieldConstantForTesting(FieldEntity field) {
     return elementMap._getFieldConstantExpression(field);
   }
 
@@ -1930,8 +1976,7 @@
 
   @override
   void forEachConstructor(
-      ClassEntity cls, void f(ConstructorEntity constructor),
-      {bool ensureResolved: true}) {
+      ClassEntity cls, void f(ConstructorEntity constructor)) {
     elementMap._forEachConstructor(cls, f);
   }
 
@@ -2128,9 +2173,9 @@
 
 class KClosedWorldImpl extends ClosedWorldRtiNeedMixin implements KClosedWorld {
   final KernelToElementMapImpl elementMap;
-  final ElementEnvironment elementEnvironment;
+  final KElementEnvironment elementEnvironment;
   final DartTypes dartTypes;
-  final CommonElements commonElements;
+  final KCommonElements commonElements;
   final NativeData nativeData;
   final InterceptorData interceptorData;
   final BackendUsage backendUsage;
@@ -2200,7 +2245,7 @@
       this.elementMap, this.nativeBasicData, this.nativeDataBuilder);
 
   @override
-  ElementEnvironment get elementEnvironment => elementMap.elementEnvironment;
+  KElementEnvironment get elementEnvironment => elementMap.elementEnvironment;
 
   @override
   CommonElements get commonElements => elementMap.commonElements;
diff --git a/pkg/compiler/lib/src/kernel/native_basic_data.dart b/pkg/compiler/lib/src/kernel/native_basic_data.dart
index e0f5e9e..5aa12e1 100644
--- a/pkg/compiler/lib/src/kernel/native_basic_data.dart
+++ b/pkg/compiler/lib/src/kernel/native_basic_data.dart
@@ -12,8 +12,8 @@
   KernelAnnotationProcessor(this.elementMap, this._nativeBasicDataBuilder);
 
   void extractNativeAnnotations(LibraryEntity library) {
-    ElementEnvironment elementEnvironment = elementMap.elementEnvironment;
-    CommonElements commonElements = elementMap.commonElements;
+    KElementEnvironment elementEnvironment = elementMap.elementEnvironment;
+    KCommonElements commonElements = elementMap.commonElements;
 
     elementEnvironment.forEachClass(library, (ClassEntity cls) {
       String annotationName;
@@ -34,7 +34,7 @@
 
   String getJsInteropName(
       Spannable spannable, Iterable<ConstantValue> metadata) {
-    CommonElements commonElements = elementMap.commonElements;
+    KCommonElements commonElements = elementMap.commonElements;
     String annotationName;
     for (ConstantValue value in metadata) {
       String name = readAnnotationName(
@@ -61,8 +61,8 @@
 
   void extractJsInteropAnnotations(LibraryEntity library) {
     DiagnosticReporter reporter = elementMap.reporter;
-    ElementEnvironment elementEnvironment = elementMap.elementEnvironment;
-    CommonElements commonElements = elementMap.commonElements;
+    KElementEnvironment elementEnvironment = elementMap.elementEnvironment;
+    KCommonElements commonElements = elementMap.commonElements;
 
     String libraryName = getJsInteropName(
         library, elementEnvironment.getLibraryMetadata(library));
@@ -244,8 +244,8 @@
   void processJsInteropAnnotations(
       NativeBasicData nativeBasicData, NativeDataBuilder nativeDataBuilder) {
     DiagnosticReporter reporter = elementMap.reporter;
-    ElementEnvironment elementEnvironment = elementMap.elementEnvironment;
-    CommonElements commonElements = elementMap.commonElements;
+    KElementEnvironment elementEnvironment = elementMap.elementEnvironment;
+    KCommonElements commonElements = elementMap.commonElements;
 
     for (LibraryEntity library in elementEnvironment.libraries) {
       // Error checking for class inheritance must happen after the first pass
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index a404474..31936b5 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common_elements.dart' show CommonElements, KElementEnvironment;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../js_backend/native_data.dart';
@@ -18,7 +18,7 @@
 abstract class NativeMemberResolverBase implements NativeMemberResolver {
   static final RegExp _identifier = new RegExp(r'^[a-zA-Z_$][a-zA-Z0-9_$]*$');
 
-  ElementEnvironment get elementEnvironment;
+  KElementEnvironment get elementEnvironment;
   CommonElements get commonElements;
   NativeBasicData get nativeBasicData;
   NativeDataBuilder get nativeDataBuilder;
@@ -150,7 +150,7 @@
 }
 
 class BaseNativeClassFinder implements NativeClassFinder {
-  final ElementEnvironment _elementEnvironment;
+  final KElementEnvironment _elementEnvironment;
   final NativeBasicData _nativeBasicData;
 
   Map<String, ClassEntity> _tagOwner = new Map<String, ClassEntity>();
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 7583e78..9dbf70e 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -182,6 +182,9 @@
   /// Whether to omit implicit strong mode checks.
   bool omitImplicitChecks = false;
 
+  /// Whether to omit as casts.
+  bool omitAsCasts = false;
+
   /// Whether to omit class type arguments only needed for `toString` on
   /// `Object.runtimeType`.
   bool laxRuntimeTypeToString = false;
@@ -294,6 +297,7 @@
           platformBinaries ?? _extractUriOption(options, '--platform-binaries=')
       ..sourceMapUri = _extractUriOption(options, '--source-map=')
       ..omitImplicitChecks = _hasOption(options, Flags.omitImplicitChecks)
+      ..omitAsCasts = _hasOption(options, Flags.omitAsCasts)
       ..laxRuntimeTypeToString =
           _hasOption(options, Flags.laxRuntimeTypeToString)
       ..testMode = _hasOption(options, Flags.testMode)
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 7305936..185ea5b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -154,7 +154,7 @@
 
   KernelToLocalsMap get localsMap => _currentFrame.localsMap;
 
-  CommonElements get _commonElements => _elementMap.commonElements;
+  JCommonElements get _commonElements => _elementMap.commonElements;
 
   KernelToTypeInferenceMap get _typeInferenceMap =>
       _currentFrame.typeInferenceMap;
@@ -2066,7 +2066,8 @@
     }
 
     DartType type = _elementMap.getDartType(node.type);
-    if (!node.isTypeError || options.implicitDowncastCheckPolicy.isEmitted) {
+    if ((!node.isTypeError && !options.omitAsCasts) ||
+        options.implicitDowncastCheckPolicy.isEmitted) {
       HInstruction converted = typeBuilder.buildTypeConversion(
           expressionInstruction,
           localsHandler.substInContext(type),
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index a628953..c01289d 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -13,7 +13,7 @@
 import '../common/tasks.dart' show CompilerTask;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
-import '../common_elements.dart' show CommonElements;
+import '../common_elements.dart' show JCommonElements;
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
 import '../elements/types.dart';
@@ -238,7 +238,7 @@
 
   CodegenRegistry get _registry => _work.registry;
 
-  CommonElements get _commonElements => _closedWorld.commonElements;
+  JCommonElements get _commonElements => _closedWorld.commonElements;
 
   ConstantSystem get _constantSystem => _closedWorld.constantSystem;
 
diff --git a/pkg/compiler/lib/src/ssa/graph_builder.dart b/pkg/compiler/lib/src/ssa/graph_builder.dart
index d004ddb..5c53a0b 100644
--- a/pkg/compiler/lib/src/ssa/graph_builder.dart
+++ b/pkg/compiler/lib/src/ssa/graph_builder.dart
@@ -63,7 +63,7 @@
 
   CompilerOptions get options => compiler.options;
 
-  CommonElements get commonElements => closedWorld.commonElements;
+  JCommonElements get commonElements => closedWorld.commonElements;
 
   CodeEmitterTask get emitter => backend.emitter;
 
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index 0f34e16..2128638 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import '../common_elements.dart' show CommonElements;
+import '../common_elements.dart' show JCommonElements;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
@@ -39,7 +39,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     return null;
   }
@@ -51,7 +51,7 @@
   }
 
   Selector renameToOptimizedSelector(
-      String name, Selector selector, CommonElements commonElements) {
+      String name, Selector selector, JCommonElements commonElements) {
     if (selector.name == name) return selector;
     return new Selector.call(new Name(name, commonElements.interceptorsLibrary),
         new CallStructure(selector.argumentCount));
@@ -121,7 +121,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction receiver = instruction.inputs[1];
     HInstruction index = instruction.inputs[2];
@@ -152,7 +152,7 @@
       HInvokeDynamic instruction,
       HInstruction receiver,
       HInstruction value,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     // Handle typed arrays by recognizing the exact implementation of `[]=` and
     // checking if [value] has the appropriate type.
@@ -185,7 +185,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     if (!instruction.inputs[1]
         .isIndexablePrimitive(closedWorld.abstractValueDomain)) {
@@ -233,7 +233,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain)) {
@@ -280,7 +280,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain)) {
@@ -319,7 +319,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain)) {
@@ -368,7 +368,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     if (isBuiltin(instruction, closedWorld)) {
       HInstruction builtin =
@@ -697,7 +697,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction right = instruction.inputs[2];
     if (isBuiltin(instruction, closedWorld)) {
@@ -788,7 +788,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
@@ -841,7 +841,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
@@ -1012,7 +1012,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
@@ -1035,7 +1035,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
@@ -1139,7 +1139,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     // TODO(sra): Implement a builtin HCodeUnitAt instruction and the same index
     // bounds checking optimizations as for HIndex.
@@ -1167,7 +1167,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction receiver = instruction.getDartReceiver(closedWorld);
     // `compareTo` has no side-effect (other than throwing) and can be GVN'ed
@@ -1199,7 +1199,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction receiver = instruction.getDartReceiver(closedWorld);
     if (receiver.isStringOrNull(closedWorld.abstractValueDomain)) {
@@ -1227,7 +1227,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction receiver = instruction.getDartReceiver(closedWorld);
     HInstruction pattern = instruction.inputs[2];
@@ -1253,7 +1253,7 @@
       HGraph graph,
       GlobalTypeInferenceResults results,
       CompilerOptions options,
-      CommonElements commonElements,
+      JCommonElements commonElements,
       JClosedWorld closedWorld) {
     HInstruction receiver = instruction.getDartReceiver(closedWorld);
     if (receiver.isNumberOrNull(closedWorld.abstractValueDomain)) {
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index c88565b..3b4b976 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -13,6 +13,7 @@
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
+import '../ir/static_type.dart';
 import '../ir/util.dart';
 import '../js_backend/native_data.dart';
 import '../kernel/element_map.dart';
@@ -42,20 +43,18 @@
   throw new UnsupportedError("Unsupported member: $member");
 }
 
-class KernelImpactBuilder extends ir.Visitor {
+class KernelImpactBuilder extends StaticTypeVisitor {
   final ResolutionWorldImpactBuilder impactBuilder;
   final KernelToElementMap elementMap;
   final DiagnosticReporter reporter;
   final CompilerOptions _options;
   final MemberEntity currentMember;
-  _ClassEnsurer classEnsurer;
 
   KernelImpactBuilder(
       this.elementMap, this.currentMember, this.reporter, this._options)
       : this.impactBuilder =
-            new ResolutionWorldImpactBuilder('${currentMember}') {
-    this.classEnsurer = new _ClassEnsurer(this, this.elementMap.types);
-  }
+            new ResolutionWorldImpactBuilder('${currentMember}'),
+        super(elementMap.typeEnvironment);
 
   CommonElements get commonElements => elementMap.commonElements;
 
@@ -79,23 +78,16 @@
     return type;
   }
 
-  void registerSeenClasses(ir.DartType irType) {
-    DartType type = elementMap.getDartType(irType);
-    classEnsurer.ensureClassesInType(type);
-  }
-
   /// Add checked-mode type use for the parameter type and constant for the
   /// default value of [parameter].
   void handleParameter(ir.VariableDeclaration parameter) {
     checkType(parameter.type, TypeUseKind.PARAMETER_CHECK);
-    registerSeenClasses(parameter.type);
     visitNode(parameter.initializer);
   }
 
   /// Add checked-mode type use for parameter and return types, and add
   /// constants for default values.
   void handleSignature(ir.FunctionNode node) {
-    registerSeenClasses(node.returnType);
     node.positionalParameters.forEach(handleParameter);
     node.namedParameters.forEach(handleParameter);
     for (ir.TypeParameter parameter in node.typeParameters) {
@@ -104,8 +96,8 @@
   }
 
   ResolutionImpact buildField(ir.Field field) {
+    typeEnvironment.thisType = field.enclosingClass?.thisType;
     checkType(field.type, TypeUseKind.PARAMETER_CHECK);
-    registerSeenClasses(field.type);
     if (field.initializer != null) {
       visitNode(field.initializer);
       if (!field.isInstanceMember &&
@@ -126,10 +118,12 @@
       impactBuilder
           .registerNativeData(elementMap.getNativeBehaviorForFieldStore(field));
     }
+    typeEnvironment.thisType = null;
     return impactBuilder;
   }
 
   ResolutionImpact buildConstructor(ir.Constructor constructor) {
+    typeEnvironment.thisType = constructor.enclosingClass.thisType;
     handleSignature(constructor.function);
     visitNodes(constructor.initializers);
     visitNode(constructor.function.body);
@@ -139,6 +133,7 @@
       impactBuilder.registerNativeData(elementMap
           .getNativeBehaviorForMethod(constructor, isJsInterop: isJsInterop));
     }
+    typeEnvironment.thisType = null;
     return impactBuilder;
   }
 
@@ -185,6 +180,7 @@
   }
 
   ResolutionImpact buildProcedure(ir.Procedure procedure) {
+    typeEnvironment.thisType = procedure.enclosingClass?.thisType;
     handleSignature(procedure.function);
     visitNode(procedure.function.body);
     handleAsyncMarker(procedure.function);
@@ -194,118 +190,119 @@
       impactBuilder.registerNativeData(elementMap
           .getNativeBehaviorForMethod(procedure, isJsInterop: isJsInterop));
     }
+    typeEnvironment.thisType = null;
     return impactBuilder;
   }
 
-  void visitNode(ir.Node node) => node?.accept(this);
+  @override
+  Null visitBlock(ir.Block node) => visitNodes(node.statements);
 
-  void visitNodes(Iterable<ir.Node> nodes) {
-    nodes.forEach(visitNode);
+  @override
+  Null visitExpressionStatement(ir.ExpressionStatement node) {
+    visitNode(node.expression);
   }
 
   @override
-  void visitBlock(ir.Block block) => visitNodes(block.statements);
-
-  @override
-  void visitExpressionStatement(ir.ExpressionStatement exprStatement) {
-    visitNode(exprStatement.expression);
+  Null visitReturnStatement(ir.ReturnStatement node) {
+    visitNode(node.expression);
   }
 
   @override
-  void visitReturnStatement(ir.ReturnStatement returnStatement) {
-    visitNode(returnStatement.expression);
+  Null visitIfStatement(ir.IfStatement node) {
+    visitNode(node.condition);
+    visitNode(node.then);
+    visitNode(node.otherwise);
   }
 
   @override
-  void visitIfStatement(ir.IfStatement ifStatement) {
-    visitNode(ifStatement.condition);
-    visitNode(ifStatement.then);
-    visitNode(ifStatement.otherwise);
+  ir.DartType visitIntLiteral(ir.IntLiteral node) {
+    impactBuilder.registerConstantLiteral(
+        new IntConstantExpression(new BigInt.from(node.value).toUnsigned(64)));
+    return super.visitIntLiteral(node);
   }
 
   @override
-  void visitIntLiteral(ir.IntLiteral literal) {
-    impactBuilder.registerConstantLiteral(new IntConstantExpression(
-        new BigInt.from(literal.value).toUnsigned(64)));
-  }
-
-  @override
-  void visitDoubleLiteral(ir.DoubleLiteral literal) {
+  ir.DartType visitDoubleLiteral(ir.DoubleLiteral node) {
     impactBuilder
-        .registerConstantLiteral(new DoubleConstantExpression(literal.value));
+        .registerConstantLiteral(new DoubleConstantExpression(node.value));
+    return super.visitDoubleLiteral(node);
   }
 
   @override
-  void visitBoolLiteral(ir.BoolLiteral literal) {
+  ir.DartType visitBoolLiteral(ir.BoolLiteral node) {
     impactBuilder
-        .registerConstantLiteral(new BoolConstantExpression(literal.value));
+        .registerConstantLiteral(new BoolConstantExpression(node.value));
+    return super.visitBoolLiteral(node);
   }
 
   @override
-  void visitStringLiteral(ir.StringLiteral literal) {
+  ir.DartType visitStringLiteral(ir.StringLiteral node) {
     impactBuilder
-        .registerConstantLiteral(new StringConstantExpression(literal.value));
+        .registerConstantLiteral(new StringConstantExpression(node.value));
+    return super.visitStringLiteral(node);
   }
 
   @override
-  void visitSymbolLiteral(ir.SymbolLiteral literal) {
-    impactBuilder.registerConstSymbolName(literal.value);
+  ir.DartType visitSymbolLiteral(ir.SymbolLiteral node) {
+    impactBuilder.registerConstSymbolName(node.value);
+    return super.visitSymbolLiteral(node);
   }
 
   @override
-  void visitNullLiteral(ir.NullLiteral literal) {
+  ir.DartType visitNullLiteral(ir.NullLiteral node) {
     impactBuilder.registerConstantLiteral(new NullConstantExpression());
+    return super.visitNullLiteral(node);
   }
 
   @override
-  void visitListLiteral(ir.ListLiteral literal) {
-    visitNodes(literal.expressions);
-    DartType elementType = elementMap.getDartType(literal.typeArgument);
-    registerSeenClasses(literal.typeArgument);
+  ir.DartType visitListLiteral(ir.ListLiteral node) {
+    visitNodes(node.expressions);
+    DartType elementType = elementMap.getDartType(node.typeArgument);
 
     impactBuilder.registerListLiteral(new ListLiteralUse(
         commonElements.listType(elementType),
-        isConstant: literal.isConst,
-        isEmpty: literal.expressions.isEmpty));
+        isConstant: node.isConst,
+        isEmpty: node.expressions.isEmpty));
+    return super.visitListLiteral(node);
   }
 
   @override
-  void visitMapLiteral(ir.MapLiteral literal) {
-    visitNodes(literal.entries);
-    DartType keyType = elementMap.getDartType(literal.keyType);
-    DartType valueType = elementMap.getDartType(literal.valueType);
-    registerSeenClasses(literal.keyType);
-    registerSeenClasses(literal.valueType);
+  ir.DartType visitMapLiteral(ir.MapLiteral node) {
+    visitNodes(node.entries);
+    DartType keyType = elementMap.getDartType(node.keyType);
+    DartType valueType = elementMap.getDartType(node.valueType);
     impactBuilder.registerMapLiteral(new MapLiteralUse(
         commonElements.mapType(keyType, valueType),
-        isConstant: literal.isConst,
-        isEmpty: literal.entries.isEmpty));
+        isConstant: node.isConst,
+        isEmpty: node.entries.isEmpty));
+    return super.visitMapLiteral(node);
   }
 
   @override
-  void visitMapEntry(ir.MapEntry entry) {
+  Null visitMapEntry(ir.MapEntry entry) {
     visitNode(entry.key);
     visitNode(entry.value);
   }
 
   @override
-  void visitConditionalExpression(ir.ConditionalExpression node) {
+  ir.DartType visitConditionalExpression(ir.ConditionalExpression node) {
     visitNode(node.condition);
     visitNode(node.then);
     visitNode(node.otherwise);
-    // Don't visit the static type.
+    return super.visitConditionalExpression(node);
   }
 
   List<DartType> _visitArguments(ir.Arguments arguments) {
-    arguments.positional.forEach(visitNode);
-    arguments.named.forEach(visitNode);
+    visitNodes(arguments.positional);
+    visitNodes(arguments.named);
     if (arguments.types.isEmpty) return null;
     return arguments.types.map(elementMap.getDartType).toList();
   }
 
   @override
-  void visitConstructorInvocation(ir.ConstructorInvocation node) {
+  ir.DartType visitConstructorInvocation(ir.ConstructorInvocation node) {
     handleNew(node, node.target, isConst: node.isConst);
+    return super.visitConstructorInvocation(node);
   }
 
   void handleNew(ir.InvocationExpression node, ir.Member target,
@@ -326,7 +323,6 @@
 
     InterfaceType type = elementMap.createInterfaceType(
         target.enclosingClass, node.arguments.types);
-    classEnsurer.ensureClassesInType(type);
     CallStructure callStructure = elementMap.getCallStructure(node.arguments);
     impactBuilder.registerStaticUse(isConst
         ? new StaticUse.constConstructorInvoke(constructor, callStructure, type)
@@ -352,7 +348,7 @@
   }
 
   @override
-  void visitSuperInitializer(ir.SuperInitializer node) {
+  Null visitSuperInitializer(ir.SuperInitializer node) {
     // TODO(johnniwinther): Maybe rewrite `node.target` to point to a
     // synthesized unnamed mixin constructor when needed. This would require us
     // to consider impact building a required pre-step for inference and
@@ -365,7 +361,7 @@
   }
 
   @override
-  void visitStaticInvocation(ir.StaticInvocation node) {
+  ir.DartType visitStaticInvocation(ir.StaticInvocation node) {
     if (node.target.kind == ir.ProcedureKind.Factory) {
       // TODO(johnniwinther): We should not mark the type as instantiated but
       // rather follow the type arguments directly.
@@ -395,7 +391,7 @@
       List<DartType> typeArguments = _visitArguments(node.arguments);
       if (commonElements.isExtractTypeArguments(target)) {
         _handleExtractTypeArguments(node, target, typeArguments);
-        return;
+        return super.visitStaticInvocation(node);
       }
       impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
           target, elementMap.getCallStructure(node.arguments), typeArguments));
@@ -423,6 +419,7 @@
       case ForeignKind.NONE:
         break;
     }
+    return super.visitStaticInvocation(node);
   }
 
   void _handleExtractTypeArguments(ir.StaticInvocation node,
@@ -454,9 +451,8 @@
   }
 
   @override
-  void visitStaticGet(ir.StaticGet node) {
+  ir.DartType visitStaticGet(ir.StaticGet node) {
     ir.Member target = node.target;
-    registerSeenClasses(target.getterType);
     if (target is ir.Procedure && target.kind == ir.ProcedureKind.Method) {
       FunctionEntity method = elementMap.getMethod(target);
       impactBuilder.registerStaticUse(new StaticUse.staticTearOff(method));
@@ -464,14 +460,14 @@
       MemberEntity member = elementMap.getMember(target);
       impactBuilder.registerStaticUse(new StaticUse.staticGet(member));
     }
+    return super.visitStaticGet(node);
   }
 
   @override
-  void visitStaticSet(ir.StaticSet node) {
-    visitNode(node.value);
+  ir.DartType visitStaticSet(ir.StaticSet node) {
     MemberEntity member = elementMap.getMember(node.target);
-    registerSeenClasses(node.target.setterType);
     impactBuilder.registerStaticUse(new StaticUse.staticSet(member));
+    return super.visitStaticSet(node);
   }
 
   void handleSuperInvocation(ir.Name name, ir.Node target, ir.Node arguments) {
@@ -490,7 +486,7 @@
   }
 
   @override
-  void visitDirectMethodInvocation(ir.DirectMethodInvocation node) {
+  ir.DartType visitDirectMethodInvocation(ir.DirectMethodInvocation node) {
     List<DartType> typeArguments = _visitArguments(node.arguments);
     MemberEntity member = elementMap.getMember(node.target);
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
@@ -503,13 +499,15 @@
             member.memberName, elementMap.getCallStructure(node.arguments)),
         constraint,
         typeArguments));
+    return super.visitDirectMethodInvocation(node);
   }
 
   @override
-  void visitSuperMethodInvocation(ir.SuperMethodInvocation node) {
+  ir.DartType visitSuperMethodInvocation(ir.SuperMethodInvocation node) {
     // TODO(johnniwinther): Should we support this or always use the
     // [MixinFullResolution] transformer?
     handleSuperInvocation(node.name, node.interfaceTarget, node.arguments);
+    return super.visitSuperMethodInvocation(node);
   }
 
   void handleSuperGet(ir.Name name, ir.Member target) {
@@ -530,20 +528,21 @@
   }
 
   @override
-  void visitDirectPropertyGet(ir.DirectPropertyGet node) {
+  ir.DartType visitDirectPropertyGet(ir.DirectPropertyGet node) {
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
     // target.
     impactBuilder.registerDynamicUse(new DynamicUse(
         new Selector.getter(elementMap.getMember(node.target).memberName)));
+    return super.visitDirectPropertyGet(node);
   }
 
   @override
-  void visitSuperPropertyGet(ir.SuperPropertyGet node) {
+  ir.DartType visitSuperPropertyGet(ir.SuperPropertyGet node) {
     handleSuperGet(node.name, node.interfaceTarget);
+    return super.visitSuperPropertyGet(node);
   }
 
   void handleSuperSet(ir.Name name, ir.Node target, ir.Node value) {
-    visitNode(value);
     MemberEntity member =
         elementMap.getSuperMember(currentMember, name, target, setter: true);
     if (member != null) {
@@ -561,23 +560,30 @@
   }
 
   @override
-  void visitDirectPropertySet(ir.DirectPropertySet node) {
-    visitNode(node.value);
+  ir.DartType visitDirectPropertySet(ir.DirectPropertySet node) {
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
     // target.
     impactBuilder.registerDynamicUse(new DynamicUse(
         new Selector.setter(elementMap.getMember(node.target).memberName)));
+    return super.visitDirectPropertySet(node);
   }
 
   @override
-  void visitSuperPropertySet(ir.SuperPropertySet node) {
+  ir.DartType visitSuperPropertySet(ir.SuperPropertySet node) {
     handleSuperSet(node.name, node.interfaceTarget, node.value);
+    return super.visitSuperPropertySet(node);
   }
 
   @override
-  void visitMethodInvocation(ir.MethodInvocation node) {
+  ir.DartType visitMethodInvocation(ir.MethodInvocation node) {
     Selector selector = elementMap.getSelector(node);
-    List<DartType> typeArguments = _visitArguments(node.arguments);
+    List<DartType> typeArguments;
+    if (isSpecialCasedBinaryOperator(node.interfaceTarget)) {
+      typeArguments = <DartType>[];
+    } else {
+      typeArguments = _visitArguments(node.arguments);
+    }
+    ir.DartType receiverType = visitNode(node.receiver);
     var receiver = node.receiver;
     if (receiver is ir.VariableGet &&
         receiver.variable.isFinal &&
@@ -594,7 +600,7 @@
       impactBuilder.registerDynamicUse(
           new ConstrainedDynamicUse(selector, null, typeArguments));
     } else {
-      visitNode(node.receiver);
+      DartType receiverDartType = elementMap.getDartType(receiverType);
 
       ir.Member interfaceTarget = node.interfaceTarget;
       if (interfaceTarget == null) {
@@ -608,10 +614,9 @@
         }
       } else {
         Object constraint;
-        DartType receiverType = elementMap.getStaticType(node.receiver);
-        if (receiverType is InterfaceType) {
+        if (receiverDartType is InterfaceType) {
           constraint = new StrongModeConstraint(
-              commonElements, _nativeBasicData, receiverType.element);
+              commonElements, _nativeBasicData, receiverDartType.element);
         }
 
         if (interfaceTarget is ir.Field ||
@@ -639,16 +644,17 @@
         }
       }
     }
+    return computeMethodInvocationType(node, receiverType);
   }
 
   @override
-  void visitPropertyGet(ir.PropertyGet node) {
-    visitNode(node.receiver);
+  ir.DartType visitPropertyGet(ir.PropertyGet node) {
     Object constraint;
-    DartType receiverType = elementMap.getStaticType(node.receiver);
-    if (receiverType is InterfaceType) {
+    ir.DartType receiverType = visitNode(node.receiver);
+    DartType receiverDartType = elementMap.getDartType(receiverType);
+    if (receiverDartType is InterfaceType) {
       constraint = new StrongModeConstraint(
-          commonElements, _nativeBasicData, receiverType.element);
+          commonElements, _nativeBasicData, receiverDartType.element);
     }
     impactBuilder.registerDynamicUse(new ConstrainedDynamicUse(
         new Selector.getter(elementMap.getName(node.name)),
@@ -678,14 +684,13 @@
       }
       impactBuilder.registerRuntimeTypeUse(runtimeTypeUse);
     }
+    return computePropertyGetType(node, receiverType);
   }
 
   @override
-  void visitPropertySet(ir.PropertySet node) {
-    visitNode(node.receiver);
-    visitNode(node.value);
+  ir.DartType visitPropertySet(ir.PropertySet node) {
     Object constraint;
-    DartType receiverType = elementMap.getStaticType(node.receiver);
+    DartType receiverType = elementMap.getDartType(visitNode(node.receiver));
     if (receiverType is InterfaceType) {
       constraint = new StrongModeConstraint(
           commonElements, _nativeBasicData, receiverType.element);
@@ -693,10 +698,11 @@
     impactBuilder.registerDynamicUse(new ConstrainedDynamicUse(
         new Selector.setter(elementMap.getName(node.name)),
         constraint, const <DartType>[]));
+    return super.visitPropertySet(node);
   }
 
   @override
-  void visitAssertStatement(ir.AssertStatement node) {
+  Null visitAssertStatement(ir.AssertStatement node) {
     impactBuilder.registerFeature(
         node.message != null ? Feature.ASSERT_WITH_MESSAGE : Feature.ASSERT);
     visitNode(node.condition);
@@ -704,23 +710,25 @@
   }
 
   @override
-  void visitInstantiation(ir.Instantiation node) {
+  ir.DartType visitInstantiation(ir.Instantiation node) {
     // TODO(johnniwinther): Track which arities are used in instantiation.
+    ir.FunctionType expressionType = visitNode(node.expression);
     impactBuilder.registerInstantiation(new GenericInstantiation(
-        elementMap.getStaticType(node.expression),
+        elementMap.getDartType(expressionType),
         node.typeArguments.map(elementMap.getDartType).toList()));
-    node.visitChildren(this);
+    return computeInstantiationType(node, expressionType);
   }
 
   @override
-  void visitStringConcatenation(ir.StringConcatenation node) {
+  ir.DartType visitStringConcatenation(ir.StringConcatenation node) {
     impactBuilder.registerFeature(Feature.STRING_INTERPOLATION);
     impactBuilder.registerFeature(Feature.STRING_JUXTAPOSITION);
     visitNodes(node.expressions);
+    return super.visitStringConcatenation(node);
   }
 
   @override
-  void visitFunctionDeclaration(ir.FunctionDeclaration node) {
+  Null visitFunctionDeclaration(ir.FunctionDeclaration node) {
     Local function = elementMap.getLocalFunction(node);
     impactBuilder.registerStaticUse(new StaticUse.closure(function));
     handleSignature(node.function);
@@ -729,17 +737,17 @@
   }
 
   @override
-  void visitFunctionExpression(ir.FunctionExpression node) {
+  ir.DartType visitFunctionExpression(ir.FunctionExpression node) {
     Local function = elementMap.getLocalFunction(node);
     impactBuilder.registerStaticUse(new StaticUse.closure(function));
     handleSignature(node.function);
     handleAsyncMarker(node.function);
     visitNode(node.function.body);
+    return super.visitFunctionExpression(node);
   }
 
   @override
-  void visitVariableDeclaration(ir.VariableDeclaration node) {
-    registerSeenClasses(node.type);
+  Null visitVariableDeclaration(ir.VariableDeclaration node) {
     if (node.initializer != null) {
       visitNode(node.initializer);
     } else {
@@ -748,33 +756,34 @@
   }
 
   @override
-  void visitIsExpression(ir.IsExpression node) {
+  ir.DartType visitIsExpression(ir.IsExpression node) {
     impactBuilder.registerTypeUse(
         new TypeUse.isCheck(elementMap.getDartType(node.type)));
-    registerSeenClasses(node.type);
     visitNode(node.operand);
+    return super.visitIsExpression(node);
   }
 
   @override
-  void visitAsExpression(ir.AsExpression node) {
+  ir.DartType visitAsExpression(ir.AsExpression node) {
     DartType type = elementMap.getDartType(node.type);
     if (node.isTypeError) {
       impactBuilder.registerTypeUse(new TypeUse.implicitCast(type));
     } else {
       impactBuilder.registerTypeUse(new TypeUse.asCast(type));
     }
-    registerSeenClasses(node.type);
     visitNode(node.operand);
+    return super.visitAsExpression(node);
   }
 
   @override
-  void visitThrow(ir.Throw node) {
+  ir.DartType visitThrow(ir.Throw node) {
     impactBuilder.registerFeature(Feature.THROW_EXPRESSION);
     visitNode(node.expression);
+    return super.visitThrow(node);
   }
 
   @override
-  void visitForInStatement(ir.ForInStatement node) {
+  Null visitForInStatement(ir.ForInStatement node) {
     visitNode(node.variable);
     visitNode(node.iterable);
     visitNode(node.body);
@@ -792,13 +801,13 @@
   }
 
   @override
-  void visitTryCatch(ir.TryCatch node) {
+  Null visitTryCatch(ir.TryCatch node) {
     visitNode(node.body);
     visitNodes(node.catches);
   }
 
   @override
-  void visitCatch(ir.Catch node) {
+  Null visitCatch(ir.Catch node) {
     impactBuilder.registerFeature(Feature.CATCH_STATEMENT);
     if (node.stackTrace != null) {
       impactBuilder.registerFeature(Feature.STACK_TRACE_IN_CATCH);
@@ -811,13 +820,13 @@
   }
 
   @override
-  void visitTryFinally(ir.TryFinally node) {
+  Null visitTryFinally(ir.TryFinally node) {
     visitNode(node.body);
     visitNode(node.finalizer);
   }
 
   @override
-  void visitTypeLiteral(ir.TypeLiteral node) {
+  ir.DartType visitTypeLiteral(ir.TypeLiteral node) {
     impactBuilder.registerTypeUse(
         new TypeUse.typeLiteral(elementMap.getDartType(node.type)));
     if (node.type is ir.FunctionType) {
@@ -827,17 +836,18 @@
       // We need to ensure that the typedef is live.
       elementMap.getTypedefType(functionType.typedef);
     }
+    return super.visitTypeLiteral(node);
   }
 
   @override
-  void visitFieldInitializer(ir.FieldInitializer node) {
+  Null visitFieldInitializer(ir.FieldInitializer node) {
     impactBuilder.registerStaticUse(
         new StaticUse.fieldInit(elementMap.getField(node.field)));
     visitNode(node.value);
   }
 
   @override
-  void visitRedirectingInitializer(ir.RedirectingInitializer node) {
+  Null visitRedirectingInitializer(ir.RedirectingInitializer node) {
     _visitArguments(node.arguments);
     ConstructorEntity target = elementMap.getConstructor(node.target);
     impactBuilder.registerStaticUse(new StaticUse.superConstructorInvoke(
@@ -845,64 +855,94 @@
   }
 
   @override
-  void visitLoadLibrary(ir.LoadLibrary node) {
+  ir.DartType visitLogicalExpression(ir.LogicalExpression node) {
+    visitNode(node.left);
+    visitNode(node.right);
+    return super.visitLogicalExpression(node);
+  }
+
+  ir.DartType visitNot(ir.Not node) {
+    visitNode(node.operand);
+    return super.visitNot(node);
+  }
+
+  @override
+  ir.DartType visitLoadLibrary(ir.LoadLibrary node) {
     impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
         commonElements.loadDeferredLibrary, CallStructure.ONE_ARG));
     impactBuilder.registerFeature(Feature.LOAD_LIBRARY);
+    return super.visitLoadLibrary(node);
   }
 
+  @override
+  Null visitEmptyStatement(ir.EmptyStatement node) {}
+
+  @override
+  Null visitForStatement(ir.ForStatement node) {
+    visitNodes(node.variables);
+    visitNode(node.condition);
+    visitNodes(node.updates);
+    visitNode(node.body);
+  }
+
+  @override
+  Null visitDoStatement(ir.DoStatement node) {
+    visitNode(node.body);
+    visitNode(node.condition);
+  }
+
+  @override
+  Null visitWhileStatement(ir.WhileStatement node) {
+    visitNode(node.condition);
+    visitNode(node.body);
+  }
+
+  @override
+  Null visitSwitchStatement(ir.SwitchStatement node) {
+    visitNode(node.expression);
+    visitNodes(node.cases);
+  }
+
+  @override
+  Null visitSwitchCase(ir.SwitchCase node) {
+    visitNodes(node.expressions);
+    visitNode(node.body);
+  }
+
+  @override
+  Null visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {}
+
+  @override
+  Null visitLabeledStatement(ir.LabeledStatement node) {
+    visitNode(node.body);
+  }
+
+  @override
+  Null visitBreakStatement(ir.BreakStatement node) {}
+
+  @override
+  Null visitYieldStatement(ir.YieldStatement node) {
+    visitNode(node.expression);
+  }
+
+  @override
+  ir.DartType visitLet(ir.Let node) {
+    visitNode(node.variable);
+    return super.visitLet(node);
+  }
+
+  @override
+  Null visitAssertInitializer(ir.AssertInitializer node) {
+    visitNode(node.statement);
+  }
+
+  @override
+  ir.DartType visitNamedExpression(ir.NamedExpression node) =>
+      visitNode(node.value);
+
   // TODO(johnniwinther): Make this throw and visit child nodes explicitly
   // instead to ensure that we don't visit unwanted parts of the ir.
   @override
-  void defaultNode(ir.Node node) => node.visitChildren(this);
-}
-
-class _ClassEnsurer extends BaseDartTypeVisitor<dynamic, Null> {
-  final KernelImpactBuilder builder;
-  final DartTypes types;
-  final seenTypes = new Set<InterfaceType>();
-
-  _ClassEnsurer(this.builder, this.types);
-
-  void ensureClassesInType(DartType type) {
-    seenTypes.clear();
-    type.accept(this, null);
-  }
-
-  @override
-  visitType(DartType type, _) {}
-
-  @override
-  visitFunctionType(FunctionType type, _) {
-    type.returnType.accept(this, null);
-    type.parameterTypes.forEach((t) {
-      t.accept(this, null);
-    });
-    type.optionalParameterTypes.forEach((t) {
-      t.accept(this, null);
-    });
-    type.namedParameterTypes.forEach((t) {
-      t.accept(this, null);
-    });
-  }
-
-  @override
-  visitInterfaceType(InterfaceType type, _) {
-    if (!seenTypes.add(type)) {
-      return;
-    }
-    builder.impactBuilder.registerSeenClass(type.element);
-    type.typeArguments.forEach((t) {
-      t.accept(this, null);
-    });
-    var supertype = types.getSupertype(type.element);
-    supertype?.accept(this, null);
-  }
-
-  @override
-  visitTypedefType(TypedefType type, _) {
-    type.typeArguments.forEach((t) {
-      t.accept(this, null);
-    });
-  }
+  ir.DartType defaultNode(ir.Node node) =>
+      throw UnsupportedError('Unhandled node $node (${node.runtimeType})');
 }
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 9a5f781..104c919 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -8,7 +8,7 @@
 import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
-import '../common_elements.dart' show CommonElements;
+import '../common_elements.dart' show JCommonElements;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as js;
@@ -192,7 +192,7 @@
   SsaInstructionSimplifier(this._globalInferenceResults, this._options,
       this._rtiSubstitutions, this._closedWorld, this._registry);
 
-  CommonElements get commonElements => _closedWorld.commonElements;
+  JCommonElements get commonElements => _closedWorld.commonElements;
 
   ConstantSystem get constantSystem => _closedWorld.constantSystem;
 
@@ -2400,6 +2400,11 @@
 
       if (!instructions.isEmpty) {
         List<HInstruction> list = instructions.toList();
+        // Sort by instruction 'id' for more stable ordering under changes to
+        // unrelated source code. 'id' is a function of the operations of
+        // compiling the current method, whereas the ValueSet order is dependent
+        // hashCodes that are a function of the whole program.
+        list.sort((insn1, insn2) => insn1.id.compareTo(insn2.id));
         for (HInstruction instruction in list) {
           // Move the instruction to the current block.
           instruction.block.detach(instruction);
@@ -2416,6 +2421,10 @@
           }
         }
       }
+      // TODO(sra): There are some non-gvn-able instructions that we could move,
+      // e.g. allocations. We should probably not move instructions that can
+      // directly or indirectly throw since the reported location might be in
+      // the 'wrong' branch.
     }
 
     // Don't try to merge instructions to a dominator if we have
@@ -2445,6 +2454,8 @@
         if (input.block == block) {
           canBeMoved = false;
           break;
+          // TODO(sra): We could move trees of instructions provided we move the
+          // roots before the leaves.
         }
       }
       if (!canBeMoved) continue;
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 9685e13..dcafd11 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -8,7 +8,12 @@
 
 import 'common.dart';
 import 'common/names.dart';
-import 'common_elements.dart' show CommonElements, ElementEnvironment;
+import 'common_elements.dart'
+    show
+        JCommonElements,
+        JElementEnvironment,
+        KCommonElements,
+        KElementEnvironment;
 import 'constants/constant_system.dart';
 import 'diagnostics/diagnostic_listener.dart';
 import 'elements/entities.dart';
@@ -52,11 +57,11 @@
 
   InterceptorData get interceptorData;
 
-  ElementEnvironment get elementEnvironment;
+  JElementEnvironment get elementEnvironment;
 
   DartTypes get dartTypes;
 
-  CommonElements get commonElements;
+  JCommonElements get commonElements;
 
   /// Returns the [AbstractValueDomain] used in the global type inference.
   AbstractValueDomain get abstractValueDomain;
@@ -243,9 +248,9 @@
   final Map<ClassEntity, Map<ClassEntity, bool>> _subtypeCoveredByCache =
       <ClassEntity, Map<ClassEntity, bool>>{};
 
-  final ElementEnvironment elementEnvironment;
+  final JElementEnvironment elementEnvironment;
   final DartTypes dartTypes;
-  final CommonElements commonElements;
+  final JCommonElements commonElements;
 
   // TODO(johnniwinther): Can this be derived from [ClassSet]s?
   final Set<ClassEntity> _implementedClasses;
@@ -617,8 +622,8 @@
   BackendUsage get backendUsage;
   NativeData get nativeData;
   InterceptorData get interceptorData;
-  ElementEnvironment get elementEnvironment;
-  CommonElements get commonElements;
+  KElementEnvironment get elementEnvironment;
+  KCommonElements get commonElements;
   ClassHierarchy get classHierarchy;
 
   /// Returns `true` if [cls] is implemented by an instantiated class.
diff --git a/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
index b2a2cfe..f08b46c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
@@ -64,6 +64,16 @@
 }
 
 ErrorSeverity errorSeverity(AnalysisContext context, AnalysisError error) {
+  var errorCode = error.errorCode;
+  if (errorCode == StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_BLOCK ||
+      errorCode == StrongModeCode.TOP_LEVEL_INSTANCE_GETTER ||
+      errorCode == StrongModeCode.TOP_LEVEL_INSTANCE_METHOD) {
+    // These are normally hints, but they should be errors when running DDC, so
+    // that users won't be surprised by behavioral differences between DDC and
+    // dart2js.
+    return ErrorSeverity.ERROR;
+  }
+
   // TODO(jmesserly): this Analyzer API totally bonkers, but it's what
   // analyzer_cli and server use.
   //
@@ -74,7 +84,7 @@
   // * it requires an AnalysisContext
   return ErrorProcessor.getProcessor(context.analysisOptions, error)
           ?.severity ??
-      error.errorCode.errorSeverity;
+      errorCode.errorSeverity;
 }
 
 const invalidImportDartMirrors = StrongModeCode(
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 970cc7a..5d1aa99 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -559,7 +559,7 @@
     _emitVirtualFieldSymbols(c, body);
     _emitClassSignature(c, className, body);
     _initExtensionSymbols(c);
-    if (!isMixinDeclaration(c)) {
+    if (!c.isMixinDeclaration) {
       _defineExtensionMembers(className, body);
     }
     _emitClassMetadata(c.annotations, className, body);
@@ -863,7 +863,7 @@
       baseClass = mixinId;
     }
 
-    if (isMixinDeclaration(c)) {
+    if (c.isMixinDeclaration) {
       _emitMixinStatement(c, className, baseClass, methods, body);
     } else {
       body.add(_emitClassStatement(c, className, baseClass, methods));
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 7d1beb2..27b4e85 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -234,6 +234,3 @@
   }
   return sc;
 }
-
-// TODO(jmesserly): replace with a flag on Class once Kernel supports it.
-bool isMixinDeclaration(Class c) => false;
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
index 358b884..3ee1721 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
@@ -37,6 +37,8 @@
 final Function(Object) getOwnPropertySymbols =
     JS('', 'Object.getOwnPropertySymbols');
 
+final Function(Object) getPrototypeOf = JS('', 'Object.getPrototypeOf');
+
 /// This error indicates a strong mode specific failure, other than a type
 /// assertion failure (TypeError) or CastError.
 void throwTypeError(String message) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
index 492291a..86592dc 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
@@ -106,7 +106,7 @@
 
     if (!walkPrototypeChain) break;
 
-    sig = safeGetProperty(sig, '__proto__');
+    sig = dart.getPrototypeOf(sig);
   }
 }
 
@@ -462,6 +462,7 @@
       IterableSpanFormatter(),
       MapEntryFormatter(),
       StackTraceFormatter(),
+      ErrorAndExceptionFormatter(),
       FunctionFormatter(),
       HeritageClauseFormatter(),
       LibraryModuleFormatter(),
@@ -802,7 +803,7 @@
   accept(object, config) => object is IterableSpan;
 
   String preview(object) {
-    return '[${object.start}...${object.end-1}]';
+    return '[${object.start}...${object.end - 1}]';
   }
 
   bool hasChildren(object) => true;
@@ -810,6 +811,45 @@
   List<NameValuePair> children(object) => object.children();
 }
 
+/// Formatter for Dart Errors and Exceptions.
+class ErrorAndExceptionFormatter extends ObjectFormatter {
+  static final RegExp _pattern = RegExp(r'\d+\:\d+');
+
+  accept(object, config) => object is Error || object is Exception;
+
+  bool hasChildren(object) => true;
+
+  String preview(object) {
+    var trace = dart.stackTrace(object);
+    // TODO(vsm): Pull our stack mapping logic here.  We should aim to
+    // provide the first meaningful stack frame.
+    var line = '$trace'.split('\n').firstWhere(
+        (l) =>
+            l.contains(_pattern) &&
+            !l.contains('dart:sdk') &&
+            !l.contains('dart_sdk'),
+        orElse: () => null);
+    return line != null ? '${object} at ${line}' : '${object}';
+  }
+
+  List<NameValuePair> children(object) {
+    var trace = dart.stackTrace(object);
+    var entries = LinkedHashSet<NameValuePair>();
+    entries.add(NameValuePair(name: 'stackTrace', value: trace));
+    addInstanceMembers(object, entries);
+    addMetadataChildren(object, entries);
+    return entries.toList();
+  }
+
+  // Add an ObjectFormatter view underneath.
+  void addInstanceMembers(object, Set<NameValuePair> ret) {
+    ret.add(NameValuePair(
+        name: "[[instance members]]",
+        value: object,
+        config: JsonMLConfig.asObject));
+  }
+}
+
 class StackTraceFormatter implements Formatter {
   accept(object, config) => object is StackTrace;
 
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index eef20ee..768d05c 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -21,14 +21,16 @@
   factory IncrementalKernelGenerator(CompilerOptions options, Uri entryPoint,
       [Uri initializeFromDillUri]) {
     return new IncrementalCompiler(
-        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        new CompilerContext(
+            new ProcessedOptions(options: options, inputs: [entryPoint])),
         initializeFromDillUri);
   }
 
   factory IncrementalKernelGenerator.fromComponent(
       CompilerOptions options, Uri entryPoint, Component component) {
     return new IncrementalCompiler.fromComponent(
-        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        new CompilerContext(
+            new ProcessedOptions(options: options, inputs: [entryPoint])),
         component);
   }
 
diff --git a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
index 98d8ded..9b44f9a 100644
--- a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
@@ -43,7 +43,7 @@
 /// an error is reported.
 // TODO(sigmund): rename to kernelForScript?
 Future<Component> kernelForProgram(Uri source, CompilerOptions options) async {
-  var pOptions = new ProcessedOptions(options, [source]);
+  var pOptions = new ProcessedOptions(options: options, inputs: [source]);
   return await CompilerContext.runWithOptions(pOptions, (context) async {
     var component = (await generateKernelInternal())?.component;
     if (component == null) return null;
@@ -80,6 +80,7 @@
 /// summaries.
 Future<Component> kernelForComponent(
     List<Uri> sources, CompilerOptions options) async {
-  return (await generateKernel(new ProcessedOptions(options, sources)))
+  return (await generateKernel(
+          new ProcessedOptions(options: options, inputs: sources)))
       ?.component;
 }
diff --git a/pkg/front_end/lib/src/api_prototype/summary_generator.dart b/pkg/front_end/lib/src/api_prototype/summary_generator.dart
index e230731..9103689 100644
--- a/pkg/front_end/lib/src/api_prototype/summary_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/summary_generator.dart
@@ -31,7 +31,10 @@
 /// The return value is a list of bytes to write to the summary file.
 Future<List<int>> summaryFor(List<Uri> sources, CompilerOptions options,
     {bool truncate: false}) async {
-  return (await generateKernel(new ProcessedOptions(options, sources),
-          buildSummary: true, buildComponent: false, truncateSummary: truncate))
+  return (await generateKernel(
+          new ProcessedOptions(options: options, inputs: sources),
+          buildSummary: true,
+          buildComponent: false,
+          truncateSummary: truncate))
       ?.summary;
 }
diff --git a/pkg/front_end/lib/src/api_unstable/bazel_worker.dart b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
index 267347f..969bd01 100644
--- a/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
+++ b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
@@ -44,7 +44,7 @@
     ..target = target
     ..fileSystem = fileSystem;
 
-  ProcessedOptions processedOpts = new ProcessedOptions(options, []);
+  ProcessedOptions processedOpts = new ProcessedOptions(options: options);
 
   return new InitializedCompilerState(options, processedOpts);
 }
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index 3ce7148..f90e4f1 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -47,7 +47,7 @@
     ..librariesSpecificationUri = librariesSpecificationUri
     ..packagesFileUri = packagesFileUri;
 
-  ProcessedOptions processedOpts = new ProcessedOptions(options, []);
+  ProcessedOptions processedOpts = new ProcessedOptions(options: options);
 
   return new InitializedCompilerState(options, processedOpts);
 }
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
index cb26a1b..6dfcb2b 100644
--- a/pkg/front_end/lib/src/api_unstable/ddc.dart
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -69,7 +69,7 @@
     ..fileSystem = fileSystem ?? StandardFileSystem.instance
     ..reportMessages = true;
 
-  ProcessedOptions processedOpts = new ProcessedOptions(options, []);
+  ProcessedOptions processedOpts = new ProcessedOptions(options: options);
 
   return new InitializedCompilerState(options, processedOpts);
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 89060a67..b2d161d 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -176,12 +176,12 @@
   final Uri output;
 
   /// Initializes a [ProcessedOptions] object wrapping the given [rawOptions].
-  ProcessedOptions(CompilerOptions rawOptions,
-      [this.inputs = const [], this.output])
-      : this._raw = rawOptions,
+  ProcessedOptions({CompilerOptions options, List<Uri> inputs, this.output})
+      : this._raw = options ?? new CompilerOptions(),
+        this.inputs = inputs ?? <Uri>[],
         // TODO(sigmund, ahe): create ticker even earlier or pass in a stopwatch
         // collecting time since the start of the VM.
-        ticker = new Ticker(isVerbose: rawOptions.verbose);
+        this.ticker = new Ticker(isVerbose: options?.verbose ?? false);
 
   /// The logger to report compilation progress.
   PerformanceLog get logger {
@@ -247,10 +247,10 @@
 
   /// Runs various validations checks on the input options. For instance,
   /// if an option is a path to a file, it checks that the file exists.
-  Future<bool> validateOptions() async {
+  Future<bool> validateOptions({bool errorOnMissingInput: true}) async {
     if (verbose) print(debugString());
 
-    if (inputs.isEmpty) {
+    if (errorOnMissingInput && inputs.isEmpty) {
       reportWithoutLocation(messageMissingInput, Severity.error);
       return false;
     }
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index 2efbcb9..5abea63 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -24,7 +24,7 @@
 
 export 'dynamic_type_builder.dart' show DynamicTypeBuilder;
 
-export 'enum_builder.dart' show EnumBuilder;
+export 'enum_builder.dart' show EnumBuilder, EnumConstantInfo;
 
 export 'field_builder.dart' show FieldBuilder;
 
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index d2b9c0f..6c2bb49 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -240,6 +240,22 @@
   }
 
   void prepareTopLevelInference() {}
+
+  /// Find the first member of this class with [name]. This method isn't
+  /// suitable for scope lookups as it will throw an error if the name isn't
+  /// declared. The [scope] should be used for that. This method is used to
+  /// find a member that is known to exist and it wil pick the first
+  /// declaration if the name is ambiguous.
+  ///
+  /// For example, this method is convenient for use when building synthetic
+  /// members, such as those of an enum.
+  MemberBuilder firstMemberNamed(String name) {
+    Declaration declaration = this[name];
+    while (declaration.next != null) {
+      declaration = declaration.next;
+    }
+    return declaration;
+  }
 }
 
 class ConstructorRedirection {
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index fb24b9c..f456149 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -4,9 +4,18 @@
 
 library fasta.enum_builder;
 
-import 'builder.dart' show ClassBuilder, TypeBuilder;
+import 'builder.dart' show ClassBuilder, MetadataBuilder, TypeBuilder;
 
 abstract class EnumBuilder<T extends TypeBuilder, R>
     implements ClassBuilder<T, R> {
-  List<Object> get constantNamesAndOffsetsAndDocs;
+  List<EnumConstantInfo> get enumConstantInfos;
+}
+
+class EnumConstantInfo {
+  final List<MetadataBuilder<TypeBuilder>> metadata;
+  final String name;
+  final int charOffset;
+  final String documentationComment;
+  const EnumConstantInfo(
+      this.metadata, this.name, this.charOffset, this.documentationComment);
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index b1d0382..c631b0e 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -98,7 +98,8 @@
   }
 
   /// Returns true if the export scope was modified.
-  bool addToExportScope(String name, Declaration member) {
+  bool addToExportScope(String name, Declaration member,
+      [int charOffset = -1]) {
     if (name.startsWith("_")) return false;
     if (member is PrefixBuilder) return false;
     Map<String, Declaration> map =
@@ -107,7 +108,7 @@
     if (existing == member) return false;
     if (existing != null) {
       Declaration result = computeAmbiguousDeclaration(
-          name, existing, member, -1,
+          name, existing, member, charOffset,
           isExport: true);
       map[name] = result;
       return result != existing;
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 73020a5..aeb7fd1 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -117,8 +117,10 @@
   }
 
   FormalParameterBuilder getFormal(String name) {
-    for (FormalParameterBuilder formal in formals) {
-      if (formal.name == name) return formal;
+    if (formals != null) {
+      for (FormalParameterBuilder formal in formals) {
+        if (formal.name == name) return formal;
+      }
     }
     return null;
   }
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index 1f34a05..ff507b3 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -8,8 +8,6 @@
 
 import 'package:kernel/ast.dart' show Source;
 
-import '../api_prototype/compiler_options.dart' show CompilerOptions;
-
 import '../api_prototype/file_system.dart' show FileSystem;
 
 import '../base/processed_options.dart' show ProcessedOptions;
@@ -124,18 +122,18 @@
   /// Perform [action] in a [Zone] where [options] will be available as
   /// `CompilerContext.current.options`.
   static Future<T> runWithOptions<T>(
-      ProcessedOptions options, Future<T> action(CompilerContext c)) {
+      ProcessedOptions options, Future<T> action(CompilerContext c),
+      {bool errorOnMissingInput: true}) {
     return new CompilerContext(options)
         .runInContext<T>((CompilerContext c) async {
-      await options.validateOptions();
+      await options.validateOptions(errorOnMissingInput: errorOnMissingInput);
       return action(c);
     });
   }
 
   static Future<T> runWithDefaultOptions<T>(
       Future<T> action(CompilerContext c)) {
-    return new CompilerContext(new ProcessedOptions(new CompilerOptions()))
-        .runInContext<T>(action);
+    return new CompilerContext(new ProcessedOptions()).runInContext<T>(action);
   }
 
   static bool get enableColors {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 2838eb7..355da1a 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -23,7 +23,7 @@
 import '../fasta_codes.dart'
     show
         Message,
-        templateDuplicatedDefinition,
+        templateDuplicatedDeclaration,
         templateTypeNotFound,
         templateUnspecified;
 
@@ -154,7 +154,7 @@
     if (builder.parent == this) return builder;
     return new KernelInvalidTypeBuilder(
         name,
-        templateDuplicatedDefinition
+        templateDuplicatedDeclaration
             .withArguments(name)
             .withLocation(fileUri, charOffset, name.length));
   }
diff --git a/pkg/front_end/lib/src/fasta/export.dart b/pkg/front_end/lib/src/fasta/export.dart
index 2284a12..476de4c 100644
--- a/pkg/front_end/lib/src/fasta/export.dart
+++ b/pkg/front_end/lib/src/fasta/export.dart
@@ -30,6 +30,6 @@
         if (combinator.isHide && combinator.names.contains(name)) return false;
       }
     }
-    return exporter.addToExportScope(name, member);
+    return exporter.addToExportScope(name, member, charOffset);
   }
 }
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 2217a24..2989503 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -1977,22 +1977,62 @@
     tip: r"""Try removing all but one prefix.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateDuplicatedDefinition =
+const Template<Message Function(String name)> templateDuplicatedDeclaration =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Duplicated definition of '#name'.""",
-        withArguments: _withArgumentsDuplicatedDefinition);
+        messageTemplate: r"""'#name' is already declared in this scope.""",
+        withArguments: _withArgumentsDuplicatedDeclaration);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeDuplicatedDefinition =
+const Code<Message Function(String name)> codeDuplicatedDeclaration =
     const Code<Message Function(String name)>(
-  "DuplicatedDefinition",
-  templateDuplicatedDefinition,
+        "DuplicatedDeclaration", templateDuplicatedDeclaration,
+        analyzerCode: "DUPLICATE_DEFINITION");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedDeclaration(String name) {
+  return new Message(codeDuplicatedDeclaration,
+      message: """'${name}' is already declared in this scope.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateDuplicatedDeclarationCause =
+    const Template<Message Function(String name)>(
+        messageTemplate: r"""Previous declaration of '#name'.""",
+        withArguments: _withArgumentsDuplicatedDeclarationCause);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedDeclarationCause =
+    const Code<Message Function(String name)>(
+        "DuplicatedDeclarationCause", templateDuplicatedDeclarationCause,
+        severity: Severity.context);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedDeclarationCause(String name) {
+  return new Message(codeDuplicatedDeclarationCause,
+      message: """Previous declaration of '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateDuplicatedDeclarationUse =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Can't use '#name' because it is declared more than once.""",
+        withArguments: _withArgumentsDuplicatedDeclarationUse);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedDeclarationUse =
+    const Code<Message Function(String name)>(
+  "DuplicatedDeclarationUse",
+  templateDuplicatedDeclarationUse,
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsDuplicatedDefinition(String name) {
-  return new Message(codeDuplicatedDefinition,
-      message: """Duplicated definition of '${name}'.""",
+Message _withArgumentsDuplicatedDeclarationUse(String name) {
+  return new Message(codeDuplicatedDeclarationUse,
+      message: """Can't use '${name}' because it is declared more than once.""",
       arguments: {'name': name});
 }
 
@@ -2009,7 +2049,7 @@
     codeDuplicatedExport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
         "DuplicatedExport", templateDuplicatedExport,
-        analyzerCode: "AMBIGUOUS_EXPORT", severity: Severity.ignored);
+        analyzerCode: "AMBIGUOUS_EXPORT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedExport(String name, Uri uri_, Uri uri2_) {
@@ -2094,6 +2134,86 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateDuplicatedLibraryExport =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""A library with name '#name' is exported more than once.""",
+        withArguments: _withArgumentsDuplicatedLibraryExport);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedLibraryExport =
+    const Code<Message Function(String name)>(
+        "DuplicatedLibraryExport", templateDuplicatedLibraryExport,
+        analyzerCode: "EXPORT_DUPLICATED_LIBRARY_NAMED");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedLibraryExport(String name) {
+  return new Message(codeDuplicatedLibraryExport,
+      message: """A library with name '${name}' is exported more than once.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateDuplicatedLibraryExportContext =
+    const Template<Message Function(String name)>(
+        messageTemplate: r"""'#name' is also exported here.""",
+        withArguments: _withArgumentsDuplicatedLibraryExportContext);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedLibraryExportContext =
+    const Code<Message Function(String name)>("DuplicatedLibraryExportContext",
+        templateDuplicatedLibraryExportContext,
+        severity: Severity.context);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedLibraryExportContext(String name) {
+  return new Message(codeDuplicatedLibraryExportContext,
+      message: """'${name}' is also exported here.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateDuplicatedLibraryImport =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""A library with name '#name' is imported more than once.""",
+        withArguments: _withArgumentsDuplicatedLibraryImport);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedLibraryImport =
+    const Code<Message Function(String name)>(
+        "DuplicatedLibraryImport", templateDuplicatedLibraryImport,
+        analyzerCode: "IMPORT_DUPLICATED_LIBRARY_NAMED");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedLibraryImport(String name) {
+  return new Message(codeDuplicatedLibraryImport,
+      message: """A library with name '${name}' is imported more than once.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateDuplicatedLibraryImportContext =
+    const Template<Message Function(String name)>(
+        messageTemplate: r"""'#name' is also imported here.""",
+        withArguments: _withArgumentsDuplicatedLibraryImportContext);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeDuplicatedLibraryImportContext =
+    const Code<Message Function(String name)>("DuplicatedLibraryImportContext",
+        templateDuplicatedLibraryImportContext,
+        severity: Severity.context);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDuplicatedLibraryImportContext(String name) {
+  return new Message(codeDuplicatedLibraryImportContext,
+      message: """'${name}' is also imported here.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateDuplicatedModifier =
     const Template<Message Function(Token token)>(
         messageTemplate: r"""The modifier '#lexeme' was already specified.""",
@@ -2116,44 +2236,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateDuplicatedName =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' is already declared in this scope.""",
-        withArguments: _withArgumentsDuplicatedName);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeDuplicatedName =
-    const Code<Message Function(String name)>(
-        "DuplicatedName", templateDuplicatedName,
-        analyzerCode: "DUPLICATE_DEFINITION");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsDuplicatedName(String name) {
-  return new Message(codeDuplicatedName,
-      message: """'${name}' is already declared in this scope.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateDuplicatedNameCause =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""Previous declaration of '#name'.""",
-        withArguments: _withArgumentsDuplicatedNameCause);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeDuplicatedNameCause =
-    const Code<Message Function(String name)>(
-        "DuplicatedNameCause", templateDuplicatedNameCause,
-        severity: Severity.context);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsDuplicatedNameCause(String name) {
-  return new Message(codeDuplicatedNameCause,
-      message: """Previous declaration of '${name}'.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String
@@ -2372,7 +2454,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedAnInitializer = const MessageCode(
     "ExpectedAnInitializer",
-    analyzerCode: "MISSING_INITIALIZER",
+    index: 36,
     message: r"""Expected an initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2916,6 +2998,75 @@
     message: r"""Factory bodies can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, int count)>
+    templateFactoryRedirecteeHasTooFewPositionalParameters =
+    const Template<Message Function(String name, int count)>(
+        messageTemplate:
+            r"""Redirection target '#name' accepts fewer arguments ('#count') than the redirecting factory can provide.""",
+        tipTemplate: r"""Try redirecting to a different constructor.""",
+        withArguments:
+            _withArgumentsFactoryRedirecteeHasTooFewPositionalParameters);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, int count)>
+    codeFactoryRedirecteeHasTooFewPositionalParameters =
+    const Code<Message Function(String name, int count)>(
+        "FactoryRedirecteeHasTooFewPositionalParameters",
+        templateFactoryRedirecteeHasTooFewPositionalParameters,
+        analyzerCode: "REDIRECT_TO_INVALID_FUNCTION_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsFactoryRedirecteeHasTooFewPositionalParameters(
+    String name, int count) {
+  return new Message(codeFactoryRedirecteeHasTooFewPositionalParameters,
+      message:
+          """Redirection target '${name}' accepts fewer arguments ('${count}') than the redirecting factory can provide.""",
+      tip: """Try redirecting to a different constructor.""",
+      arguments: {'name': name, 'count': count});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        DartType _type,
+        String name,
+        DartType
+            _type2)> templateFactoryRedirecteeInvalidReturnType = const Template<
+        Message Function(DartType _type, String name, DartType _type2)>(
+    messageTemplate:
+        r"""The return type '#type' of the constructor '#name' isn't a subtype of '#type2'.""",
+    tipTemplate: r"""Try redirecting to a different constructor.""",
+    withArguments: _withArgumentsFactoryRedirecteeInvalidReturnType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type, String name, DartType _type2)>
+    codeFactoryRedirecteeInvalidReturnType =
+    const Code<Message Function(DartType _type, String name, DartType _type2)>(
+        "FactoryRedirecteeInvalidReturnType",
+        templateFactoryRedirecteeInvalidReturnType,
+        analyzerCode: "REDIRECT_TO_INVALID_RETURN_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsFactoryRedirecteeInvalidReturnType(
+    DartType _type, String name, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
+  return new Message(codeFactoryRedirecteeInvalidReturnType,
+      message:
+          """The return type '${type}' of the constructor '${name}' isn't a subtype of '${type2}'.""",
+      tip: """Try redirecting to a different constructor.""",
+      arguments: {'type': _type, 'name': name, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFactoryTopLevelDeclaration =
     messageFactoryTopLevelDeclaration;
 
@@ -4626,7 +4777,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidHexEscape = const MessageCode(
     "InvalidHexEscape",
-    analyzerCode: "INVALID_HEX_ESCAPE",
+    index: 40,
     message:
         r"""An escape sequence starting with '\x' must be followed by 2 hexadecimal digits.""");
 
@@ -4664,7 +4815,7 @@
 const Code<Message Function(Token token)> codeInvalidOperator =
     const Code<Message Function(Token token)>(
         "InvalidOperator", templateInvalidOperator,
-        analyzerCode: "INVALID_OPERATOR");
+        index: 39);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidOperator(Token token) {
@@ -4712,7 +4863,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidUnicodeEscape = const MessageCode(
     "InvalidUnicodeEscape",
-    analyzerCode: "INVALID_UNICODE_ESCAPE",
+    index: 38,
     message:
         r"""An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.""");
 
@@ -4788,7 +4939,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLibraryDirectiveNotFirst = const MessageCode(
     "LibraryDirectiveNotFirst",
-    analyzerCode: "LIBRARY_DIRECTIVE_NOT_FIRST",
+    index: 37,
     message:
         r"""The library directive must appear before all other directives.""",
     tip: r"""Try moving the library directive before any other directives.""");
@@ -4950,7 +5101,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingAssignableSelector = const MessageCode(
     "MissingAssignableSelector",
-    analyzerCode: "MISSING_ASSIGNABLE_SELECTOR",
+    index: 35,
     message: r"""Missing selector such as '.<identifier>' or '[0]'.""",
     tip: r"""Try adding a selector.""");
 
@@ -4961,7 +5112,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingAssignmentInInitializer = const MessageCode(
     "MissingAssignmentInInitializer",
-    analyzerCode: "MISSING_ASSIGNMENT_IN_INITIALIZER",
+    index: 34,
     message: r"""Expected an assignment after the field name.""",
     tip: r"""To initialize a field, use the syntax 'name = value'.""");
 
@@ -4972,7 +5123,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingConstFinalVarOrType = const MessageCode(
     "MissingConstFinalVarOrType",
-    analyzerCode: "MISSING_CONST_FINAL_VAR_OR_TYPE",
+    index: 33,
     message:
         r"""Variables must be declared using the keywords 'const', 'final', 'var' or a type name.""",
     tip:
@@ -5015,7 +5166,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingExpressionInThrow = const MessageCode(
     "MissingExpressionInThrow",
-    analyzerCode: "MISSING_EXPRESSION_IN_THROW",
+    index: 32,
     message: r"""Missing expression after 'throw'.""",
     tip:
         r"""Add an expression after 'throw' or use 'rethrow' to throw a caught exception""");
@@ -5125,7 +5276,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingOperatorKeyword = const MessageCode(
     "MissingOperatorKeyword",
-    analyzerCode: "MISSING_KEYWORD_OPERATOR",
+    index: 31,
     message:
         r"""Operator declarations must be preceeded by the keyword 'operator'.""",
     tip: r"""Try adding the keyword 'operator'.""");
@@ -6328,6 +6479,182 @@
         r"""Try removing the body, or not making this a redirecting constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(DartType _type, DartType _type2)>
+    templateRedirectingFactoryIncompatibleTypeArgument =
+    const Template<Message Function(DartType _type, DartType _type2)>(
+        messageTemplate: r"""The type '#type' doesn't extend '#type2'.""",
+        tipTemplate: r"""Try using a different type as argument.""",
+        withArguments:
+            _withArgumentsRedirectingFactoryIncompatibleTypeArgument);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type, DartType _type2)>
+    codeRedirectingFactoryIncompatibleTypeArgument =
+    const Code<Message Function(DartType _type, DartType _type2)>(
+        "RedirectingFactoryIncompatibleTypeArgument",
+        templateRedirectingFactoryIncompatibleTypeArgument,
+        analyzerCode: "TYPE_ARGUMENT_NOT_MATCHING_BOUNDS");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsRedirectingFactoryIncompatibleTypeArgument(
+    DartType _type, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
+  return new Message(codeRedirectingFactoryIncompatibleTypeArgument,
+      message: """The type '${type}' doesn't extend '${type2}'.""",
+      tip: """Try using a different type as argument.""",
+      arguments: {'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, DartType _type, DartType _type2)>
+    templateRedirectingFactoryInvalidNamedParameterType = const Template<
+            Message Function(String name, DartType _type, DartType _type2)>(
+        messageTemplate:
+            r"""The type of the named parameter '#name' (#type) is not a subtype of the redirection target's corresponding named parameter type (#type2).""",
+        tipTemplate:
+            r"""Try changing either the type of the parameter or the redirection target.""",
+        withArguments:
+            _withArgumentsRedirectingFactoryInvalidNamedParameterType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, DartType _type, DartType _type2)>
+    codeRedirectingFactoryInvalidNamedParameterType =
+    const Code<Message Function(String name, DartType _type, DartType _type2)>(
+        "RedirectingFactoryInvalidNamedParameterType",
+        templateRedirectingFactoryInvalidNamedParameterType,
+        analyzerCode: "REDIRECT_TO_INVALID_FUNCTION_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsRedirectingFactoryInvalidNamedParameterType(
+    String name, DartType _type, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
+  return new Message(codeRedirectingFactoryInvalidNamedParameterType,
+      message:
+          """The type of the named parameter '${name}' (${type}) is not a subtype of the redirection target's corresponding named parameter type (${type2}).""",
+      tip: """Try changing either the type of the parameter or the redirection target.""",
+      arguments: {'name': name, 'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, DartType _type, DartType _type2)>
+    templateRedirectingFactoryInvalidPositionalParameterType = const Template<
+            Message Function(String name, DartType _type, DartType _type2)>(
+        messageTemplate:
+            r"""The type of parameter '#name' (#type) is not a subtype of the redirection target's corresponding parameter type (#type2).""",
+        tipTemplate:
+            r"""Try changing either the type of the parameter or the redirection target.""",
+        withArguments:
+            _withArgumentsRedirectingFactoryInvalidPositionalParameterType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, DartType _type, DartType _type2)>
+    codeRedirectingFactoryInvalidPositionalParameterType =
+    const Code<Message Function(String name, DartType _type, DartType _type2)>(
+        "RedirectingFactoryInvalidPositionalParameterType",
+        templateRedirectingFactoryInvalidPositionalParameterType,
+        analyzerCode: "REDIRECT_TO_INVALID_FUNCTION_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsRedirectingFactoryInvalidPositionalParameterType(
+    String name, DartType _type, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
+  return new Message(codeRedirectingFactoryInvalidPositionalParameterType,
+      message:
+          """The type of parameter '${name}' (${type}) is not a subtype of the redirection target's corresponding parameter type (${type2}).""",
+      tip: """Try changing either the type of the parameter or the redirection target.""",
+      arguments: {'name': name, 'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, String name2)>
+    templateRedirectingFactoryMissingNamedParameter =
+    const Template<Message Function(String name, String name2)>(
+        messageTemplate:
+            r"""The constructor '#name' does not have a named parameter '#name2'.""",
+        tipTemplate:
+            r"""Try adding '#name2' as a named parameter to '#name'.""",
+        withArguments: _withArgumentsRedirectingFactoryMissingNamedParameter);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, String name2)>
+    codeRedirectingFactoryMissingNamedParameter =
+    const Code<Message Function(String name, String name2)>(
+        "RedirectingFactoryMissingNamedParameter",
+        templateRedirectingFactoryMissingNamedParameter,
+        analyzerCode: "REDIRECT_TO_INVALID_FUNCTION_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsRedirectingFactoryMissingNamedParameter(
+    String name, String name2) {
+  return new Message(codeRedirectingFactoryMissingNamedParameter,
+      message:
+          """The constructor '${name}' does not have a named parameter '${name2}'.""",
+      tip: """Try adding '${name2}' as a named parameter to '${name}'.""",
+      arguments: {'name': name, 'name2': name2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+        Message Function(String name, int count, String name2, int count2)>
+    templateRedirectingFactoryProvidesTooFewRequiredParameters = const Template<
+            Message Function(String name, int count, String name2, int count2)>(
+        messageTemplate:
+            r"""Redirecting factory '#name' can provide less arguments ('#count') than required by the redirection target '#name2' ('#count2').""",
+        tipTemplate: r"""Try redirecting to a different constructor.""",
+        withArguments:
+            _withArgumentsRedirectingFactoryProvidesTooFewRequiredParameters);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, int count, String name2, int count2)>
+    codeRedirectingFactoryProvidesTooFewRequiredParameters = const Code<
+            Message Function(String name, int count, String name2, int count2)>(
+        "RedirectingFactoryProvidesTooFewRequiredParameters",
+        templateRedirectingFactoryProvidesTooFewRequiredParameters,
+        analyzerCode: "REDIRECT_TO_INVALID_FUNCTION_TYPE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsRedirectingFactoryProvidesTooFewRequiredParameters(
+    String name, int count, String name2, int count2) {
+  return new Message(codeRedirectingFactoryProvidesTooFewRequiredParameters,
+      message:
+          """Redirecting factory '${name}' can provide less arguments ('${count}') than required by the redirection target '${name2}' ('${count2}').""",
+      tip: """Try redirecting to a different constructor.""",
+      arguments: {
+        'name': name,
+        'count': count,
+        'name2': name2,
+        'count2': count2
+      });
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeRedirectionInNonFactory = messageRedirectionInNonFactory;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/get_dependencies.dart b/pkg/front_end/lib/src/fasta/get_dependencies.dart
index c7b7ba3..8903d3f 100644
--- a/pkg/front_end/lib/src/fasta/get_dependencies.dart
+++ b/pkg/front_end/lib/src/fasta/get_dependencies.dart
@@ -36,7 +36,7 @@
     ..packagesFileUri = packages
     ..sdkSummary = platform
     ..sdkRoot = sdk;
-  var pOptions = new ProcessedOptions(options, <Uri>[script]);
+  var pOptions = new ProcessedOptions(options: options, inputs: <Uri>[script]);
   return await CompilerContext.runWithOptions(pOptions,
       (CompilerContext c) async {
     FileSystem fileSystem = c.options.fileSystem;
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index b1ed5a3..c599b61 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -303,9 +303,13 @@
         userCode = userCodeOld;
       }
 
+      Map<Uri, Source> optionalUriToSource = context.options.embedSourceText
+          ? uriToSource
+          : uriToSource.map((uri, source) => MapEntry<Uri, Source>(
+              uri, new Source(source.lineStarts, const <int>[])));
       // This is the incremental component.
-      return context.options.target.configureComponent(
-          new Component(libraries: outputLibraries, uriToSource: uriToSource))
+      return context.options.target.configureComponent(new Component(
+          libraries: outputLibraries, uriToSource: optionalUriToSource))
         ..mainMethod = mainMethod;
     });
   }
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 fee5680..64a2e04 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -31,8 +31,7 @@
         offsetForToken,
         optional;
 
-import '../problems.dart'
-    show internalProblem, unexpected, unhandled, unsupported;
+import '../problems.dart' show unexpected, unhandled, unsupported;
 
 import '../quote.dart'
     show
@@ -52,7 +51,13 @@
 import '../severity.dart' show Severity;
 
 import '../source/scope_listener.dart'
-    show JumpTargetKind, NullValue, ScopeListener;
+    show
+        FixedNullableList,
+        GrowableList,
+        JumpTargetKind,
+        NullValue,
+        ParserRecovery,
+        ScopeListener;
 
 import '../type_inference/type_inferrer.dart' show TypeInferrer;
 
@@ -70,7 +75,7 @@
         IncompletePropertyAccessGenerator,
         IncompleteSendGenerator,
         IndexedAccessGenerator,
-        LargeIntAccessGenerator,
+        IntAccessGenerator,
         LoadLibraryGenerator,
         ParenthesizedExpressionGenerator,
         PrefixUseGenerator,
@@ -131,8 +136,6 @@
 
   final bool stringExpectedAfterNative;
 
-  final bool errorOnUnexactWebIntLiterals;
-
   /// Whether to ignore an unresolved reference to `main` within the body of
   /// `_getMainClosure` when compiling the current library.
   ///
@@ -226,8 +229,6 @@
             library.loader.target.backendTarget.enableNative(library.uri),
         stringExpectedAfterNative =
             library.loader.target.backendTarget.nativeExtensionExpectsString,
-        errorOnUnexactWebIntLiterals =
-            library.loader.target.backendTarget.errorOnUnexactWebIntLiterals,
         ignoreMainInGetMainClosure = library.uri.scheme == 'dart' &&
             (library.uri.path == "_builtin" || library.uri.path == "ui"),
         needsImplicitSuperInitializer =
@@ -323,10 +324,10 @@
   }
 
   Statement popBlock(int count, Token openBrace, Token closeBrace) {
-    List<Statement> statements =
-        new List<Statement>.filled(count, null, growable: true);
-    popList(count, statements);
-    return forest.block(openBrace, statements, closeBrace);
+    return forest.block(
+        openBrace,
+        const GrowableList<Statement>().pop(stack, count) ?? <Statement>[],
+        closeBrace);
   }
 
   Statement popStatementIfNotNull(Object value) {
@@ -387,8 +388,8 @@
       // This reports an error for duplicated declarations in the same scope:
       // `{ var x; var x; }`
       wrapVariableInitializerInError(
-          variable, fasta.templateDuplicatedName, <LocatedMessage>[
-        fasta.templateDuplicatedNameCause
+          variable, fasta.templateDuplicatedDeclaration, <LocatedMessage>[
+        fasta.templateDuplicatedDeclarationCause
             .withArguments(name)
             .withLocation(uri, existing.charOffset, name.length)
       ]);
@@ -469,9 +470,12 @@
   @override
   void endMetadataStar(int count) {
     debugEvent("MetadataStar");
-    push(popList(
-            count, new List<Expression>.filled(count, null, growable: true)) ??
-        NullValue.Metadata);
+    if (count == 0) {
+      push(NullValue.Metadata);
+    } else {
+      push(const GrowableList<Expression>().pop(stack, count) ??
+          NullValue.Metadata /* Ignore parser recovery */);
+    }
   }
 
   @override
@@ -497,11 +501,17 @@
       Expression initializer = pop();
       Identifier identifier = pop();
       String name = identifier.name;
-      FieldBuilder<Object> field;
+      Declaration declaration;
       if (classBuilder != null) {
-        field = classBuilder[name];
+        declaration = classBuilder[name];
       } else {
-        field = library[name];
+        declaration = library[name];
+      }
+      FieldBuilder<Object> field;
+      if (declaration.isField && declaration.next == null) {
+        field = declaration;
+      } else {
+        continue;
       }
       fields.add(field);
       if (initializer != null) {
@@ -1084,8 +1094,13 @@
   @override
   void endArguments(int count, Token beginToken, Token endToken) {
     debugEvent("Arguments");
-    List<Object> arguments = new List<Object>(count);
-    popList(count, arguments);
+    List<Object> arguments = count == 0
+        ? <Object>[]
+        : const FixedNullableList<Object>().pop(stack, count);
+    if (arguments == null) {
+      push(new ParserRecovery(beginToken.charOffset));
+      return;
+    }
     int firstNamedArgumentIndex = arguments.length;
     for (int i = 0; i < arguments.length; i++) {
       Object node = arguments[i];
@@ -1726,7 +1741,11 @@
       push(forest.literalString(value, token));
     } else {
       int count = 1 + interpolationCount * 2;
-      List<Object> parts = popList(count, new List<Object>(count));
+      List<Object> parts = const FixedNullableList<Object>().pop(stack, count);
+      if (parts == null) {
+        push(new ParserRecovery(endToken.charOffset));
+        return;
+      }
       Token first = parts.first;
       Token last = parts.last;
       Quote quote = analyzeQuote(first.lexeme);
@@ -1801,15 +1820,7 @@
   @override
   void handleLiteralInt(Token token) {
     debugEvent("LiteralInt");
-    int value = int.parse(token.lexeme, onError: (_) => null);
-    if (value == null) {
-      push(new LargeIntAccessGenerator(this, token));
-    } else {
-      if (errorOnUnexactWebIntLiterals) {
-        checkWebIntLiteralsErrorIfUnexact(value, token);
-      }
-      push(forest.literalInt(value, token));
-    }
+    push(IntAccessGenerator.parseIntLiteral(this, token));
   }
 
   @override
@@ -1975,14 +1986,16 @@
       }
       push(variable);
     } else {
-      List<VariableDeclarationJudgment> variables = popList(
-          count,
-          new List<VariableDeclarationJudgment>.filled(count, null,
-              growable: true));
+      List<VariableDeclaration> variables =
+          const FixedNullableList<VariableDeclaration>().pop(stack, count);
       constantContext = pop();
       currentLocalVariableType = pop();
       currentLocalVariableModifiers = pop();
       List<Expression> annotations = pop();
+      if (variables == null) {
+        push(new ParserRecovery(endToken.charOffset));
+        return;
+      }
       if (annotations != null) {
         bool isFirstVariable = true;
         for (VariableDeclarationJudgment variable in variables) {
@@ -2195,8 +2208,7 @@
       int count, Token leftBrace, Token constKeyword, Token rightBrace) {
     debugEvent("LiteralMap");
     List<MapEntry> entries =
-        new List<MapEntry>.filled(count, null, growable: true);
-    popList(count, entries);
+        const GrowableList<MapEntry>().pop(stack, count) ?? <MapEntry>[];
     List<UnresolvedType<KernelTypeBuilder>> typeArguments = pop();
     DartType keyType;
     DartType valueType;
@@ -2255,7 +2267,11 @@
       push(forest.literalSymbolSingluar(value, hashToken, part));
     } else {
       List<Identifier> parts =
-          popList(identifierCount, new List<Identifier>(identifierCount));
+          const FixedNullableList<Identifier>().pop(stack, identifierCount);
+      if (parts == null) {
+        push(new ParserRecovery(hashToken.charOffset));
+        return;
+      }
       value = symbolPartToString(parts.first);
       for (int i = 1; i < parts.length; i++) {
         value += ".${symbolPartToString(parts[i])}";
@@ -2295,6 +2311,13 @@
       if (result == null) {
         unhandled("null", "result", beginToken.charOffset, uri);
       }
+    } else if (name is ProblemBuilder) {
+      // TODO(ahe): Arguments could be passed here.
+      result = new KernelNamedTypeBuilder(name.name, null)
+        ..bind(new KernelInvalidTypeBuilder(
+            name.name,
+            name.message.withLocation(
+                name.fileUri, name.charOffset, name.name.length)));
     } else {
       unhandled(
           "${name.runtimeType}", "handleType", beginToken.charOffset, uri);
@@ -2320,10 +2343,7 @@
         if (existing == null) {
           scopeBuilder.addMember(name, builder);
         } else {
-          addProblem(fasta.templateDuplicatedName.withArguments(name),
-              builder.charOffset, name.length);
-          addProblem(fasta.templateDuplicatedNameCause.withArguments(name),
-              existing.charOffset, name.length);
+          reportDuplicatedDeclaration(existing, name, builder.charOffset);
         }
       }
     }
@@ -2474,6 +2494,10 @@
       modifiers |= finalMask;
     }
     List<Expression> annotations = pop();
+    if (nameToken.isSynthetic) {
+      push(new ParserRecovery(nameToken.charOffset));
+      return;
+    }
     KernelFormalParameterBuilder parameter;
     if (!inCatchClause &&
         functionNestingLevel == 0 &&
@@ -2481,11 +2505,8 @@
       ProcedureBuilder<TypeBuilder> member = this.member;
       parameter = member.getFormal(name.name);
       if (parameter == null) {
-        internalProblem(
-            fasta.templateInternalProblemNotFoundIn
-                .withArguments(name.name, "formals"),
-            offsetForToken(nameToken),
-            uri);
+        push(new ParserRecovery(nameToken.charOffset));
+        return;
       }
     } else {
       parameter = new KernelFormalParameterBuilder(null, modifiers,
@@ -2529,12 +2550,16 @@
     // case, however, then [beginOptionalFormalParameters] wouldn't always be
     // matched by this method.
     List<KernelFormalParameterBuilder> parameters =
-        new List<KernelFormalParameterBuilder>(count);
-    popList(count, parameters);
-    for (KernelFormalParameterBuilder parameter in parameters) {
-      parameter.kind = kind;
+        const FixedNullableList<KernelFormalParameterBuilder>()
+            .pop(stack, count);
+    if (parameters == null) {
+      push(new ParserRecovery(offsetForToken(beginToken)));
+    } else {
+      for (KernelFormalParameterBuilder parameter in parameters) {
+        parameter.kind = kind;
+      }
+      push(parameters);
     }
-    push(parameters);
   }
 
   @override
@@ -2603,15 +2628,13 @@
       count--;
       optionalsCount = optionals.length;
     }
-    List<KernelFormalParameterBuilder> parameters;
-    if (count + optionalsCount > 0) {
-      parameters =
-          new List<KernelFormalParameterBuilder>(count + optionalsCount);
-      popList(count, parameters);
-      if (optionals != null) {
-        parameters.setRange(count, count + optionalsCount, optionals);
-      }
+    List<KernelFormalParameterBuilder> parameters =
+        const FixedNullableList<KernelFormalParameterBuilder>()
+            .popPadded(stack, count, optionalsCount);
+    if (optionals != null && parameters != null) {
+      parameters.setRange(count, count + optionalsCount, optionals);
     }
+    assert(parameters?.isNotEmpty ?? true);
     FormalParameters formals = new FormalParameters(parameters,
         offsetForToken(beginToken), lengthOfSpan(beginToken, endToken), uri);
     constantContext = pop();
@@ -2653,7 +2676,7 @@
     KernelFormalParameterBuilder exception;
     KernelFormalParameterBuilder stackTrace;
     List<Statement> compileTimeErrors;
-    if (catchParameters != null) {
+    if (catchParameters?.parameters != null) {
       int parameterCount = catchParameters.parameters.length;
       if (parameterCount > 0) {
         exception = catchParameters.parameters[0];
@@ -2700,7 +2723,7 @@
     List<Statement> compileTimeErrors;
     if (catchCount != 0) {
       List<Object> catchBlocksAndErrors =
-          popList(catchCount * 2, new List<Object>(catchCount * 2));
+          const FixedNullableList<Object>().pop(stack, catchCount * 2);
       catchBlocks = new List<Catch>.filled(catchCount, null, growable: true);
       for (int i = 0; i < catchCount; i++) {
         catchBlocks[i] = catchBlocksAndErrors[i * 2];
@@ -2759,14 +2782,8 @@
       if (optional("-", token)) {
         operator = "unary-";
 
-        if (receiver is LargeIntAccessGenerator) {
-          int value = int.tryParse("-" + receiver.token.lexeme);
-          if (value != null) {
-            receiverValue = forest.literalInt(value, receiver.token);
-            if (errorOnUnexactWebIntLiterals) {
-              checkWebIntLiteralsErrorIfUnexact(value, token);
-            }
-          }
+        if (receiver is IntAccessGenerator) {
+          receiverValue = receiver.buildNegatedRead();
         }
       }
       bool isSuper = false;
@@ -3260,7 +3277,9 @@
   @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     debugEvent("TypeArguments");
-    push(popList(count, new List<UnresolvedType<KernelTypeBuilder>>(count)));
+    push(const FixedNullableList<UnresolvedType<KernelTypeBuilder>>()
+            .pop(stack, count) ??
+        NullValue.TypeArguments);
   }
 
   @override
@@ -3309,10 +3328,12 @@
         forSyntheticToken: nameToken.isSynthetic,
         isFinal: true,
         isLocalFunction: true)
-      ..fileOffset = offsetForToken(nameToken);
-    if (scope.local[variable.name] != null) {
-      addProblem(fasta.templateDuplicatedName.withArguments(variable.name),
-          name.charOffset, nameToken.length);
+      ..fileOffset = name.charOffset;
+    // TODO(ahe): Why are we looking up in local scope, but declaring in parent
+    // scope?
+    Declaration existing = scope.local[name.name];
+    if (existing != null) {
+      reportDuplicatedDeclaration(existing, name.name, name.charOffset);
     }
     push(new FunctionDeclarationJudgment(
         variable,
@@ -3579,13 +3600,15 @@
   @override
   void beginLabeledStatement(Token token, int labelCount) {
     debugEvent("beginLabeledStatement");
-    List<Label> labels = new List<Label>(labelCount);
-    popList(labelCount, labels);
+    List<Label> labels =
+        const FixedNullableList<Label>().pop(stack, labelCount);
     enterLocalScope(null, scope.createNestedLabelScope());
     LabelTarget target =
-        new LabelTarget(labels, member, functionNestingLevel, token.charOffset);
-    for (Label label in labels) {
-      scope.declareLabel(label.name, target);
+        new LabelTarget(member, functionNestingLevel, token.charOffset);
+    if (labels != null) {
+      for (Label label in labels) {
+        scope.declareLabel(label.name, target);
+      }
     }
     push(target);
   }
@@ -3708,36 +3731,43 @@
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     debugEvent("beginSwitchCase");
     int count = labelCount + expressionCount;
-    List<Object> labelsAndExpressions = popList(count, new List<Object>(count));
-    List<Label> labels = <Label>[];
-    List<Expression> expressions = <Expression>[];
+    List<Object> labelsAndExpressions =
+        const FixedNullableList<Object>().pop(stack, count);
+    List<Label> labels = labelCount == 0 ? null : new List<Label>(labelCount);
+    List<Expression> expressions =
+        new List<Expression>.filled(expressionCount, null, growable: true);
+    int labelIndex = 0;
+    int expressionIndex = 0;
     if (labelsAndExpressions != null) {
       for (Object labelOrExpression in labelsAndExpressions) {
         if (labelOrExpression is Label) {
-          labels.add(labelOrExpression);
+          labels[labelIndex++] = labelOrExpression;
         } else {
-          expressions.add(labelOrExpression);
+          expressions[expressionIndex++] = labelOrExpression;
         }
       }
     }
     assert(scope == switchScope);
-    for (Label label in labels) {
-      String labelName = label.name;
-      if (scope.hasLocalLabel(labelName)) {
-        // TODO(ahe): Should validate this is a goto target.
-        if (!scope.claimLabel(labelName)) {
-          addProblem(
-              fasta.templateDuplicateLabelInSwitchStatement
-                  .withArguments(labelName),
-              label.charOffset,
-              labelName.length);
+    if (labels != null) {
+      for (Label label in labels) {
+        String labelName = label.name;
+        if (scope.hasLocalLabel(labelName)) {
+          // TODO(ahe): Should validate this is a goto target.
+          if (!scope.claimLabel(labelName)) {
+            addProblem(
+                fasta.templateDuplicateLabelInSwitchStatement
+                    .withArguments(labelName),
+                label.charOffset,
+                labelName.length);
+          }
+        } else {
+          scope.declareLabel(
+              labelName, createGotoTarget(firstToken.charOffset));
         }
-      } else {
-        scope.declareLabel(labelName, createGotoTarget(firstToken.charOffset));
       }
     }
     push(expressions);
-    push(labels);
+    push(labels ?? NullValue.Labels);
     enterLocalScope("switch case");
   }
 
@@ -3765,7 +3795,7 @@
     push(new SwitchCaseJudgment(expressions, expressionOffsets, block,
         isDefault: defaultKeyword != null)
       ..fileOffset = firstToken.charOffset);
-    push(labels);
+    push(labels ?? NullValue.Labels);
   }
 
   @override
@@ -3794,10 +3824,12 @@
     for (int i = caseCount - 1; i >= 0; i--) {
       List<Label> labels = pop();
       SwitchCase current = cases[i] = pop();
-      for (Label label in labels) {
-        JumpTarget target = switchScope.lookupLabel(label.name);
-        if (target != null) {
-          target.resolveGotos(forest, current);
+      if (labels != null) {
+        for (Label label in labels) {
+          JumpTarget target = switchScope.lookupLabel(label.name);
+          if (target != null) {
+            target.resolveGotos(forest, current);
+          }
         }
       }
     }
@@ -3956,7 +3988,7 @@
     debugEvent("handleTypeVariablesDefined");
     assert(count > 0);
     List<KernelTypeVariableBuilder> typeVariables =
-        popList(count, new List<KernelTypeVariableBuilder>(count));
+        const FixedNullableList<KernelTypeVariableBuilder>().pop(stack, count);
     enterFunctionTypeScope(typeVariables);
     push(typeVariables);
   }
@@ -4458,6 +4490,22 @@
   }
 
   @override
+  void reportDuplicatedDeclaration(
+      Declaration existing, String name, int charOffset) {
+    List<LocatedMessage> context = existing.isSynthetic
+        ? null
+        : <LocatedMessage>[
+            fasta.templateDuplicatedDeclarationCause
+                .withArguments(name)
+                .withLocation(
+                    existing.fileUri, existing.charOffset, name.length)
+          ];
+    addProblem(fasta.templateDuplicatedDeclaration.withArguments(name),
+        charOffset, name.length,
+        context: context);
+  }
+
+  @override
   void debugEvent(String name) {
     // printEvent('BodyBuilder: $name');
   }
@@ -4486,26 +4534,6 @@
         forest.isErroneousNode(node);
   }
 
-  void checkWebIntLiteralsErrorIfUnexact(int value, Token token) {
-    BigInt asInt = new BigInt.from(value).toUnsigned(64);
-    BigInt asDouble = new BigInt.from(asInt.toDouble());
-    if (asInt != asDouble) {
-      String nearest;
-      if (token.lexeme.startsWith("0x") || token.lexeme.startsWith("0X")) {
-        nearest = '0x${asDouble.toRadixString(16)}';
-      } else {
-        nearest = '$asDouble';
-      }
-      library.addProblem(
-          fasta.templateWebLiteralCannotBeRepresentedExactly
-              .withArguments(token.lexeme, nearest),
-          token.charOffset,
-          token.charCount,
-          uri,
-          wasHandled: true);
-    }
-  }
-
   @override
   DartType buildDartType(UnresolvedType<KernelTypeBuilder> unresolvedType,
       {bool nonInstanceAccessIsError: false}) {
@@ -4610,8 +4638,6 @@
 }
 
 class LabelTarget extends Declaration implements JumpTarget {
-  final List<Label> labels;
-
   @override
   final MemberBuilder parent;
 
@@ -4624,8 +4650,7 @@
   @override
   final int charOffset;
 
-  LabelTarget(
-      this.labels, this.parent, this.functionNestingLevel, this.charOffset)
+  LabelTarget(this.parent, this.functionNestingLevel, this.charOffset)
       : breakTarget = new JumpTarget(
             JumpTargetKind.Break, functionNestingLevel, parent, charOffset),
         continueTarget = new JumpTarget(
@@ -4739,16 +4764,8 @@
     for (KernelFormalParameterBuilder parameter in parameters) {
       Declaration existing = local[parameter.name];
       if (existing != null) {
-        helper.addProblem(
-            fasta.templateDuplicatedName.withArguments(parameter.name),
-            parameter.charOffset,
-            parameter.name.length,
-            context: <LocatedMessage>[
-              fasta.templateDuplicatedNameCause
-                  .withArguments(parameter.name)
-                  .withLocation(existing.fileUri, existing.charOffset,
-                      parameter.name.length)
-            ]);
+        helper.reportDuplicatedDeclaration(
+            existing, parameter.name, parameter.charOffset);
       } else {
         local[parameter.name] = parameter;
       }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index f81b7ef..ba11d9f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -25,7 +25,8 @@
         templateMissingExplicitTypeArguments,
         templateNotAPrefixInTypeAnnotation,
         templateNotAType,
-        templateUnresolvedPrefixInTypeAnnotation;
+        templateUnresolvedPrefixInTypeAnnotation,
+        templateWebLiteralCannotBeRepresentedExactly;
 
 import '../names.dart'
     show
@@ -663,10 +664,9 @@
   String get debugName => "ReadOnlyAccessGenerator";
 }
 
-abstract class LargeIntAccessGenerator implements Generator {
-  factory LargeIntAccessGenerator(
-      ExpressionGeneratorHelper helper, Token token) {
-    return helper.forest.largeIntAccessGenerator(helper, token);
+abstract class IntAccessGenerator implements Generator {
+  factory IntAccessGenerator(ExpressionGeneratorHelper helper, Token token) {
+    return helper.forest.intAccessGenerator(helper, token);
   }
 
   // TODO(ahe): This should probably be calling unhandled.
@@ -674,7 +674,66 @@
   String get plainNameForRead => null;
 
   @override
-  String get debugName => "LargeIntAccessGenerator";
+  String get debugName => "IntAccessGenerator";
+
+  static void checkWebIntLiteralsErrorIfUnexact(
+      ExpressionGeneratorHelper helper, int value, Token token) {
+    if (value >= 0 && value <= (1 << 53)) return;
+    if (!helper.library.loader.target.backendTarget
+        .errorOnUnexactWebIntLiterals) return;
+    BigInt asInt = new BigInt.from(value).toUnsigned(64);
+    BigInt asDouble = new BigInt.from(asInt.toDouble());
+    if (asInt != asDouble) {
+      String nearest;
+      if (token.lexeme.startsWith("0x") || token.lexeme.startsWith("0X")) {
+        nearest = '0x${asDouble.toRadixString(16)}';
+      } else {
+        nearest = '$asDouble';
+      }
+      helper.addProblem(
+          templateWebLiteralCannotBeRepresentedExactly.withArguments(
+              token.lexeme, nearest),
+          token.charOffset,
+          token.charCount);
+    }
+  }
+
+  static Object parseIntLiteral(ExpressionGeneratorHelper helper, Token token) {
+    int value = int.tryParse(token.lexeme);
+    // Postpone parsing of literals resulting in a negative value
+    // (hex literals >= 2^63). These are only allowed when not negated.
+    if (value == null || value < 0) {
+      return new IntAccessGenerator(helper, token);
+    } else {
+      checkWebIntLiteralsErrorIfUnexact(helper, value, token);
+      return helper.forest.literalInt(value, token);
+    }
+  }
+
+  Expression parseOrError(String literal, Token token) {
+    int value = int.tryParse(literal);
+    if (value != null) {
+      checkWebIntLiteralsErrorIfUnexact(helper, value, token);
+      return helper.forest.literalInt(value, token);
+    } else {
+      return buildError();
+    }
+  }
+
+  @override
+  Expression buildSimpleRead() {
+    // Called when literal that previously failed to parse, or resulted in
+    // a negative value (hex literals >= 2^63), is not negated.
+    // Try parsing again, this time accepting negative values.
+    return parseOrError(token.lexeme, token);
+  }
+
+  Expression buildNegatedRead() {
+    // Called when literal that previously failed to parse, or resulted in
+    // a negative value (hex literals >= 2^63), is negated.
+    // Try parsing with a '-' in front.
+    return parseOrError("-" + token.lexeme, token);
+  }
 
   SyntheticExpressionJudgment buildError() {
     return helper.buildProblem(
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 4c8a138..6629dba 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -23,7 +23,7 @@
 import 'forest.dart' show Forest;
 
 import 'kernel_builder.dart'
-    show KernelTypeBuilder, PrefixBuilder, UnresolvedType;
+    show Declaration, KernelTypeBuilder, PrefixBuilder, UnresolvedType;
 
 import 'kernel_ast_api.dart'
     show
@@ -150,4 +150,7 @@
 
   List<DartType> buildDartTypeArguments(
       List<UnresolvedType<KernelTypeBuilder>> unresolvedTypes);
+
+  void reportDuplicatedDeclaration(
+      Declaration existing, String name, int charOffset);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 6183be9..f0f16e5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -44,7 +44,7 @@
         KernelDelayedAssignment,
         KernelDelayedPostfixIncrement,
         KernelIndexedAccessGenerator,
-        KernelLargeIntAccessGenerator,
+        KernelIntAccessGenerator,
         KernelLoadLibraryGenerator,
         KernelNullAwarePropertyAccessGenerator,
         KernelPrefixUseGenerator,
@@ -491,7 +491,8 @@
   @override
   Statement wrapVariables(Statement statement) {
     if (statement is _VariablesDeclaration) {
-      return new BlockJudgment(statement.declarations)
+      return new BlockJudgment(
+          new List<Statement>.from(statement.declarations, growable: true))
         ..fileOffset = statement.fileOffset;
     } else if (statement is VariableDeclaration) {
       return new BlockJudgment(<Statement>[statement])
@@ -696,9 +697,9 @@
   }
 
   @override
-  KernelLargeIntAccessGenerator largeIntAccessGenerator(
+  KernelIntAccessGenerator intAccessGenerator(
       ExpressionGeneratorHelper helper, Token token) {
-    return new KernelLargeIntAccessGenerator(helper, token);
+    return new KernelIntAccessGenerator(helper, token);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 86f4e31..ffb30fa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -386,7 +386,7 @@
   Generator readOnlyAccessGenerator(ExpressionGeneratorHelper helper,
       Token location, Expression expression, String plainNameForRead);
 
-  Generator largeIntAccessGenerator(
+  Generator intAccessGenerator(
       ExpressionGeneratorHelper helper, Token location);
 
   Generator unresolvedNameGenerator(
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index 10c696a..3ad8c9c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -31,6 +31,9 @@
         Arguments,
         VariableDeclaration;
 
+import 'package:kernel/ast.dart'
+    show FunctionType, NamedType, TypeParameterType;
+
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 
 import 'package:kernel/clone.dart' show CloneWithoutBody;
@@ -53,6 +56,8 @@
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
         noLength,
+        templateFactoryRedirecteeHasTooFewPositionalParameters,
+        templateFactoryRedirecteeInvalidReturnType,
         templateImplementsRepeated,
         templateImplementsSuperClass,
         templateMissingImplementationCause,
@@ -65,6 +70,11 @@
         templateOverrideTypeMismatchParameter,
         templateOverrideTypeMismatchReturnType,
         templateOverrideTypeVariablesMismatch,
+        templateRedirectingFactoryIncompatibleTypeArgument,
+        templateRedirectingFactoryInvalidNamedParameterType,
+        templateRedirectingFactoryInvalidPositionalParameterType,
+        templateRedirectingFactoryMissingNamedParameter,
+        templateRedirectingFactoryProvidesTooFewRequiredParameters,
         templateRedirectionTargetNotFound,
         templateTypeArgumentMismatch;
 
@@ -80,6 +90,7 @@
         ConstructorReferenceBuilder,
         Declaration,
         KernelLibraryBuilder,
+        KernelFunctionBuilder,
         KernelProcedureBuilder,
         KernelRedirectingFactoryBuilder,
         KernelNamedTypeBuilder,
@@ -92,7 +103,8 @@
         Scope,
         TypeVariableBuilder;
 
-import 'redirecting_factory_body.dart' show RedirectingFactoryBody;
+import 'redirecting_factory_body.dart'
+    show getRedirectingFactoryBody, RedirectingFactoryBody;
 
 import 'kernel_target.dart' show KernelTarget;
 
@@ -1176,4 +1188,294 @@
     }
     return declaration;
   }
+
+  // Computes the function type of a given redirection target. Returns [null] if
+  // the type of actual target could not be computed.
+  FunctionType computeRedirecteeType(KernelRedirectingFactoryBuilder factory,
+      TypeEnvironment typeEnvironment) {
+    ConstructorReferenceBuilder redirectionTarget = factory.redirectionTarget;
+    FunctionNode target;
+    bool isConstructor = false;
+    Class targetClass; // Used when the redirection target is a constructor.
+    if (redirectionTarget.target is KernelFunctionBuilder) {
+      KernelFunctionBuilder targetBuilder = redirectionTarget.target;
+      target = targetBuilder.function;
+      isConstructor = targetBuilder.isConstructor;
+      if (isConstructor) {
+        targetClass = targetBuilder.parent.target;
+      }
+    } else if (redirectionTarget.target is DillMemberBuilder &&
+        (redirectionTarget.target.isConstructor ||
+            redirectionTarget.target.isFactory)) {
+      DillMemberBuilder targetBuilder = redirectionTarget.target;
+      // It seems that the [redirectionTarget.target] is an instance of
+      // [DillMemberBuilder] whenever the redirectee is an implicit constructor,
+      // e.g.
+      //
+      //   class A {
+      //     factory A() = B;
+      //   }
+      //   class B implements A {}
+      //
+      target = targetBuilder.member.function;
+      isConstructor = targetBuilder.isConstructor;
+      if (isConstructor) {
+        targetClass = targetBuilder.member.enclosingClass;
+      }
+    } else {
+      return null;
+    }
+
+    List<DartType> typeArguments =
+        getRedirectingFactoryBody(factory.target).typeArguments;
+    FunctionType targetFunctionType = target.functionType;
+    if (typeArguments != null &&
+        targetFunctionType.typeParameters.length != typeArguments.length) {
+      addProblem(
+          templateTypeArgumentMismatch
+              .withArguments(targetFunctionType.typeParameters.length),
+          redirectionTarget.charOffset,
+          noLength);
+      return null;
+    }
+
+    // Compute the substitution of the target class type parameters if
+    // [redirectionTarget] has any type arguments.
+    Substitution substitution;
+    bool hasProblem = false;
+    if (typeArguments != null && typeArguments.length > 0) {
+      substitution = Substitution.fromPairs(
+          targetFunctionType.typeParameters, typeArguments);
+      for (int i = 0; i < targetFunctionType.typeParameters.length; i++) {
+        TypeParameter typeParameter = targetFunctionType.typeParameters[i];
+        DartType typeParameterBound =
+            substitution.substituteType(typeParameter.bound);
+        DartType typeArgument = typeArguments[i];
+        // Check whether the [typeArgument] respects the bounds of [typeParameter].
+        if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound)) {
+          addProblem(
+              templateRedirectingFactoryIncompatibleTypeArgument.withArguments(
+                  typeArgument, typeParameterBound),
+              redirectionTarget.charOffset,
+              noLength);
+          hasProblem = true;
+        }
+      }
+    } else if (typeArguments == null &&
+        targetFunctionType.typeParameters.length > 0) {
+      // TODO(hillerstrom): In this case, we need to perform type inference on
+      // the redirectee to obtain actual type arguments which would allow the
+      // following program to type check:
+      //
+      //    class A<T> {
+      //       factory A() = B;
+      //    }
+      //    class B<T> implements A<T> {
+      //       B();
+      //    }
+      //
+      return null;
+    }
+
+    FunctionType redirecteeType;
+    // If the target is a constructor then we need to patch the return type of
+    // [targetFunctionType], because constructors always have return type to be
+    // "void", whereas the return type of a factory is its enclosing
+    // class. TODO(hillerstrom): It may be worthwhile to change the typing of
+    // constructors such that the return type is its enclosing class.
+    if (isConstructor) {
+      DartType returnType =
+          new InterfaceType(targetClass, typeArguments ?? const <DartType>[]);
+
+      redirecteeType = new FunctionType(
+          targetFunctionType.positionalParameters, returnType,
+          namedParameters: targetFunctionType.namedParameters,
+          typeParameters: targetFunctionType.typeParameters,
+          requiredParameterCount: targetFunctionType.requiredParameterCount);
+    } else {
+      redirecteeType = targetFunctionType;
+    }
+
+    // Substitute if necessary.
+    redirecteeType = substitution == null
+        ? redirecteeType
+        : (substitution.substituteType(redirecteeType.withoutTypeParameters)
+            as FunctionType);
+
+    return hasProblem ? null : redirecteeType;
+  }
+
+  String computeRedirecteeName(ConstructorReferenceBuilder redirectionTarget) {
+    String targetName = redirectionTarget.fullNameForErrors;
+    if (targetName == "") {
+      return redirectionTarget.target.parent.fullNameForErrors;
+    } else {
+      return targetName;
+    }
+  }
+
+  void checkRedirectingFactory(KernelRedirectingFactoryBuilder factory,
+      TypeEnvironment typeEnvironment) {
+    // The factory type cannot contain any type parameters other than those of
+    // its enclosing class, because constructors cannot specify type parameters
+    // of their own.
+    FunctionType factoryType =
+        factory.procedure.function.functionType.withoutTypeParameters;
+    FunctionType redirecteeType =
+        computeRedirecteeType(factory, typeEnvironment);
+
+    // TODO(hillerstrom): It would be preferable to know whether a failure
+    // happened during [_computeRedirecteeType].
+    if (redirecteeType == null) return;
+
+    // Check whether [redirecteeType] <: [factoryType]. In the following let
+    //     [factoryType    = (S_1, ..., S_i, {S_(i+1), ..., S_n}) -> S']
+    //     [redirecteeType = (T_1, ..., T_j, {T_(j+1), ..., T_m}) -> T'].
+
+    // Ensure that any extra parameters that [redirecteeType] might have are
+    // optional.
+    if (redirecteeType.requiredParameterCount >
+        factoryType.requiredParameterCount) {
+      addProblem(
+          templateRedirectingFactoryProvidesTooFewRequiredParameters
+              .withArguments(
+                  factory.fullNameForErrors,
+                  factoryType.requiredParameterCount,
+                  computeRedirecteeName(factory.redirectionTarget),
+                  redirecteeType.requiredParameterCount),
+          factory.charOffset,
+          noLength);
+      return;
+    }
+    if (redirecteeType.positionalParameters.length <
+        factoryType.positionalParameters.length) {
+      String targetName = computeRedirecteeName(factory.redirectionTarget);
+      addProblem(
+          templateFactoryRedirecteeHasTooFewPositionalParameters.withArguments(
+              targetName, redirecteeType.positionalParameters.length),
+          factory.redirectionTarget.charOffset,
+          noLength);
+      return;
+    }
+
+    // For each 0 < k < i check S_k <: T_k.
+    for (int i = 0; i < factoryType.positionalParameters.length; ++i) {
+      var factoryParameterType = factoryType.positionalParameters[i];
+      var redirecteeParameterType = redirecteeType.positionalParameters[i];
+      if (!typeEnvironment.isSubtypeOf(
+          factoryParameterType, redirecteeParameterType)) {
+        final factoryParameter =
+            factory.target.function.positionalParameters[i];
+        addProblem(
+            templateRedirectingFactoryInvalidPositionalParameterType
+                .withArguments(factoryParameter.name, factoryParameterType,
+                    redirecteeParameterType),
+            factoryParameter.fileOffset,
+            factoryParameter.name.length);
+        return;
+      }
+    }
+
+    // For each i < k < n check that the named parameter S_k has a corresponding
+    // named parameter T_l in [redirecteeType] for some j < l < m.
+    int factoryTypeNameIndex = 0; // k.
+    int redirecteeTypeNameIndex = 0; // l.
+
+    // The following code makes use of the invariant that [namedParameters] are
+    // already sorted (i.e. it's a monotonic sequence) to determine in a linear
+    // pass whether [factory.namedParameters] is a subset of
+    // [redirectee.namedParameters]. In the comments below the symbol <= stands
+    // for the usual lexicographic relation on strings.
+    while (factoryTypeNameIndex < factoryType.namedParameters.length) {
+      // If we have gone beyond the bound of redirectee's named parameters, then
+      // signal a missing named parameter error.
+      if (redirecteeTypeNameIndex == redirecteeType.namedParameters.length) {
+        reportRedirectingFactoryMissingNamedParameter(
+            factory, factoryType.namedParameters[factoryTypeNameIndex]);
+        break;
+      }
+
+      int result = redirecteeType.namedParameters[redirecteeTypeNameIndex].name
+          .compareTo(factoryType.namedParameters[factoryTypeNameIndex].name);
+      if (result < 0) {
+        // T_l.name <= S_k.name.
+        redirecteeTypeNameIndex++;
+      } else if (result == 0) {
+        // S_k.name <= T_l.name.
+        NamedType factoryParameterType =
+            factoryType.namedParameters[factoryTypeNameIndex];
+        NamedType redirecteeParameterType =
+            redirecteeType.namedParameters[redirecteeTypeNameIndex];
+        // Check S_k <: T_l.
+        if (!typeEnvironment.isSubtypeOf(
+            factoryParameterType.type, redirecteeParameterType.type)) {
+          var factoryFormal =
+              factory.target.function.namedParameters[redirecteeTypeNameIndex];
+          addProblem(
+              templateRedirectingFactoryInvalidNamedParameterType.withArguments(
+                  factoryParameterType.name,
+                  factoryParameterType.type,
+                  redirecteeParameterType.type),
+              factoryFormal.fileOffset,
+              factoryFormal.name.length);
+          return;
+        }
+        redirecteeTypeNameIndex++;
+        factoryTypeNameIndex++;
+      } else {
+        // S_k.name <= T_l.name. By appealing to the monotinicity of
+        // [namedParameters] and the transivity of <= it follows that for any
+        // l', such that l < l', it must be the case that S_k <= T_l'. Thus the
+        // named parameter is missing from the redirectee's parameter list.
+        reportRedirectingFactoryMissingNamedParameter(
+            factory, factoryType.namedParameters[factoryTypeNameIndex]);
+
+        // Continue with the next factory named parameter.
+        factoryTypeNameIndex++;
+      }
+    }
+
+    // Report any unprocessed factory named parameters as missing.
+    if (factoryTypeNameIndex < factoryType.namedParameters.length) {
+      for (int i = factoryTypeNameIndex;
+          i < factoryType.namedParameters.length;
+          i++) {
+        reportRedirectingFactoryMissingNamedParameter(
+            factory, factoryType.namedParameters[factoryTypeNameIndex]);
+      }
+    }
+
+    // Check that T' <: S'.
+    if (!typeEnvironment.isSubtypeOf(
+        redirecteeType.returnType, factoryType.returnType)) {
+      String targetName = computeRedirecteeName(factory.redirectionTarget);
+      addProblem(
+          templateFactoryRedirecteeInvalidReturnType.withArguments(
+              redirecteeType.returnType, targetName, factoryType.returnType),
+          factory.redirectionTarget.charOffset,
+          noLength);
+      return;
+    }
+  }
+
+  void reportRedirectingFactoryMissingNamedParameter(
+      KernelRedirectingFactoryBuilder factory, NamedType missingParameter) {
+    addProblem(
+        templateRedirectingFactoryMissingNamedParameter.withArguments(
+            computeRedirecteeName(factory.redirectionTarget),
+            missingParameter.name),
+        factory.redirectionTarget.charOffset,
+        noLength);
+  }
+
+  void checkRedirectingFactories(TypeEnvironment typeEnvironment) {
+    Map<String, MemberBuilder> constructors = this.constructors.local;
+    Iterable<String> names = constructors.keys;
+    for (String name in names) {
+      Declaration constructor = constructors[name];
+      if (constructor is KernelRedirectingFactoryBuilder) {
+        checkRedirectingFactory(constructor, typeEnvironment);
+      }
+    }
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index 9cdc301..908aa05 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -30,9 +30,10 @@
 
 import '../fasta_codes.dart'
     show
+        LocatedMessage,
         messageNoUnnamedConstructorInObject,
-        noLength,
-        templateDuplicatedName,
+        templateDuplicatedDeclaration,
+        templateDuplicatedDeclarationCause,
         templateEnumConstantSameNameAsEnclosing;
 
 import '../modifier.dart' show constMask, finalMask, staticMask;
@@ -43,6 +44,7 @@
     show
         Declaration,
         EnumBuilder,
+        EnumConstantInfo,
         FormalParameterBuilder,
         KernelClassBuilder,
         KernelConstructorBuilder,
@@ -61,7 +63,8 @@
 
 class KernelEnumBuilder extends SourceClassBuilder
     implements EnumBuilder<KernelTypeBuilder, InterfaceType> {
-  final List<Object> constantNamesAndOffsetsAndDocs;
+  @override
+  final List<EnumConstantInfo> enumConstantInfos;
 
   final KernelNamedTypeBuilder intType;
 
@@ -77,7 +80,7 @@
       Scope scope,
       Scope constructors,
       ShadowClass cls,
-      this.constantNamesAndOffsetsAndDocs,
+      this.enumConstantInfos,
       this.intType,
       this.listType,
       this.objectType,
@@ -86,17 +89,18 @@
       int startCharOffset,
       int charOffset)
       : super(metadata, 0, name, null, null, null, scope, constructors, parent,
-            null, startCharOffset, charOffset, TreeNode.noOffset, cls);
+            null, startCharOffset, charOffset, TreeNode.noOffset,
+            cls: cls);
 
   factory KernelEnumBuilder(
       MetadataCollector metadataCollector,
       List<MetadataBuilder> metadata,
       String name,
-      List<Object> constantNamesAndOffsetsAndDocs,
+      List<EnumConstantInfo> enumConstantInfos,
       KernelLibraryBuilder parent,
       int charOffset,
       int charEndOffset) {
-    constantNamesAndOffsetsAndDocs ??= const <Object>[];
+    assert(enumConstantInfos == null || enumConstantInfos.isNotEmpty);
     // TODO(ahe): These types shouldn't be looked up in scope, they come
     // directly from dart:core.
     KernelTypeBuilder intType = new KernelNamedTypeBuilder("int", null);
@@ -161,38 +165,47 @@
         charEndOffset);
     members["toString"] = toStringBuilder;
     String className = name;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
-      List<MetadataBuilder> metadata = constantNamesAndOffsetsAndDocs[i];
-      String name = constantNamesAndOffsetsAndDocs[i + 1];
-      int charOffset = constantNamesAndOffsetsAndDocs[i + 2];
-      String documentationComment = constantNamesAndOffsetsAndDocs[i + 3];
-      if (members.containsKey(name)) {
-        parent.addProblem(templateDuplicatedName.withArguments(name),
-            charOffset, noLength, parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 1] = null;
-        continue;
-      }
-      if (name == className) {
-        parent.addProblem(
-            templateEnumConstantSameNameAsEnclosing.withArguments(name),
+    if (enumConstantInfos != null) {
+      for (int i = 0; i < enumConstantInfos.length; i++) {
+        EnumConstantInfo enumConstantInfo = enumConstantInfos[i];
+        List<MetadataBuilder> metadata = enumConstantInfo.metadata;
+        String name = enumConstantInfo.name;
+        int charOffset = enumConstantInfo.charOffset;
+        String documentationComment = enumConstantInfo.documentationComment;
+        MemberBuilder existing = members[name];
+        if (existing != null) {
+          List<LocatedMessage> context = existing.isSynthetic
+              ? null
+              : <LocatedMessage>[
+                  templateDuplicatedDeclarationCause
+                      .withArguments(name)
+                      .withLocation(
+                          parent.fileUri, existing.charOffset, name.length)
+                ];
+          parent.addProblem(templateDuplicatedDeclaration.withArguments(name),
+              charOffset, name.length, parent.fileUri,
+              context: context);
+          enumConstantInfos[i] = null;
+        } else if (name == className) {
+          parent.addProblem(
+              templateEnumConstantSameNameAsEnclosing.withArguments(name),
+              charOffset,
+              name.length,
+              parent.fileUri);
+        }
+        KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(
+            metadata,
+            selfType,
+            name,
+            constMask | staticMask,
+            parent,
             charOffset,
-            noLength,
-            parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 1] = null;
-        continue;
+            null,
+            true);
+        metadataCollector?.setDocumentationComment(
+            fieldBuilder.target, documentationComment);
+        members[name] = fieldBuilder..next = existing;
       }
-      KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(
-          metadata,
-          selfType,
-          name,
-          constMask | staticMask,
-          parent,
-          charOffset,
-          null,
-          true);
-      metadataCollector?.setDocumentationComment(
-          fieldBuilder.target, documentationComment);
-      members[name] = fieldBuilder;
     }
     final int startCharOffset =
         metadata == null ? charOffset : metadata.first.charOffset;
@@ -204,7 +217,7 @@
         new Scope(constructors, null, null, "constructors",
             isModifiable: false),
         cls,
-        constantNamesAndOffsetsAndDocs,
+        enumConstantInfos,
         intType,
         listType,
         objectType,
@@ -212,10 +225,11 @@
         parent,
         startCharOffset,
         charOffset);
-    // TODO(sigmund): dynamic should be `covariant MemberBuilder`.
-    void setParent(String name, dynamic b) {
-      MemberBuilder builder = b;
-      builder.parent = enumBuilder;
+    void setParent(String name, MemberBuilder builder) {
+      do {
+        builder.parent = enumBuilder;
+        builder = builder.next;
+      } while (builder != null);
     }
 
     members.forEach(setParent);
@@ -242,22 +256,26 @@
         coreLibrary.scope, charOffset, fileUri, libraryBuilder);
     listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
-    KernelFieldBuilder indexFieldBuilder = this["index"];
+    KernelFieldBuilder indexFieldBuilder = firstMemberNamed("index");
     Field indexField = indexFieldBuilder.build(libraryBuilder);
-    KernelFieldBuilder nameFieldBuilder = this["_name"];
+    KernelFieldBuilder nameFieldBuilder = firstMemberNamed("_name");
     Field nameField = nameFieldBuilder.build(libraryBuilder);
-    KernelProcedureBuilder toStringBuilder = this["toString"];
+    KernelProcedureBuilder toStringBuilder = firstMemberNamed("toString");
     toStringBuilder.body = new ReturnStatement(
         new DirectPropertyGet(new ThisExpression(), nameField));
     List<Expression> values = <Expression>[];
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
-      String name = constantNamesAndOffsetsAndDocs[i + 1];
-      if (name != null) {
-        KernelFieldBuilder builder = this[name];
-        values.add(new StaticGet(builder.build(libraryBuilder)));
+    if (enumConstantInfos != null) {
+      for (EnumConstantInfo enumConstantInfo in enumConstantInfos) {
+        if (enumConstantInfo != null) {
+          Declaration declaration = firstMemberNamed(enumConstantInfo.name);
+          if (declaration.isField) {
+            KernelFieldBuilder field = declaration;
+            values.add(new StaticGet(field.build(libraryBuilder)));
+          }
+        }
       }
     }
-    KernelFieldBuilder valuesBuilder = this["values"];
+    KernelFieldBuilder valuesBuilder = firstMemberNamed("values");
     valuesBuilder.build(libraryBuilder);
     valuesBuilder.initializer =
         new ListLiteral(values, typeArgument: cls.rawType, isConst: true);
@@ -281,24 +299,32 @@
       // unnamed constructor requires no arguments. But that information isn't
       // always available at this point, and it's not really a situation that
       // can happen unless you start modifying the SDK sources.
-      addProblem(messageNoUnnamedConstructorInObject, -1, noLength);
+      library.addProblem(messageNoUnnamedConstructorInObject,
+          objectClass.charOffset, objectClass.name.length, objectClass.fileUri);
     } else {
       constructor.initializers.add(
           new SuperInitializer(superConstructor.target, new Arguments.empty())
             ..parent = constructor);
     }
     int index = 0;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
-      String constant = constantNamesAndOffsetsAndDocs[i + 1];
-      if (constant != null) {
-        KernelFieldBuilder field = this[constant];
-        field.build(libraryBuilder);
-        Arguments arguments = new Arguments(<Expression>[
-          new IntLiteral(index++),
-          new StringLiteral("$name.$constant")
-        ]);
-        field.initializer =
-            new ConstructorInvocation(constructor, arguments, isConst: true);
+    if (enumConstantInfos != null) {
+      for (EnumConstantInfo enumConstantInfo in enumConstantInfos) {
+        if (enumConstantInfo != null) {
+          String constant = enumConstantInfo.name;
+          Declaration declaration = firstMemberNamed(constant);
+          KernelFieldBuilder field;
+          if (declaration.isField) {
+            field = declaration;
+          } else {
+            continue;
+          }
+          Arguments arguments = new Arguments(<Expression>[
+            new IntLiteral(index++),
+            new StringLiteral("$name.$constant")
+          ]);
+          field.initializer =
+              new ConstructorInvocation(constructor, arguments, isConst: true);
+        }
       }
     }
     return super.build(libraryBuilder, coreLibrary);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 403b63e..b7ac953 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -31,6 +31,8 @@
 
 import '../problems.dart' show unhandled, unsupported;
 
+import '../scope.dart' show AmbiguousBuilder;
+
 import 'body_builder.dart' show noLocation;
 
 import 'constness.dart' show Constness;
@@ -45,7 +47,7 @@
         ExpressionGenerator,
         Generator,
         IndexedAccessGenerator,
-        LargeIntAccessGenerator,
+        IntAccessGenerator,
         LoadLibraryGenerator,
         NullAwarePropertyAccessGenerator,
         PrefixUseGenerator,
@@ -1296,7 +1298,7 @@
     if (declaration is KernelClassBuilder) {
       KernelClassBuilder declaration = this.declaration;
       Declaration member = declaration.findStaticBuilder(
-          name.name, offsetForToken(token), uri, helper.library);
+          name.name, offsetForToken(send.token), uri, helper.library);
 
       Generator generator;
       if (member == null) {
@@ -1314,6 +1316,9 @@
               token.charOffset,
               Constness.implicit);
         }
+      } else if (member is AmbiguousBuilder) {
+        return helper.buildProblem(
+            member.message, member.charOffset, name.name.length);
       } else {
         Declaration setter;
         if (member.isSetter) {
@@ -1390,9 +1395,8 @@
   }
 }
 
-class KernelLargeIntAccessGenerator extends KernelGenerator
-    with LargeIntAccessGenerator {
-  KernelLargeIntAccessGenerator(ExpressionGeneratorHelper helper, Token token)
+class KernelIntAccessGenerator extends KernelGenerator with IntAccessGenerator {
+  KernelIntAccessGenerator(ExpressionGeneratorHelper helper, Token token)
       : super(helper, token);
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 37562af..cae832e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -62,7 +62,11 @@
 import '../loader.dart' show Loader;
 
 import '../modifier.dart'
-    show abstractMask, namedMixinApplicationMask, staticMask;
+    show
+        abstractMask,
+        mixinDeclarationMask,
+        namedMixinApplicationMask,
+        staticMask;
 
 import '../problems.dart' show unexpected, unhandled;
 
@@ -79,6 +83,7 @@
         ConstructorReferenceBuilder,
         Declaration,
         DynamicTypeBuilder,
+        EnumConstantInfo,
         FormalParameterBuilder,
         InvalidTypeBuilder,
         KernelClassBuilder,
@@ -216,6 +221,11 @@
     // library scope.
     Scope constructorScope = new Scope(constructors, null, null, "constructors",
         isModifiable: false);
+    bool isMixinDeclaration = false;
+    if (modifiers & mixinDeclarationMask != 0) {
+      isMixinDeclaration = true;
+      modifiers = (modifiers & ~mixinDeclarationMask) | abstractMask;
+    }
     ClassBuilder cls = new SourceClassBuilder(
         metadata,
         modifiers,
@@ -230,7 +240,8 @@
         new List<ConstructorReferenceBuilder>.from(constructorReferences),
         startCharOffset,
         charOffset,
-        charEndOffset);
+        charEndOffset,
+        isMixinDeclaration: isMixinDeclaration);
     loader.target.metadataCollector
         ?.setDocumentationComment(cls.target, documentationComment);
 
@@ -470,8 +481,7 @@
             startCharOffset,
             charOffset,
             TreeNode.noOffset,
-            null,
-            mixin);
+            mixedInType: mixin);
         if (isNamedMixinApplication) {
           loader.target.metadataCollector?.setDocumentationComment(
               application.target, documentationComment);
@@ -691,22 +701,17 @@
     }
   }
 
+  @override
   void addEnum(
       String documentationComment,
       List<MetadataBuilder> metadata,
       String name,
-      List<Object> constantNamesAndOffsets,
+      List<EnumConstantInfo> enumConstantInfos,
       int charOffset,
       int charEndOffset) {
     MetadataCollector metadataCollector = loader.target.metadataCollector;
-    KernelEnumBuilder builder = new KernelEnumBuilder(
-        metadataCollector,
-        metadata,
-        name,
-        constantNamesAndOffsets,
-        this,
-        charOffset,
-        charEndOffset);
+    KernelEnumBuilder builder = new KernelEnumBuilder(metadataCollector,
+        metadata, name, enumConstantInfos, this, charOffset, charEndOffset);
     addBuilder(name, builder, charOffset);
     metadataCollector?.setDocumentationComment(
         builder.target, documentationComment);
@@ -796,11 +801,24 @@
       return;
     }
     if (cls != null) {
+      if (declaration.next != null) {
+        int count = 0;
+        Declaration current = declaration.next;
+        while (current != null) {
+          count++;
+          current = current.next;
+        }
+        cls.name += "#$count";
+      }
       library.addClass(cls);
     } else if (member != null) {
-      library.addMember(member);
+      if (declaration.next == null) {
+        library.addMember(member);
+      }
     } else if (typedef != null) {
-      library.addTypedef(typedef);
+      if (declaration.next == null) {
+        library.addTypedef(typedef);
+      }
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
index 95d3634..5356ee7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
@@ -27,7 +27,8 @@
 
   KernelMixinApplicationBuilder(
       KernelTypeBuilder supertype, List<KernelTypeBuilder> mixins)
-      : super(supertype, mixins);
+      : assert(mixins != null),
+        super(supertype, mixins);
 
   @override
   InterfaceType build(LibraryBuilder library) {
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 5daa713..bf3f19e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -69,6 +69,8 @@
 
 import '../severity.dart' show Severity;
 
+import '../scope.dart' show AmbiguousBuilder;
+
 import '../source/source_class_builder.dart' show SourceClassBuilder;
 
 import '../source/source_loader.dart' show SourceLoader;
@@ -261,6 +263,7 @@
           loader.checkSupertypes(myClasses);
           loader.checkOverrides(myClasses);
           loader.checkAbstractMembers(myClasses);
+          loader.checkRedirectingFactories(myClasses);
           loader.addNoSuchMethodForwarders(myClasses);
           return component;
         },
@@ -404,6 +407,10 @@
       // TODO(sigmund): do only for full program
       Declaration declaration =
           loader.first.exportScope.lookup("main", -1, null);
+      if (declaration is AmbiguousBuilder) {
+        AmbiguousBuilder problem = declaration;
+        declaration = problem.getFirstDeclaration();
+      }
       if (declaration is KernelProcedureBuilder) {
         component.mainMethod = declaration.procedure;
       } else if (declaration is DillMemberBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index 239709c..30686ba 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -9,7 +9,15 @@
 import 'package:kernel/clone.dart' show CloneVisitor;
 
 import 'package:kernel/ast.dart'
-    show Library, Component, Procedure, Class, TypeParameter, Supertype;
+    show
+        DartType,
+        Library,
+        Component,
+        Procedure,
+        Class,
+        TypeParameter,
+        TypeParameterType,
+        Supertype;
 
 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
 
@@ -70,9 +78,18 @@
   if (procedure.parent is Class) {
     Class realClass = procedure.parent;
 
-    CloneVisitor cloner = new CloneVisitor();
-
     Class fakeClass = new Class(name: kDebugClassName);
+    Map<TypeParameter, TypeParameter> typeParams =
+        <TypeParameter, TypeParameter>{};
+    Map<TypeParameter, DartType> typeSubstitution = <TypeParameter, DartType>{};
+    for (TypeParameter typeParam in realClass.typeParameters) {
+      var newNode = new TypeParameter(typeParam.name);
+      typeParams[typeParam] = newNode;
+      typeSubstitution[typeParam] = new TypeParameterType(newNode);
+    }
+    CloneVisitor cloner = new CloneVisitor(
+        typeSubstitution: typeSubstitution, typeParams: typeParams);
+
     for (TypeParameter typeParam in realClass.typeParameters) {
       fakeClass.typeParameters.add(typeParam.accept(cloner));
     }
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 4c4cb84..52f7017 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -32,6 +32,10 @@
 
 const int namedMixinApplicationMask = staticMask << 1;
 
+/// Not a modifier, used for mixins declared explicitly by using the `mixin`
+/// keyword.
+const int mixinDeclarationMask = namedMixinApplicationMask << 1;
+
 /// Not a real modifier, and by setting it to zero, it is automatically ignored
 /// by [Modifier.validate] below.
 const int varMask = 0;
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index bb2982e..760424c 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -488,7 +488,7 @@
       reportRecoverableError(next, fasta.messageTopLevelOperator);
       // Insert a synthetic identifier
       // and continue parsing as a top level function.
-      rewriter.insertTokenAfter(
+      rewriter.insertToken(
           next,
           new SyntheticStringToken(
               TokenType.IDENTIFIER,
@@ -1099,7 +1099,7 @@
           withKeyword, fasta.templateExpectedButGot.withArguments('with'));
       withKeyword =
           new SyntheticKeywordToken(Keyword.WITH, withKeyword.charOffset);
-      rewriter.insertTokenAfter(token, withKeyword);
+      rewriter.insertToken(token, withKeyword);
       if (!isValidTypeReference(withKeyword.next)) {
         rewriter.insertSyntheticIdentifier(withKeyword);
       }
@@ -1203,7 +1203,7 @@
               next.next.kind == IDENTIFIER_TOKEN) {
             // Looks like a missing comma
             Token comma = new SyntheticToken(TokenType.COMMA, next.charOffset);
-            token = rewriter.insertTokenAfter(token, comma).next;
+            token = rewriter.insertToken(token, comma);
             continue;
           } else {
             token = ensureCloseParen(token, begin);
@@ -1324,10 +1324,9 @@
       if (!optional('.', next)) {
         // Recover from a missing period by inserting one.
         next = rewriteAndRecover(
-                token,
-                fasta.templateExpectedButGot.withArguments('.'),
-                new SyntheticToken(TokenType.PERIOD, next.charOffset))
-            .next;
+            token,
+            fasta.templateExpectedButGot.withArguments('.'),
+            new SyntheticToken(TokenType.PERIOD, next.charOffset));
       }
       periodAfterThis = token = next;
       next = token.next;
@@ -1476,7 +1475,7 @@
       token = next;
     }
     if (parameterCount == 0) {
-      token = rewriteAndRecover(
+      rewriteAndRecover(
           token,
           fasta.messageEmptyOptionalParameterList,
           new SyntheticStringToken(
@@ -1527,7 +1526,7 @@
       token = next;
     }
     if (parameterCount == 0) {
-      token = rewriteAndRecover(
+      rewriteAndRecover(
           token,
           fasta.messageEmptyNamedParameterList,
           new SyntheticStringToken(
@@ -1971,10 +1970,8 @@
         if (!errorReported) {
           reportRecoverableErrorWithToken(next, fasta.templateExpectedString);
         }
-        next = rewriter
-            .insertTokenAfter(token,
-                new SyntheticStringToken(TokenType.STRING, '', next.charOffset))
-            .next;
+        next = rewriter.insertToken(token,
+            new SyntheticStringToken(TokenType.STRING, '', next.charOffset));
       }
     }
     listener.handleStringPart(next);
@@ -2114,7 +2111,7 @@
               token = next;
               next = token.next;
               if (optional('(', next.next)) {
-                rewriter.insertTokenAfter(
+                rewriter.insertToken(
                     next,
                     new SyntheticStringToken(
                         TokenType.IDENTIFIER,
@@ -2423,33 +2420,48 @@
         // `this.<fieldname>=` is expected.
         reportRecoverableError(
             next, fasta.templateExpectedButGot.withArguments('.'));
-        rewriter.insertTokenAfter(
+        rewriter.insertToken(
             token, new SyntheticToken(TokenType.PERIOD, next.offset));
         token = rewriter.insertSyntheticIdentifier(token.next);
         next = token.next;
       }
       // Fall through to recovery
     } else if (next.isIdentifier) {
-      if (optional('=', next.next)) {
+      Token next2 = next.next;
+      if (optional('=', next2)) {
         return parseInitializerExpressionRest(token);
       }
-      // Fall through to recovery
+      // Recovery: If this looks like an expression,
+      // then fall through to insert the LHS and `=` of the assignment,
+      // otherwise insert an `=` and synthetic identifier.
+      if (!next2.isOperator && !optional('.', next2)) {
+        token = rewriter.insertToken(
+            next, new SyntheticToken(TokenType.EQ, next2.offset));
+        token = insertSyntheticIdentifier(token, IdentifierContext.expression,
+            message: fasta.messageMissingAssignmentInInitializer,
+            messageOnToken: next);
+        return parseInitializerExpressionRest(beforeExpression);
+      }
     } else {
-      // Recovery
-      insertSyntheticIdentifier(token, IdentifierContext.fieldInitializer,
+      // Recovery: Insert a synthetic assignment.
+      token = insertSyntheticIdentifier(
+          token, IdentifierContext.fieldInitializer,
           message: fasta.messageExpectedAnInitializer, messageOnToken: token);
+      token = rewriter.insertToken(
+          token, new SyntheticToken(TokenType.EQ, token.offset));
+      token = rewriter.insertSyntheticIdentifier(token);
       return parseInitializerExpressionRest(beforeExpression);
     }
-    // Recovery
-    // Insert a sythetic assignment to ensure that the expression is indeed
-    // an assignment. Failing to do so causes this test to fail:
+    // Recovery:
+    // Insert a synthetic identifier and assignment operator
+    // to ensure that the expression is indeed an assignment.
+    // Failing to do so causes this test to fail:
     // pkg/front_end/testcases/regress/issue_31192.dart
     // TODO(danrubel): Investigate better recovery.
     token = insertSyntheticIdentifier(
         beforeExpression, IdentifierContext.fieldInitializer,
         message: fasta.messageMissingAssignmentInInitializer);
-    rewriter.insertTokenAfter(
-        token, new SyntheticToken(TokenType.EQ, token.offset));
+    rewriter.insertToken(token, new SyntheticToken(TokenType.EQ, token.offset));
     return parseInitializerExpressionRest(beforeExpression);
   }
 
@@ -2516,11 +2528,12 @@
 
   Token insertBlock(Token token) {
     Token next = token.next;
-    Token replacement = link(
-        new SyntheticBeginToken(TokenType.OPEN_CURLY_BRACKET, next.offset),
+    BeginToken beginGroup = rewriter.insertToken(token,
+        new SyntheticBeginToken(TokenType.OPEN_CURLY_BRACKET, next.offset));
+    Token endGroup = rewriter.insertToken(beginGroup,
         new SyntheticToken(TokenType.CLOSE_CURLY_BRACKET, next.offset));
-    rewriter.insertTokenAfter(token, replacement);
-    return replacement;
+    beginGroup.endGroup = endGroup;
+    return beginGroup;
   }
 
   /// If the next token is a closing parenthesis, return it.
@@ -2554,7 +2567,7 @@
     if (optional(':', next)) return next;
     Message message = fasta.templateExpectedButGot.withArguments(':');
     Token newToken = new SyntheticToken(TokenType.COLON, next.charOffset);
-    return rewriteAndRecover(token, message, newToken).next;
+    return rewriteAndRecover(token, message, newToken);
   }
 
   /// If the token after [token] is a not literal string,
@@ -2592,11 +2605,10 @@
   }
 
   /// Report an error at the token after [token] that has the given [message].
-  /// Insert the [newToken] after [token] and return [token].
+  /// Insert the [newToken] after [token] and return [newToken].
   Token rewriteAndRecover(Token token, Message message, Token newToken) {
     reportRecoverableError(token.next, message);
-    rewriter.insertTokenAfter(token, newToken);
-    return token;
+    return rewriter.insertToken(token, newToken);
   }
 
   /// Replace the token after [token] with `[` followed by `]`
@@ -3289,10 +3301,8 @@
       // If `return` used instead of `=>`, then report an error and continue
       if (optional('return', next)) {
         reportRecoverableError(next, fasta.messageExpectedBody);
-        next = rewriter
-            .insertTokenAfter(next,
-                new SyntheticToken(TokenType.FUNCTION, next.next.charOffset))
-            .next;
+        next = rewriter.insertToken(
+            next, new SyntheticToken(TokenType.FUNCTION, next.next.charOffset));
         return parseExpressionFunctionBody(next, ofFunctionExpression);
       }
       // If there is a stray simple identifier in the function expression
@@ -4126,10 +4136,9 @@
         // This looks like the start of an expression.
         // Report an error, insert the comma, and continue parsing.
         next = rewriteAndRecover(
-                token,
-                fasta.templateExpectedButGot.withArguments(','),
-                new SyntheticToken(TokenType.COMMA, next.offset))
-            .next;
+            token,
+            fasta.templateExpectedButGot.withArguments(','),
+            new SyntheticToken(TokenType.COMMA, next.offset));
       }
       token = next;
     }
@@ -4174,10 +4183,9 @@
           // If this looks like the start of an expression,
           // then report an error, insert the comma, and continue parsing.
           next = rewriteAndRecover(
-                  token,
-                  fasta.templateExpectedButGot.withArguments(','),
-                  new SyntheticToken(TokenType.COMMA, next.offset))
-              .next;
+              token,
+              fasta.templateExpectedButGot.withArguments(','),
+              new SyntheticToken(TokenType.COMMA, next.offset));
         } else {
           reportRecoverableError(
               next, fasta.templateExpectedButGot.withArguments('}'));
@@ -4242,7 +4250,7 @@
       // TODO(danrubel): Improve this error message.
       reportRecoverableError(
           next, fasta.templateExpectedButGot.withArguments('['));
-      rewriter.insertTokenAfter(
+      rewriter.insertToken(
           token, new SyntheticToken(TokenType.INDEX, next.charOffset));
     }
     return parseLiteralListSuffix(token, constKeyword);
@@ -4607,10 +4615,9 @@
           // If this looks like the start of an expression,
           // then report an error, insert the comma, and continue parsing.
           next = rewriteAndRecover(
-                  token,
-                  fasta.templateExpectedButGot.withArguments(','),
-                  new SyntheticToken(TokenType.COMMA, next.offset))
-              .next;
+              token,
+              fasta.templateExpectedButGot.withArguments(','),
+              new SyntheticToken(TokenType.COMMA, next.offset));
         } else {
           token = ensureCloseParen(token, begin);
           break;
@@ -5150,10 +5157,8 @@
     if (!optional('while', whileToken)) {
       reportRecoverableError(
           whileToken, fasta.templateExpectedButGot.withArguments('while'));
-      whileToken = rewriter
-          .insertTokenAfter(token,
-              new SyntheticKeywordToken(Keyword.WHILE, whileToken.charOffset))
-          .next;
+      whileToken = rewriter.insertToken(token,
+          new SyntheticKeywordToken(Keyword.WHILE, whileToken.charOffset));
     }
     token = parseParenthesizedCondition(whileToken);
     token = ensureSemicolon(token);
@@ -5238,7 +5243,7 @@
       // checking the next token as we are doing here.
       reportRecoverableError(
           throwToken.next, fasta.messageMissingExpressionInThrow);
-      rewriter.insertTokenAfter(
+      rewriter.insertToken(
           throwToken,
           new SyntheticStringToken(
               TokenType.STRING, '""', throwToken.next.charOffset, 0));
@@ -5708,7 +5713,7 @@
       next = next.next;
     } else {
       reportRecoverableError(next, fasta.messageMissingOperatorKeyword);
-      rewriter.insertTokenAfter(
+      rewriter.insertToken(
           beforeName, new SyntheticToken(Keyword.OPERATOR, next.offset));
     }
 
@@ -5803,7 +5808,7 @@
     reportRecoverableError(next, fasta.messageStackOverflow);
 
     next = new SyntheticToken(TokenType.SEMICOLON, token.offset);
-    rewriter.insertTokenAfter(token, next);
+    rewriter.insertToken(token, next);
     listener.handleEmptyStatement(next);
 
     while (notEofOrValue('}', next)) {
@@ -5814,22 +5819,22 @@
   }
 
   void reportRecoverableError(Token token, Message message) {
+    // Find a non-synthetic token on which to report the error.
+    token = findNonZeroLengthToken(token);
     if (token is ErrorToken) {
       reportErrorToken(token);
     } else {
-      // Find a non-synthetic token on which to report the error.
-      token = findNonZeroLengthToken(token);
       listener.handleRecoverableError(message, token, token);
     }
   }
 
   void reportRecoverableErrorWithToken(
       Token token, Template<_MessageWithArgument<Token>> template) {
+    // Find a non-synthetic token on which to report the error.
+    token = findNonZeroLengthToken(token);
     if (token is ErrorToken) {
       reportErrorToken(token);
     } else {
-      // Find a non-synthetic token on which to report the error.
-      token = findNonZeroLengthToken(token);
       listener.handleRecoverableError(
           template.withArguments(token), token, token);
     }
diff --git a/pkg/front_end/lib/src/fasta/parser/token_stream_rewriter.dart b/pkg/front_end/lib/src/fasta/parser/token_stream_rewriter.dart
index cc01a67..86170d4 100644
--- a/pkg/front_end/lib/src/fasta/parser/token_stream_rewriter.dart
+++ b/pkg/front_end/lib/src/fasta/parser/token_stream_rewriter.dart
@@ -80,18 +80,6 @@
     return newToken;
   }
 
-  /// Insert the chain of tokens starting at the [insertedToken] immediately
-  /// after the [previousToken]. Return the [previousToken].
-  Token insertTokenAfter(Token previousToken, Token insertedToken) {
-    Token afterToken = previousToken.next;
-    previousToken.setNext(insertedToken);
-
-    Token lastReplacement = _lastTokenInChain(insertedToken);
-    lastReplacement.setNext(afterToken);
-
-    return previousToken;
-  }
-
   /// Move [endGroup] (a synthetic `)`, `]`, or `}` token) and associated
   /// error token after [token] in the token stream and return [endGroup].
   Token moveSynthetic(Token token, Token endGroup) {
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index a03b174..a8d2025 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -12,7 +12,7 @@
         Message,
         messageInternalProblemExtendingUnmodifiableScope,
         templateAccessError,
-        templateDuplicatedName,
+        templateDuplicatedDeclarationUse,
         templateDuplicatedNamePreviouslyUsedCause;
 
 import 'problems.dart' show internalProblem, unsupported;
@@ -351,5 +351,15 @@
 
   Declaration get parent => null;
 
-  Message get message => templateDuplicatedName.withArguments(name);
+  Message get message => templateDuplicatedDeclarationUse.withArguments(name);
+
+  // TODO(ahe): Also provide context.
+
+  Declaration getFirstDeclaration() {
+    Declaration declaration = builder;
+    while (declaration.next != null) {
+      declaration = declaration.next;
+    }
+    return declaration;
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 763fce3..facfdae 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -27,13 +27,12 @@
 
 import '../crash.dart' show Crash;
 
-import '../deprecated_problems.dart'
-    show deprecated_InputError, deprecated_inputError;
+import '../deprecated_problems.dart' show deprecated_InputError;
 
 import '../fasta_codes.dart'
     show
-        LocatedMessage,
         Code,
+        LocatedMessage,
         Message,
         messageExpectedBlockToSkip,
         templateInternalProblemNotFound;
@@ -56,7 +55,8 @@
 
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
-import 'stack_listener.dart' show NullValue, StackListener;
+import 'stack_listener.dart'
+    show FixedNullableList, NullValue, ParserRecovery, StackListener;
 
 import '../quote.dart' show unescapeString;
 
@@ -78,6 +78,8 @@
 
   ClassBuilder currentClass;
 
+  bool currentClassIsParserRecovery = false;
+
   /// For top-level declarations, this is the library scope. For class members,
   /// this is the instance scope of [currentClass].
   Scope memberScope;
@@ -95,18 +97,15 @@
         stringExpectedAfterNative =
             library.loader.target.backendTarget.nativeExtensionExpectsString;
 
-  void discard(int n) {
-    for (int i = 0; i < n; i++) {
-      pop();
-    }
-  }
-
   @override
   void endMetadataStar(int count) {
     debugEvent("MetadataStar");
-    push(popList(count, new List<Token>.filled(count, null, growable: true))
-            ?.first ??
-        NullValue.Metadata);
+    if (count > 0) {
+      discard(count - 1);
+      push(pop(NullValue.Metadata));
+    } else {
+      push(NullValue.Metadata);
+    }
   }
 
   @override
@@ -232,8 +231,10 @@
     debugEvent("FunctionTypeAlias");
 
     if (equals == null) pop(); // endToken
-    String name = pop();
+    Object name = pop();
     Token metadata = pop();
+    checkEmpty(typedefKeyword.charOffset);
+    if (name is ParserRecovery) return;
 
     Declaration typedefBuilder = lookupBuilder(typedefKeyword, null, name);
     parseMetadata(typedefBuilder, metadata, typedefBuilder.target);
@@ -289,9 +290,11 @@
   void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     debugEvent("TopLevelMethod");
     Token bodyToken = pop();
-    String name = pop();
+    Object name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery) return;
+
     final StackListener listener =
         createFunctionListener(lookupBuilder(beginToken, getOrSet, name));
     buildFunctionBody(listener, bodyToken, metadata, MemberKind.TopLevelMethod);
@@ -327,10 +330,16 @@
   @override
   void handleQualified(Token period) {
     debugEvent("handleQualified");
-    String suffix = pop();
-    var prefix = pop();
-    assert(identical(suffix, period.next.lexeme));
-    push(new QualifiedName(prefix, period.next));
+    Object suffix = pop();
+    Object prefix = pop();
+    if (prefix is ParserRecovery) {
+      push(prefix);
+    } else if (suffix is ParserRecovery) {
+      push(suffix);
+    } else {
+      assert(identical(suffix, period.next.lexeme));
+      push(new QualifiedName(prefix, period.next));
+    }
   }
 
   @override
@@ -430,9 +439,11 @@
   @override
   void endImport(Token importKeyword, Token semicolon) {
     debugEvent("Import");
-    pop(NullValue.Prefix);
+    Object name = pop(NullValue.Prefix);
 
     Token metadata = pop();
+    checkEmpty(importKeyword.charOffset);
+    if (name is ParserRecovery) return;
 
     // Native imports must be skipped because they aren't assigned corresponding
     // LibraryDependency nodes.
@@ -504,6 +515,7 @@
     Object name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery || currentClassIsParserRecovery) return;
 
     ProcedureBuilder builder = lookupConstructor(beginToken, name);
     if (bodyToken == null || optional("=", bodyToken.endGroup.next)) {
@@ -552,6 +564,7 @@
     Object name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery || currentClassIsParserRecovery) return;
     ProcedureBuilder builder;
     if (name is QualifiedName ||
         (getOrSet == null && name == currentClass.name)) {
@@ -610,16 +623,14 @@
     final StackListener listener = createFunctionListener(builder);
     try {
       Parser parser = new Parser(listener);
-
       if (metadata != null) {
         parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
-        listener.pop();
+        listener.pop(); // Pops metadata constants.
       }
 
       token = parser.parseFormalParametersOpt(
           parser.syntheticPreviousToken(token), MemberKind.Factory);
-
-      listener.pop();
+      listener.pop(); // Pops formal parameters.
       listener.checkEmpty(token.next.charOffset);
     } on DebugAbort {
       rethrow;
@@ -631,10 +642,12 @@
   }
 
   void buildFields(int count, Token token, bool isTopLevel) {
-    List<String> names =
-        popList(count, new List<String>.filled(count, null, growable: true));
-    Declaration declaration = lookupBuilder(token, null, names.first);
+    List<String> names = const FixedNullableList<String>().pop(stack, count);
     Token metadata = pop();
+    checkEmpty(token.charOffset);
+    if (names == null || currentClassIsParserRecovery) return;
+
+    Declaration declaration = lookupBuilder(token, null, names.first);
     // TODO(paulberry): don't re-parse the field if we've already parsed it
     // for type inference.
     parseFields(
@@ -642,6 +655,7 @@
         token,
         metadata,
         isTopLevel);
+    checkEmpty(token.charOffset);
   }
 
   @override
@@ -664,14 +678,31 @@
   }
 
   @override
+  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+    debugEvent("beginMixinDeclaration");
+    push(mixinKeyword);
+  }
+
+  @override
+  void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
+    debugEvent("beginClassDeclaration");
+    push(begin);
+  }
+
+  @override
   void beginClassOrMixinBody(Token token) {
-    debugEvent("beginClassBody");
-    String name = pop();
+    debugEvent("beginClassOrMixinBody");
+    Token beginToken = pop();
+    Object name = pop();
     Token metadata = pop();
     assert(currentClass == null);
     assert(memberScope == library.scope);
+    if (name is ParserRecovery) {
+      currentClassIsParserRecovery = true;
+      return;
+    }
 
-    Declaration classBuilder = lookupBuilder(token, null, name);
+    Declaration classBuilder = lookupBuilder(beginToken, null, name);
     parseMetadata(classBuilder, metadata, classBuilder.target);
 
     currentClass = classBuilder;
@@ -682,6 +713,7 @@
   void endClassOrMixinBody(int memberCount, Token beginToken, Token endToken) {
     debugEvent("ClassOrMixinBody");
     currentClass = null;
+    currentClassIsParserRecovery = false;
     memberScope = library.scope;
   }
 
@@ -700,21 +732,23 @@
   @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     debugEvent("Enum");
-
-    List metadataAndValues = new List.filled(count * 2, null, growable: true);
-    popList(count * 2, metadataAndValues);
-
-    String name = pop();
+    List<Object> metadataAndValues =
+        const FixedNullableList<Object>().pop(stack, count * 2);
+    Object name = pop();
     Token metadata = pop();
+    checkEmpty(enumKeyword.charOffset);
+    if (name is ParserRecovery) return;
 
     ClassBuilder enumBuilder = lookupBuilder(enumKeyword, null, name);
     parseMetadata(enumBuilder, metadata, enumBuilder.target);
-    for (int i = 0; i < metadataAndValues.length; i += 2) {
-      Token metadata = metadataAndValues[i];
-      String valueName = metadataAndValues[i + 1];
-      Declaration declaration = enumBuilder.scope.local[valueName];
-      if (metadata != null) {
-        parseMetadata(declaration, metadata, declaration.target);
+    if (metadataAndValues != null) {
+      for (int i = 0; i < metadataAndValues.length; i += 2) {
+        Token metadata = metadataAndValues[i];
+        String valueName = metadataAndValues[i + 1];
+        Declaration declaration = enumBuilder.scope.local[valueName];
+        if (metadata != null) {
+          parseMetadata(declaration, metadata, declaration.target);
+        }
       }
     }
 
@@ -726,13 +760,20 @@
       Token equals, Token implementsKeyword, Token endToken) {
     debugEvent("NamedMixinApplication");
 
-    String name = pop();
+    Object name = pop();
     Token metadata = pop();
-
-    Declaration classBuilder = lookupBuilder(classKeyword, null, name);
-    parseMetadata(classBuilder, metadata, classBuilder.target);
-
     checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery) return;
+
+    Declaration classBuilder = library.scopeBuilder[name];
+    if (classBuilder != null) {
+      // TODO(ahe): We shouldn't have to check for null here. The problem is
+      // that we don't create a named mixin application if the mixins or
+      // supertype are missing. Could we create a class instead? The nested
+      // declarations wouldn't match up.
+      parseMetadata(classBuilder, metadata, classBuilder.target);
+      checkEmpty(beginToken.charOffset);
+    }
   }
 
   AsyncMarker getAsyncMarker(StackListener listener) => listener.pop();
@@ -827,6 +868,7 @@
     } else {
       declaration = library.scopeBuilder[name];
     }
+    declaration = handleDuplicatedName(declaration, token);
     checkBuilder(token, declaration, name);
     return declaration;
   }
@@ -841,18 +883,37 @@
       suffix = nameOrQualified == currentClass.name ? "" : nameOrQualified;
     }
     declaration = currentClass.constructors.local[suffix];
+    declaration = handleDuplicatedName(declaration, token);
     checkBuilder(token, declaration, nameOrQualified);
     return declaration;
   }
 
+  Declaration handleDuplicatedName(Declaration declaration, Token token) {
+    int offset = token.charOffset;
+    if (declaration?.next == null) {
+      return declaration;
+    } else {
+      Declaration nearestDeclaration;
+      int minDistance = -1;
+      do {
+        int distance = declaration.charOffset - offset;
+        if (distance >= 0) {
+          if (minDistance == -1 || distance < minDistance) {
+            minDistance = distance;
+            nearestDeclaration = declaration;
+          }
+        }
+        declaration = declaration.next;
+      } while (declaration != null);
+      return nearestDeclaration;
+    }
+  }
+
   void checkBuilder(Token token, Declaration declaration, Object name) {
     if (declaration == null) {
       internalProblem(templateInternalProblemNotFound.withArguments("$name"),
           token.charOffset, uri);
     }
-    if (declaration.next != null) {
-      deprecated_inputError(uri, token.charOffset, "Duplicated name: $name");
-    }
     if (uri != declaration.fileUri) {
       unexpected("$uri", "${declaration.fileUri}", declaration.charOffset,
           declaration.fileUri);
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 96e5a23..73bb7c4 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -42,7 +42,6 @@
 // TODO(ahe): The outline isn't supposed to import kernel-specific builders.
 import '../kernel/kernel_builder.dart'
     show
-        KernelFormalParameterBuilder,
         KernelMixinApplicationBuilder,
         KernelNamedTypeBuilder,
         KernelTypeBuilder;
@@ -60,6 +59,7 @@
         constMask,
         covariantMask,
         externalMask,
+        mixinDeclarationMask,
         staticMask;
 
 import '../operator.dart'
@@ -85,9 +85,10 @@
 
 import '../scanner.dart' show Token;
 
-import 'source_library_builder.dart' show SourceLibraryBuilder;
+import 'source_library_builder.dart' show FieldInfo, SourceLibraryBuilder;
 
-import 'stack_listener.dart' show NullValue, StackListener;
+import 'stack_listener.dart'
+    show FixedNullableList, NullValue, ParserRecovery, StackListener;
 
 enum MethodBody {
   Abstract,
@@ -120,12 +121,18 @@
 
   List<String> popIdentifierList(int count) {
     if (count == 0) return null;
-    List<String> list = new List<String>.filled(count, null, growable: true);
+    List<String> list = new List<String>(count);
+    bool isParserRecovery = false;
     for (int i = count - 1; i >= 0; i--) {
       popCharOffset();
-      list[i] = pop();
+      Object identifier = pop();
+      if (identifier is ParserRecovery) {
+        isParserRecovery = true;
+      } else {
+        list[i] = identifier;
+      }
     }
-    return list;
+    return isParserRecovery ? null : list;
   }
 
   @override
@@ -143,22 +150,24 @@
     } else {
       int charOffset = pop();
       Object typeName = pop();
-      push(new MetadataBuilder.fromConstructor(
-          library.addConstructorReference(
-              typeName, typeArguments, postfix, charOffset),
-          arguments,
-          library,
-          beginToken.charOffset));
+      if (typeName is ParserRecovery) {
+        push(typeName);
+      } else {
+        push(new MetadataBuilder.fromConstructor(
+            library.addConstructorReference(
+                typeName, typeArguments, postfix, charOffset),
+            arguments,
+            library,
+            beginToken.charOffset));
+      }
     }
   }
 
   @override
   void endMetadataStar(int count) {
     debugEvent("MetadataStar");
-    push(popList(
-            count,
-            new List<ExpressionMetadataBuilder<TypeBuilder>>.filled(count, null,
-                growable: true)) ??
+    push(const FixedNullableList<ExpressionMetadataBuilder<TypeBuilder>>()
+            .pop(stack, count) ??
         NullValue.Metadata);
   }
 
@@ -171,22 +180,29 @@
   @override
   void endHide(Token hideKeyword) {
     debugEvent("Hide");
-    List<String> names = pop();
-    push(new Combinator.hide(names, hideKeyword.charOffset, library.fileUri));
+    Object names = pop();
+    if (names is ParserRecovery) {
+      push(names);
+    } else {
+      push(new Combinator.hide(names, hideKeyword.charOffset, library.fileUri));
+    }
   }
 
   @override
   void endShow(Token showKeyword) {
     debugEvent("Show");
-    List<String> names = pop();
-    push(new Combinator.show(names, showKeyword.charOffset, library.fileUri));
+    Object names = pop();
+    if (names is ParserRecovery) {
+      push(names);
+    } else {
+      push(new Combinator.show(names, showKeyword.charOffset, library.fileUri));
+    }
   }
 
   @override
   void endCombinators(int count) {
     debugEvent("Combinators");
-    push(popList(
-            count, new List<Combinator>.filled(count, null, growable: true)) ??
+    push(const FixedNullableList<Combinator>().pop(stack, count) ??
         NullValue.Combinators);
   }
 
@@ -221,11 +237,13 @@
     List<Combinator> combinators = pop();
     bool isDeferred = pop();
     int prefixOffset = pop();
-    String prefix = pop(NullValue.Prefix);
+    Object prefix = pop(NullValue.Prefix);
     List<Configuration> configurations = pop();
     int uriOffset = popCharOffset();
     String uri = pop(); // For a conditional import, this is the default URI.
     List<MetadataBuilder> metadata = pop();
+    checkEmpty(importKeyword.charOffset);
+    if (prefix is ParserRecovery) return;
     library.addImport(
         metadata,
         uri,
@@ -237,14 +255,12 @@
         prefixOffset,
         uriOffset,
         importIndex++);
-    checkEmpty(importKeyword.charOffset);
   }
 
   @override
   void endConditionalUris(int count) {
     debugEvent("EndConditionalUris");
-    push(popList(count,
-            new List<Configuration>.filled(count, null, growable: true)) ??
+    push(const FixedNullableList<Configuration>().pop(stack, count) ??
         NullValue.ConditionalUris);
   }
 
@@ -255,14 +271,23 @@
     String uri = pop();
     if (equalSign != null) popCharOffset();
     String condition = popIfNotNull(equalSign) ?? "true";
-    String dottedName = pop();
-    push(new Configuration(charOffset, dottedName, condition, uri));
+    Object dottedName = pop();
+    if (dottedName is ParserRecovery) {
+      push(dottedName);
+    } else {
+      push(new Configuration(charOffset, dottedName, condition, uri));
+    }
   }
 
   @override
   void handleDottedName(int count, Token firstIdentifier) {
     debugEvent("DottedName");
-    push(popIdentifierList(count).join('.'));
+    List<String> names = popIdentifierList(count);
+    if (names == null) {
+      push(new ParserRecovery(firstIdentifier.charOffset));
+    } else {
+      push(names.join('.'));
+    }
   }
 
   @override
@@ -302,10 +327,14 @@
   @override
   void handleIdentifier(Token token, IdentifierContext context) {
     if (context == IdentifierContext.enumValueDeclaration) {
-      super.handleIdentifier(token, context);
-      push(token.charOffset);
-      String documentationComment = getDocumentationComment(token);
-      push(documentationComment ?? NullValue.DocumentationComment);
+      debugEvent("handleIdentifier");
+      List<MetadataBuilder> metadata = pop();
+      if (token.isSynthetic) {
+        push(new ParserRecovery(token.charOffset));
+      } else {
+        push(new EnumConstantInfo(metadata, token.lexeme, token.charOffset,
+            getDocumentationComment(token)));
+      }
     } else {
       super.handleIdentifier(token, context);
       push(token.charOffset);
@@ -351,7 +380,12 @@
     if (hasName) {
       // Pop the native clause which in this case is a StringLiteral.
       pop(); // Char offset.
-      nativeMethodName = pop(); // String.
+      Object name = pop();
+      if (name is ParserRecovery) {
+        nativeMethodName = '';
+      } else {
+        nativeMethodName = name; // String.
+      }
     } else {
       nativeMethodName = '';
     }
@@ -360,8 +394,7 @@
   @override
   void handleStringJuxtaposition(int literalCount) {
     debugEvent("StringJuxtaposition");
-    List<String> list =
-        new List<String>.filled(literalCount, null, growable: false);
+    List<String> list = new List<String>(literalCount);
     int charOffset = -1;
     for (int i = literalCount - 1; i >= 0; i--) {
       charOffset = pop();
@@ -374,19 +407,26 @@
   @override
   void handleIdentifierList(int count) {
     debugEvent("endIdentifierList");
-    push(popIdentifierList(count) ?? NullValue.IdentifierList);
+    push(popIdentifierList(count) ??
+        (count == 0 ? NullValue.IdentifierList : new ParserRecovery(-1)));
   }
 
   @override
   void handleQualified(Token period) {
     debugEvent("handleQualified");
     int suffixOffset = pop();
-    String suffix = pop();
-    assert(identical(suffix, period.next.lexeme));
-    assert(suffixOffset == period.next.charOffset);
+    Object suffix = pop();
     int offset = pop();
-    var prefix = pop();
-    push(new QualifiedName(prefix, period.next));
+    Object prefix = pop();
+    if (prefix is ParserRecovery) {
+      push(prefix);
+    } else if (suffix is ParserRecovery) {
+      push(suffix);
+    } else {
+      assert(identical(suffix, period.next.lexeme));
+      assert(suffixOffset == period.next.charOffset);
+      push(new QualifiedName(prefix, period.next));
+    }
     push(offset);
   }
 
@@ -398,7 +438,9 @@
     Object name = pop();
     List<MetadataBuilder> metadata = pop();
     library.documentationComment = documentationComment;
-    library.name = flattenName(name, offsetForToken(libraryKeyword), uri);
+    if (name is! ParserRecovery) {
+      library.name = flattenName(name, offsetForToken(libraryKeyword), uri);
+    }
     library.metadata = metadata;
   }
 
@@ -447,11 +489,9 @@
   @override
   void handleClassOrMixinImplements(
       Token implementsKeyword, int interfacesCount) {
-    debugEvent("handleClassImplements");
-    push(popList(
-            interfacesCount,
-            new List<KernelNamedTypeBuilder>.filled(interfacesCount, null,
-                growable: true)) ??
+    debugEvent("ClassOrMixinImplements");
+    push(const FixedNullableList<KernelNamedTypeBuilder>()
+            .pop(stack, interfacesCount) ??
         NullValue.TypeBuilderList);
   }
 
@@ -479,11 +519,9 @@
   @override
   void handleMixinOn(Token onKeyword, int typeCount) {
     debugEvent("handleMixinOn");
-    var supertypeConstraints = new List<KernelNamedTypeBuilder>.filled(
-        typeCount, null,
-        growable: true);
-    popList(typeCount, supertypeConstraints);
-    push(supertypeConstraints);
+    push(const FixedNullableList<KernelNamedTypeBuilder>()
+            .pop(stack, typeCount) ??
+        new ParserRecovery(offsetForToken(onKeyword)));
   }
 
   @override
@@ -492,15 +530,20 @@
     String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = pop(NullValue.TypeBuilderList);
     int supertypeOffset = pop();
-    TypeBuilder supertype = pop();
+    TypeBuilder supertype = nullIfParserRecovery(pop());
     int modifiers = pop();
     List<TypeVariableBuilder> typeVariables = pop();
     int charOffset = pop();
-    String name = pop();
+    Object name = pop();
     if (typeVariables != null && supertype is MixinApplicationBuilder) {
       supertype.typeVariables = typeVariables;
     }
     List<MetadataBuilder> metadata = pop();
+    checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery) {
+      library.endNestedDeclaration("<syntax-error>");
+      return;
+    }
 
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
@@ -517,7 +560,10 @@
         charOffset,
         endToken.charOffset,
         supertypeOffset);
-    checkEmpty(beginToken.charOffset);
+  }
+
+  Object nullIfParserRecovery(Object node) {
+    return node is ParserRecovery ? null : node;
   }
 
   @override
@@ -525,14 +571,18 @@
     debugEvent("endMixinDeclaration");
     String documentationComment = getDocumentationComment(mixinToken);
     List<TypeBuilder> interfaces = pop(NullValue.TypeBuilderList);
-    List<KernelTypeBuilder> supertypeConstraints = pop();
+    List<KernelTypeBuilder> supertypeConstraints = nullIfParserRecovery(pop());
     List<TypeVariableBuilder> typeVariables = pop(NullValue.TypeVariables);
     int nameOffset = pop();
-    String name = pop();
+    Object name = pop();
     List<MetadataBuilder> metadata = pop(NullValue.Metadata);
+    checkEmpty(mixinToken.charOffset);
+    if (name is ParserRecovery) {
+      library.endNestedDeclaration("<syntax-error>");
+      return;
+    }
     int startOffset =
         metadata == null ? mixinToken.charOffset : metadata.first.charOffset;
-
     TypeBuilder supertype;
     if (supertypeConstraints != null && supertypeConstraints.isNotEmpty) {
       if (supertypeConstraints.length == 1) {
@@ -545,7 +595,7 @@
     library.addClass(
         documentationComment,
         metadata,
-        abstractMask,
+        mixinDeclarationMask,
         name,
         typeVariables,
         supertype,
@@ -554,7 +604,6 @@
         nameOffset,
         endToken.charOffset,
         -1);
-    checkEmpty(mixinToken.charOffset);
   }
 
   ProcedureKind computeProcedureKind(Token token) {
@@ -579,7 +628,7 @@
     int formalsOffset = pop();
     List<TypeVariableBuilder> typeVariables = pop();
     int charOffset = pop();
-    String name = pop();
+    Object name = pop();
     TypeBuilder returnType = pop();
     bool isAbstract = kind == MethodBody.Abstract;
     if (getOrSet != null && optional("set", getOrSet)) {
@@ -594,13 +643,14 @@
       modifiers |= abstractMask;
     }
     List<MetadataBuilder> metadata = pop();
-    String documentationComment = getDocumentationComment(beginToken);
     checkEmpty(beginToken.charOffset);
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
+    if (name is ParserRecovery) return;
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
+    String documentationComment = getDocumentationComment(beginToken);
     library.addProcedure(
         documentationComment,
         metadata,
@@ -664,8 +714,9 @@
       Token varFinalOrConst, Token getOrSet, Token name) {
     inConstructor =
         name?.lexeme == library.currentDeclaration.name && getOrSet == null;
-    List<Modifier> modifiers = <Modifier>[];
+    List<Modifier> modifiers;
     if (externalToken != null) {
+      modifiers ??= <Modifier>[];
       modifiers.add(External);
     }
     if (staticToken != null) {
@@ -673,24 +724,29 @@
         handleRecoverableError(
             messageStaticConstructor, staticToken, staticToken);
       } else {
+        modifiers ??= <Modifier>[];
         modifiers.add(Static);
       }
     }
     if (covariantToken != null) {
+      modifiers ??= <Modifier>[];
       modifiers.add(Covariant);
     }
     if (varFinalOrConst != null) {
       String lexeme = varFinalOrConst.lexeme;
       if (identical('var', lexeme)) {
+        modifiers ??= <Modifier>[];
         modifiers.add(Var);
       } else if (identical('final', lexeme)) {
+        modifiers ??= <Modifier>[];
         modifiers.add(Final);
       } else {
+        modifiers ??= <Modifier>[];
         modifiers.add(Const);
       }
     }
     push(varFinalOrConst?.charOffset ?? -1);
-    push(modifiers);
+    push(modifiers ?? NullValue.Modifiers);
     library.beginNestedDeclaration("#method", hasMembers: false);
   }
 
@@ -707,7 +763,7 @@
     int formalsOffset = pop();
     List<TypeVariableBuilder> typeVariables = pop();
     int charOffset = pop();
-    dynamic nameOrOperator = pop();
+    Object nameOrOperator = pop();
     if (Operator.subtract == nameOrOperator && formals == null) {
       nameOrOperator = Operator.unaryMinus;
     }
@@ -776,6 +832,11 @@
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
+    if (name is ParserRecovery) {
+      nativeMethodName = null;
+      inConstructor = false;
+      return;
+    }
     String constructorName =
         kind == ProcedureKind.Getter || kind == ProcedureKind.Setter
             ? null
@@ -837,10 +898,16 @@
   @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     debugEvent("NamedMixinApplicationWithClause");
-    List<TypeBuilder> mixins = pop();
-    TypeBuilder supertype = pop();
-    push(
-        library.addMixinApplication(supertype, mixins, withKeyword.charOffset));
+    Object mixins = pop();
+    Object supertype = pop();
+    if (mixins is ParserRecovery) {
+      push(mixins);
+    } else if (supertype is ParserRecovery) {
+      push(supertype);
+    } else {
+      push(library.addMixinApplication(
+          supertype, mixins, withKeyword.charOffset));
+    }
   }
 
   @override
@@ -849,22 +916,25 @@
     debugEvent("endNamedMixinApplication");
     String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword);
-    TypeBuilder mixinApplication = pop();
+    Object mixinApplication = pop();
     int modifiers = pop();
     List<TypeVariableBuilder> typeVariables = pop();
     int charOffset = pop();
-    String name = pop();
+    Object name = pop();
     List<MetadataBuilder> metadata = pop();
+    checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery || mixinApplication is ParserRecovery) {
+      library.endNestedDeclaration("<syntax-error>");
+      return;
+    }
     library.addNamedMixinApplication(documentationComment, metadata, name,
         typeVariables, modifiers, mixinApplication, interfaces, charOffset);
-    checkEmpty(beginToken.charOffset);
   }
 
   @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     debugEvent("TypeArguments");
-    push(popList(count,
-            new List<KernelTypeBuilder>.filled(count, null, growable: true)) ??
+    push(const FixedNullableList<KernelTypeBuilder>().pop(stack, count) ??
         NullValue.TypeArguments);
   }
 
@@ -879,17 +949,18 @@
     List<TypeBuilder> arguments = pop();
     int charOffset = pop();
     Object name = pop();
-    push(library.addNamedType(name, arguments, charOffset));
+    if (name is ParserRecovery) {
+      push(name);
+    } else {
+      push(library.addNamedType(name, arguments, charOffset));
+    }
   }
 
   @override
   void endTypeList(int count) {
     debugEvent("TypeList");
-    push(popList(
-            count,
-            new List<KernelNamedTypeBuilder>.filled(count, null,
-                growable: true)) ??
-        NullValue.TypeList);
+    push(const FixedNullableList<KernelNamedTypeBuilder>().pop(stack, count) ??
+        new ParserRecovery(-1));
   }
 
   @override
@@ -916,12 +987,16 @@
       Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     debugEvent("FormalParameter");
     int charOffset = pop();
-    String name = pop();
-    TypeBuilder type = pop();
+    Object name = pop();
+    TypeBuilder type = nullIfParserRecovery(pop());
     int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
-    push(library.addFormalParameter(
-        metadata, modifiers, type, name, thisKeyword != null, charOffset));
+    if (name is ParserRecovery) {
+      push(name);
+    } else {
+      push(library.addFormalParameter(
+          metadata, modifiers, type, name, thisKeyword != null, charOffset));
+    }
   }
 
   @override
@@ -958,13 +1033,16 @@
     // 0. It might be simpler if the parser didn't call this method in that
     // case, however, then [beginOptionalFormalParameters] wouldn't always be
     // matched by this method.
-    List<KernelFormalParameterBuilder> parameters =
-        new List<KernelFormalParameterBuilder>(count);
-    popList(count, parameters);
-    for (KernelFormalParameterBuilder parameter in parameters) {
-      parameter.kind = kind;
+    List<FormalParameterBuilder> parameters =
+        const FixedNullableList<FormalParameterBuilder>().pop(stack, count);
+    if (parameters == null) {
+      push(new ParserRecovery(offsetForToken(beginToken)));
+    } else {
+      for (FormalParameterBuilder parameter in parameters) {
+        parameter.kind = kind;
+      }
+      push(parameters);
     }
-    push(parameters);
   }
 
   @override
@@ -973,28 +1051,35 @@
     debugEvent("FormalParameters");
     List<FormalParameterBuilder> formals;
     if (count == 1) {
-      var last = pop();
-      if (last is List) {
-        formals = new List<FormalParameterBuilder>.from(last);
-      } else {
-        formals = <FormalParameterBuilder>[last];
+      Object last = pop();
+      if (last is List<FormalParameterBuilder>) {
+        formals = last;
+      } else if (last is! ParserRecovery) {
+        assert(last != null);
+        formals = new List<FormalParameterBuilder>(1);
+        formals[0] = last;
       }
     } else if (count > 1) {
-      var last = pop();
+      Object last = pop();
       count--;
-      if (last is List<FormalParameterBuilder>) {
-        formals = new List<FormalParameterBuilder>.filled(
-            count + last.length, null,
-            growable: true);
-        formals.setRange(count, formals.length, last);
+      if (last is ParserRecovery) {
+        discard(count);
+      } else if (last is List<FormalParameterBuilder>) {
+        formals = const FixedNullableList<FormalParameterBuilder>()
+            .popPadded(stack, count, last.length);
+        if (formals != null) {
+          formals.setRange(count, formals.length, last);
+        }
       } else {
-        formals = new List<FormalParameterBuilder>.filled(count + 1, null,
-            growable: true);
-        formals[count] = last;
+        formals = const FixedNullableList<FormalParameterBuilder>()
+            .popPadded(stack, count, 1);
+        if (formals != null) {
+          formals[count] = last;
+        }
       }
-      popList(count, formals);
     }
     if (formals != null) {
+      assert(formals.isNotEmpty);
       if (formals.length == 2) {
         // The name may be null for generalized function types.
         if (formals[0].name != null && formals[0].name == formals[1].name) {
@@ -1050,15 +1135,17 @@
 
   @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
+    debugEvent("Enum");
     String documentationComment = getDocumentationComment(enumKeyword);
-    List<Object> constantNamesAndOffsets = popList(
-        count * 4, new List<Object>.filled(count * 4, null, growable: true));
+    List<EnumConstantInfo> enumConstantInfos =
+        const FixedNullableList<EnumConstantInfo>().pop(stack, count);
     int charOffset = pop();
-    String name = pop();
+    Object name = pop();
     List<MetadataBuilder> metadata = pop();
-    library.addEnum(documentationComment, metadata, name,
-        constantNamesAndOffsets, charOffset, leftBrace?.endGroup?.charOffset);
     checkEmpty(enumKeyword.charOffset);
+    if (name is ParserRecovery) return;
+    library.addEnum(documentationComment, metadata, name, enumConstantInfos,
+        charOffset, leftBrace?.endGroup?.charOffset);
   }
 
   @override
@@ -1106,7 +1193,7 @@
     debugEvent("endFunctionTypeAlias");
     String documentationComment = getDocumentationComment(typedefKeyword);
     List<TypeVariableBuilder> typeVariables;
-    String name;
+    Object name;
     int charOffset;
     FunctionTypeBuilder functionType;
     if (equals == null) {
@@ -1118,6 +1205,11 @@
       TypeBuilder returnType = pop();
       // Create a nested declaration that is ended below by
       // `library.addFunctionType`.
+      if (name is ParserRecovery) {
+        pop(); // Metadata.
+        library.endNestedDeclaration("<syntax-error>");
+        return;
+      }
       library.beginNestedDeclaration("#function_type", hasMembers: false);
       functionType =
           library.addFunctionType(returnType, null, formals, charOffset);
@@ -1126,6 +1218,11 @@
       typeVariables = pop();
       charOffset = pop();
       name = pop();
+      if (name is ParserRecovery) {
+        pop(); // Metadata.
+        library.endNestedDeclaration("<syntax-error>");
+        return;
+      }
       if (type is FunctionTypeBuilder) {
         // TODO(ahe): We need to start a nested declaration when parsing the
         // formals and return type so we can correctly bind
@@ -1139,34 +1236,33 @@
       }
     }
     List<MetadataBuilder> metadata = pop();
+    checkEmpty(typedefKeyword.charOffset);
     library.addFunctionTypeAlias(documentationComment, metadata, name,
         typeVariables, functionType, charOffset);
-    checkEmpty(typedefKeyword.charOffset);
   }
 
   @override
   void endTopLevelFields(Token staticToken, Token covariantToken,
       Token varFinalOrConst, int count, Token beginToken, Token endToken) {
     debugEvent("endTopLevelFields");
-    List<Object> fieldsInfo = popList(
-        count * 4, new List<Object>.filled(count * 4, null, growable: true));
-    TypeBuilder type = pop();
+    List<FieldInfo> fieldInfos = popFieldInfos(count);
+    TypeBuilder type = nullIfParserRecovery(pop());
     int modifiers = (staticToken != null ? staticMask : 0) |
         (covariantToken != null ? covariantMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
     List<MetadataBuilder> metadata = pop();
+    checkEmpty(beginToken.charOffset);
+    if (fieldInfos == null) return;
     String documentationComment = getDocumentationComment(beginToken);
     library.addFields(
-        documentationComment, metadata, modifiers, type, fieldsInfo);
-    checkEmpty(beginToken.charOffset);
+        documentationComment, metadata, modifiers, type, fieldInfos);
   }
 
   @override
   void endFields(Token staticToken, Token covariantToken, Token varFinalOrConst,
       int count, Token beginToken, Token endToken) {
     debugEvent("Fields");
-    List<Object> fieldsInfo = popList(
-        count * 4, new List<Object>.filled(count * 4, null, growable: true));
+    List<FieldInfo> fieldInfos = popFieldInfos(count);
     TypeBuilder type = pop();
     int modifiers = (staticToken != null ? staticMask : 0) |
         (covariantToken != null ? covariantMask : 0) |
@@ -1179,38 +1275,63 @@
       modifiers &= ~constMask;
     }
     List<MetadataBuilder> metadata = pop();
+    if (fieldInfos == null) return;
     String documentationComment = getDocumentationComment(beginToken);
     library.addFields(
-        documentationComment, metadata, modifiers, type, fieldsInfo);
+        documentationComment, metadata, modifiers, type, fieldInfos);
+  }
+
+  List<FieldInfo> popFieldInfos(int count) {
+    if (count == 0) return null;
+    List<FieldInfo> fieldInfos = new List<FieldInfo>(count);
+    bool isParserRecovery = false;
+    for (int i = count - 1; i != -1; i--) {
+      Token beforeLast = pop();
+      Token initializerTokenForInference = pop();
+      int charOffset = pop();
+      Object name = pop(NullValue.Identifier);
+      if (name is ParserRecovery) {
+        isParserRecovery = true;
+      } else {
+        fieldInfos[i] = new FieldInfo(
+            name, charOffset, initializerTokenForInference, beforeLast);
+      }
+    }
+    return isParserRecovery ? null : fieldInfos;
   }
 
   @override
   void beginTypeVariable(Token token) {
     debugEvent("beginTypeVariable");
     int charOffset = pop();
-    String name = pop();
+    Object name = pop();
     // TODO(paulberry): type variable metadata should not be ignored.  See
     // dartbug.com/28981.
     /* List<MetadataBuilder> metadata = */ pop();
-
-    push(library.addTypeVariable(name, null, charOffset));
+    if (name is ParserRecovery) {
+      push(name);
+    } else {
+      push(library.addTypeVariable(name, null, charOffset));
+    }
   }
 
   @override
   void handleTypeVariablesDefined(Token token, int count) {
     debugEvent("TypeVariablesDefined");
     assert(count > 0);
-    push(popList(count, new List<TypeVariableBuilder>(count)));
+    push(const FixedNullableList<TypeVariableBuilder>().pop(stack, count) ??
+        NullValue.TypeVariables);
   }
 
   @override
   void endTypeVariable(Token token, int index, Token extendsOrSuper) {
     debugEvent("endTypeVariable");
-    TypeBuilder bound = pop();
+    TypeBuilder bound = nullIfParserRecovery(pop());
     // Peek to leave type parameters on top of stack.
-    List typeParameters = peek();
-
-    typeParameters[index].bound = bound;
+    List<TypeVariableBuilder> typeParameters = peek();
+    if (typeParameters != null) {
+      typeParameters[index].bound = bound;
+    }
   }
 
   @override
@@ -1218,48 +1339,50 @@
     debugEvent("endTypeVariables");
 
     // Peek to leave type parameters on top of stack.
-    List typeParameters = peek();
+    List<TypeVariableBuilder> typeParameters = peek();
 
     Map<String, TypeVariableBuilder> typeVariablesByName;
-    for (TypeVariableBuilder builder in typeParameters) {
-      if (builder.bound != null) {
-        if (typeVariablesByName == null) {
-          typeVariablesByName = new Map<String, TypeVariableBuilder>();
-          for (TypeVariableBuilder builder in typeParameters) {
-            typeVariablesByName[builder.name] = builder;
+    if (typeParameters != null) {
+      for (TypeVariableBuilder builder in typeParameters) {
+        if (builder.bound != null) {
+          if (typeVariablesByName == null) {
+            typeVariablesByName = new Map<String, TypeVariableBuilder>();
+            for (TypeVariableBuilder builder in typeParameters) {
+              typeVariablesByName[builder.name] = builder;
+            }
           }
-        }
 
-        // Find cycle: If there's no cycle we can at most step through all
-        // `typeParameters` (at which point the last builders bound will be
-        // null).
-        // If there is a cycle with `builder` 'inside' the steps to get back to
-        // it will also be bound by `typeParameters.length`.
-        // If there is a cycle without `builder` 'inside' we will just ignore it
-        // for now. It will be reported when processing one of the `builder`s
-        // that is in fact `inside` the cycle. This matches the cyclic class
-        // hierarchy error.
-        TypeVariableBuilder bound = builder;
-        for (int steps = 0;
-            bound.bound != null && steps < typeParameters.length;
-            ++steps) {
-          bound = typeVariablesByName[bound.bound.name];
-          if (bound == null || bound == builder) break;
-        }
-        if (bound == builder && bound.bound != null) {
-          // Write out cycle.
-          List<String> via = new List<String>();
-          bound = typeVariablesByName[builder.bound.name];
-          while (bound != builder) {
-            via.add(bound.name);
+          // Find cycle: If there's no cycle we can at most step through all
+          // `typeParameters` (at which point the last builders bound will be
+          // null).
+          // If there is a cycle with `builder` 'inside' the steps to get back to
+          // it will also be bound by `typeParameters.length`.
+          // If there is a cycle without `builder` 'inside' we will just ignore it
+          // for now. It will be reported when processing one of the `builder`s
+          // that is in fact `inside` the cycle. This matches the cyclic class
+          // hierarchy error.
+          TypeVariableBuilder bound = builder;
+          for (int steps = 0;
+              bound.bound != null && steps < typeParameters.length;
+              ++steps) {
             bound = typeVariablesByName[bound.bound.name];
+            if (bound == null || bound == builder) break;
           }
-          String involvedString = via.join("', '");
-          addProblem(
-              templateCycleInTypeVariables.withArguments(
-                  builder.name, involvedString),
-              builder.charOffset,
-              builder.name.length);
+          if (bound == builder && bound.bound != null) {
+            // Write out cycle.
+            List<String> via = new List<String>();
+            bound = typeVariablesByName[builder.bound.name];
+            while (bound != builder) {
+              via.add(bound.name);
+              bound = typeVariablesByName[bound.bound.name];
+            }
+            String involvedString = via.join("', '");
+            addProblem(
+                templateCycleInTypeVariables.withArguments(
+                    builder.name, involvedString),
+                builder.charOffset,
+                builder.name.length);
+          }
         }
       }
     }
@@ -1295,8 +1418,12 @@
     List<TypeBuilder> typeArguments = pop();
     int charOffset = pop();
     Object name = pop();
-    push(library.addConstructorReference(
-        name, typeArguments, suffix, charOffset));
+    if (name is ParserRecovery) {
+      push(name);
+    } else {
+      push(library.addConstructorReference(
+          name, typeArguments, suffix, charOffset));
+    }
   }
 
   @override
@@ -1315,7 +1442,7 @@
     MethodBody kind = pop();
     ConstructorReferenceBuilder redirectionTarget;
     if (kind == MethodBody.RedirectingFactoryBody) {
-      redirectionTarget = pop();
+      redirectionTarget = nullIfParserRecovery(pop());
     }
     List<FormalParameterBuilder> formals = pop();
     int formalsOffset = pop();
@@ -1324,6 +1451,10 @@
     Object name = pop();
     int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
+    if (name is ParserRecovery) {
+      library.endNestedDeclaration("<syntax-error>");
+      return;
+    }
     String documentationComment = getDocumentationComment(beginToken);
     library.addFactoryMethod(
         documentationComment,
@@ -1401,12 +1532,15 @@
   void handleClassWithClause(Token withKeyword) {
     debugEvent("ClassWithClause");
 
-    List<TypeBuilder> mixins = pop();
+    Object mixins = pop();
     int extendsOffset = pop();
-    TypeBuilder supertype = pop();
-
-    push(
-        library.addMixinApplication(supertype, mixins, withKeyword.charOffset));
+    Object supertype = pop();
+    if (supertype is ParserRecovery || mixins is ParserRecovery) {
+      push(new ParserRecovery(withKeyword.charOffset));
+    } else {
+      push(library.addMixinApplication(
+          supertype, mixins, withKeyword.charOffset));
+    }
     push(extendsOffset);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/scope_listener.dart b/pkg/front_end/lib/src/fasta/source/scope_listener.dart
index e9a61e3..c49ce08 100644
--- a/pkg/front_end/lib/src/fasta/source/scope_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/scope_listener.dart
@@ -10,7 +10,8 @@
 
 import 'stack_listener.dart' show NullValue, StackListener;
 
-export 'stack_listener.dart' show NullValue;
+export 'stack_listener.dart'
+    show FixedNullableList, GrowableList, NullValue, ParserRecovery;
 
 enum JumpTargetKind {
   Break,
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 8df5e4a..16ee2a6 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -80,6 +80,8 @@
 
   KernelTypeBuilder mixedInType;
 
+  bool isMixinDeclaration;
+
   SourceClassBuilder(
       List<MetadataBuilder> metadata,
       int modifiers,
@@ -94,8 +96,9 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      [ShadowClass cls,
-      this.mixedInType])
+      {Class cls,
+      this.mixedInType,
+      this.isMixinDeclaration = false})
       : actualCls = initializeClass(cls, typeVariables, name, parent,
             startCharOffset, charOffset, charEndOffset),
         super(metadata, modifiers, name, typeVariables, supertype, interfaces,
@@ -113,18 +116,23 @@
     void buildBuilders(String name, Declaration declaration) {
       do {
         if (declaration.parent != this) {
-          unexpected(
-              "$fileUri", "${declaration.parent.fileUri}", charOffset, fileUri);
+          if (fileUri != declaration.parent.fileUri) {
+            unexpected("$fileUri", "${declaration.parent.fileUri}", charOffset,
+                fileUri);
+          } else {
+            unexpected(fullNameForErrors, declaration.parent?.fullNameForErrors,
+                charOffset, fileUri);
+          }
         } else if (declaration is KernelFieldBuilder) {
           // TODO(ahe): It would be nice to have a common interface for the
           // build method to avoid duplicating these two cases.
           Member field = declaration.build(library);
-          if (!declaration.isPatch) {
+          if (!declaration.isPatch && declaration.next == null) {
             cls.addMember(field);
           }
         } else if (declaration is KernelFunctionBuilder) {
           Member function = declaration.build(library);
-          if (!declaration.isPatch) {
+          if (!declaration.isPatch && declaration.next == null) {
             cls.addMember(function);
           }
         } else {
@@ -141,6 +149,7 @@
         supertype?.buildSupertype(library, charOffset, fileUri);
     actualCls.mixedInType =
         mixedInType?.buildMixedInType(library, charOffset, fileUri);
+    actualCls.isMixinDeclaration = isMixinDeclaration;
     // TODO(ahe): If `cls.supertype` is null, and this isn't Object, report a
     // compile-time error.
     cls.isAbstract = isAbstract;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 7d81a1a..cd86540 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -17,6 +17,7 @@
         ClassBuilder,
         ConstructorReferenceBuilder,
         Declaration,
+        EnumConstantInfo,
         FormalParameterBuilder,
         FunctionTypeBuilder,
         LibraryBuilder,
@@ -57,7 +58,8 @@
         templateCouldNotParseUri,
         templateDeferredPrefixDuplicated,
         templateDeferredPrefixDuplicatedCause,
-        templateDuplicatedDefinition,
+        templateDuplicatedDeclaration,
+        templateDuplicatedDeclarationCause,
         templateMissingPartOf,
         templateNotAPrefixInTypeAnnotation,
         templatePartOfInLibrary,
@@ -178,7 +180,8 @@
     assert(
         (name?.startsWith(currentDeclaration.name) ??
                 (name == currentDeclaration.name)) ||
-            currentDeclaration.name == "operator",
+            currentDeclaration.name == "operator" ||
+            identical(name, "<syntax-error>"),
         "${name} != ${currentDeclaration.name}");
     DeclarationBuilder<T> previous = currentDeclaration;
     currentDeclaration = currentDeclaration.parent;
@@ -384,15 +387,15 @@
       bool hasInitializer);
 
   void addFields(String documentationComment, List<MetadataBuilder> metadata,
-      int modifiers, T type, List<Object> fieldsInfo) {
-    for (int i = 0; i < fieldsInfo.length; i += 4) {
-      String name = fieldsInfo[i];
-      int charOffset = fieldsInfo[i + 1];
-      bool hasInitializer = fieldsInfo[i + 2] != null;
+      int modifiers, T type, List<FieldInfo> fieldInfos) {
+    for (FieldInfo info in fieldInfos) {
+      String name = info.name;
+      int charOffset = info.charOffset;
+      bool hasInitializer = info.initializerTokenForInference != null;
       Token initializerTokenForInference =
-          type == null ? fieldsInfo[i + 2] : null;
+          type == null ? info.initializerTokenForInference : null;
       if (initializerTokenForInference != null) {
-        Token beforeLast = fieldsInfo[i + 3];
+        Token beforeLast = info.beforeLast;
         beforeLast.setNext(new Token.eof(beforeLast.next.offset));
       }
       addField(documentationComment, metadata, modifiers, type, name,
@@ -435,7 +438,7 @@
       String documentationComment,
       List<MetadataBuilder> metadata,
       String name,
-      List<Object> constantNamesAndOffsets,
+      List<EnumConstantInfo> enumConstantInfos,
       int charOffset,
       int charEndOffset);
 
@@ -475,6 +478,9 @@
     // TODO(ahe): Set the parent correctly here. Could then change the
     // implementation of MemberBuilder.isTopLevel to test explicitly for a
     // LibraryBuilder.
+    if (name == null) {
+      unhandled("null", "name", charOffset, fileUri);
+    }
     if (currentDeclaration == libraryDeclaration) {
       if (declaration is MemberBuilder) {
         declaration.parent = this;
@@ -528,14 +534,18 @@
           return computeAmbiguousDeclaration(
               name, existing, member, charOffset);
         });
-    } else if (isDuplicatedDefinition(existing, declaration)) {
-      addProblem(templateDuplicatedDefinition.withArguments(name), charOffset,
-          noLength, fileUri);
+    } else if (isDuplicatedDeclaration(existing, declaration)) {
+      addProblem(templateDuplicatedDeclaration.withArguments(name), charOffset,
+          name.length, fileUri,
+          context: <LocatedMessage>[
+            templateDuplicatedDeclarationCause.withArguments(name).withLocation(
+                existing.fileUri, existing.charOffset, name.length)
+          ]);
     }
     return members[name] = declaration;
   }
 
-  bool isDuplicatedDefinition(Declaration existing, Declaration other) {
+  bool isDuplicatedDeclaration(Declaration existing, Declaration other) {
     if (existing == null) return false;
     Declaration next = existing.next;
     if (next == null) {
@@ -918,3 +928,13 @@
     return new Scope(members, setters, parent, name, isModifiable: false);
   }
 }
+
+class FieldInfo {
+  final String name;
+  final int charOffset;
+  final Token initializerTokenForInference;
+  final Token beforeLast;
+
+  const FieldInfo(this.name, this.charOffset, this.initializerTokenForInference,
+      this.beforeLast);
+}
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index d318a5a..ac9aedb 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -49,6 +49,8 @@
 
 import '../export.dart' show Export;
 
+import '../import.dart' show Import;
+
 import '../fasta_codes.dart'
     show
         LocatedMessage,
@@ -60,6 +62,10 @@
         templateAmbiguousSupertypes,
         templateCantReadFile,
         templateCyclicClassHierarchy,
+        templateDuplicatedLibraryExport,
+        templateDuplicatedLibraryExportContext,
+        templateDuplicatedLibraryImport,
+        templateDuplicatedLibraryImportContext,
         templateExtendingEnum,
         templateExtendingRestricted,
         templateIllegalMixin,
@@ -650,6 +656,80 @@
       }
     }
     ticker.logMs("Checked restricted supertypes");
+
+    // Check imports and exports for duplicate names.
+    // This is rather silly, e.g. it makes importing 'foo' and exporting another
+    // 'foo' ok.
+    builders.forEach((Uri uri, LibraryBuilder library) {
+      if (library is SourceLibraryBuilder && library.loader == this) {
+        // Check exports.
+        if (library.exports.isNotEmpty) {
+          Map<String, List<Export>> nameToExports;
+          bool errorExports = false;
+          for (Export export in library.exports) {
+            String name = export.exported?.name ?? '';
+            if (name != '') {
+              nameToExports ??= new Map<String, List<Export>>();
+              List<Export> exports = nameToExports[name] ??= <Export>[];
+              exports.add(export);
+              if (exports[0].exported != export.exported) errorExports = true;
+            }
+          }
+          if (errorExports) {
+            for (String name in nameToExports.keys) {
+              List<Export> exports = nameToExports[name];
+              if (exports.length < 2) continue;
+              List<LocatedMessage> context = <LocatedMessage>[];
+              for (Export export in exports.skip(1)) {
+                context.add(templateDuplicatedLibraryExportContext
+                    .withArguments(name)
+                    .withLocation(uri, export.charOffset, noLength));
+              }
+              library.addProblem(
+                  templateDuplicatedLibraryExport.withArguments(name),
+                  exports[0].charOffset,
+                  noLength,
+                  uri,
+                  context: context);
+            }
+          }
+        }
+
+        // Check imports.
+        if (library.imports.isNotEmpty) {
+          Map<String, List<Import>> nameToImports;
+          bool errorImports;
+          for (Import import in library.imports) {
+            String name = import.imported?.name ?? '';
+            if (name != '') {
+              nameToImports ??= new Map<String, List<Import>>();
+              List<Import> imports = nameToImports[name] ??= <Import>[];
+              imports.add(import);
+              if (imports[0].imported != import.imported) errorImports = true;
+            }
+          }
+          if (errorImports != null) {
+            for (String name in nameToImports.keys) {
+              List<Import> imports = nameToImports[name];
+              if (imports.length < 2) continue;
+              List<LocatedMessage> context = <LocatedMessage>[];
+              for (Import import in imports.skip(1)) {
+                context.add(templateDuplicatedLibraryImportContext
+                    .withArguments(name)
+                    .withLocation(uri, import.charOffset, noLength));
+              }
+              library.addProblem(
+                  templateDuplicatedLibraryImport.withArguments(name),
+                  imports[0].charOffset,
+                  noLength,
+                  uri,
+                  context: context);
+            }
+          }
+        }
+      }
+    });
+    ticker.logMs("Checked imports and exports for duplicate names");
   }
 
   void buildComponent() {
@@ -776,6 +856,17 @@
     ticker.logMs("Checked abstract members");
   }
 
+  void checkRedirectingFactories(List<SourceClassBuilder> sourceClasses) {
+    if (!target.strongMode) return;
+    for (SourceClassBuilder builder in sourceClasses) {
+      if (builder.library.loader == this) {
+        builder.checkRedirectingFactories(
+            typeInferenceEngine.typeSchemaEnvironment);
+      }
+    }
+    ticker.logMs("Checked redirecting factories");
+  }
+
   void addNoSuchMethodForwarders(List<SourceClassBuilder> sourceClasses) {
     if (!target.backendTarget.enableNoSuchMethodForwarders) return;
 
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index e388982..34dc2c8 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -54,6 +54,7 @@
   Identifier,
   IdentifierList,
   Initializers,
+  Labels,
   Metadata,
   Modifiers,
   ParameterDefaultValue,
@@ -76,6 +77,12 @@
   @override
   Uri get uri;
 
+  void discard(int n) {
+    for (int i = 0; i < n; i++) {
+      pop();
+    }
+  }
+
   // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
   // and ast_builder.dart.
   void finishFunction(covariant List<Object> annotations, covariant formals,
@@ -124,16 +131,12 @@
     return value == null ? null : pop();
   }
 
-  List popList(int n, List list) {
-    if (n == 0) return null;
-    return stack.popList(n, list);
-  }
-
   void debugEvent(String name) {
     // printEvent(name);
   }
 
   void printEvent(String name) {
+    print('\n------------------');
     for (Object o in stack.values) {
       String s = "  $o";
       int index = s.indexOf("\n");
@@ -142,8 +145,7 @@
       }
       print(s);
     }
-    print(name);
-    print('------------------\n');
+    print("  >> $name");
   }
 
   @override
@@ -155,7 +157,14 @@
   @override
   void handleIdentifier(Token token, IdentifierContext context) {
     debugEvent("handleIdentifier");
-    push(token.lexeme);
+    if (!token.isSynthetic) {
+      push(token.lexeme);
+    } else {
+      // This comes from a synthetic token which is inserted by the parser in
+      // an attempt to recover.  This almost always means that the parser has
+      // gotten very confused and we need to ignore the results.
+      push(new ParserRecovery(token.charOffset));
+    }
   }
 
   @override
@@ -326,14 +335,6 @@
   }
 
   @override
-  void handleStringJuxtaposition(int literalCount) {
-    debugEvent("StringJuxtaposition");
-    push(popList(literalCount,
-            new List<Expression>.filled(literalCount, null, growable: true))
-        .join(""));
-  }
-
-  @override
   void handleDirectivesOnly() {
     pop(); // Discard the metadata.
   }
@@ -386,7 +387,7 @@
 }
 
 class Stack {
-  List array = new List(8);
+  List<Object> array = new List<Object>(8);
   int arrayLength = 0;
 
   bool get isNotEmpty => arrayLength > 0;
@@ -405,7 +406,7 @@
     }
   }
 
-  Object pop([NullValue nullValue]) {
+  Object pop(NullValue nullValue) {
     assert(arrayLength > 0);
     final Object value = array[--arrayLength];
     array[arrayLength] = null;
@@ -418,32 +419,80 @@
     }
   }
 
-  List popList(int count, List list) {
+  List<Object> popList(int count, List<Object> list, NullValue nullValue) {
     assert(arrayLength >= count);
-
-    final table = array;
-    final length = arrayLength;
-
-    final startIndex = length - count;
+    final List<Object> array = this.array;
+    final int length = arrayLength;
+    final int startIndex = length - count;
+    bool isParserRecovery = false;
     for (int i = 0; i < count; i++) {
-      final value = table[startIndex + i];
-      list[i] = value is NullValue ? null : value;
-      table[startIndex + i] = null;
+      int arrayIndex = startIndex + i;
+      final Object value = array[arrayIndex];
+      array[arrayIndex] = null;
+      if (value is NullValue && nullValue == null ||
+          identical(value, nullValue)) {
+        list[i] = null;
+      } else if (value is ParserRecovery) {
+        isParserRecovery = true;
+      } else {
+        if (value is NullValue) {
+          print(value);
+        }
+        list[i] = value;
+      }
     }
     arrayLength -= count;
 
-    return list;
+    return isParserRecovery ? null : list;
   }
 
-  List get values {
-    final List list = new List(arrayLength);
-    list.setRange(0, arrayLength, array);
+  List<Object> get values {
+    final int length = arrayLength;
+    final List<Object> list = new List<Object>(length);
+    list.setRange(0, length, array);
     return list;
   }
 
   void _grow() {
-    final List newTable = new List(array.length * 2);
-    newTable.setRange(0, array.length, array, 0);
-    array = newTable;
+    final int length = array.length;
+    final List<Object> newArray = new List<Object>(length * 2);
+    newArray.setRange(0, length, array, 0);
+    array = newArray;
   }
 }
+
+/// Helper constant for popping a list of the top of a [Stack].  This helper
+/// returns null instead of empty lists, and the lists returned are of fixed
+/// length.
+class FixedNullableList<T> {
+  const FixedNullableList();
+
+  List<T> pop(Stack stack, int count, [NullValue nullValue]) {
+    if (count == 0) return null;
+    return stack.popList(count, new List<T>(count), nullValue);
+  }
+
+  List<T> popPadded(Stack stack, int count, int padding,
+      [NullValue nullValue]) {
+    if (count + padding == 0) return null;
+    return stack.popList(count, new List<T>(count + padding), nullValue);
+  }
+}
+
+/// Helper constant for popping a list of the top of a [Stack].  This helper
+/// returns growable lists (also when empty).
+class GrowableList<T> {
+  const GrowableList();
+
+  List<T> pop(Stack stack, int count, [NullValue nullValue]) {
+    return stack.popList(
+        count, new List<T>.filled(count, null, growable: true), nullValue);
+  }
+}
+
+class ParserRecovery {
+  final int charOffset;
+  ParserRecovery(this.charOffset);
+
+  String toString() => "ParserRecovery(charOffset)";
+}
diff --git a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
index b7132d0..433632f 100644
--- a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
+++ b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
@@ -30,9 +30,8 @@
 import 'package:testing/testing.dart'
     show ChainContext, Result, StdioProcess, Step, TestDescription;
 
-import '../../api_prototype/compilation_message.dart' show CompilationMessage;
-
-import '../../api_prototype/compiler_options.dart' show CompilerOptions;
+import '../../api_prototype/compiler_options.dart'
+    show CompilerOptions, FormattedMessage, Severity;
 
 import '../../api_prototype/kernel_generator.dart' show kernelForProgram;
 
@@ -45,6 +44,8 @@
 
 import '../kernel/verifier.dart' show verifyComponent;
 
+import '../messages.dart' show LocatedMessage;
+
 class Print extends Step<Component, Component, ChainContext> {
   const Print();
 
@@ -73,17 +74,27 @@
 
   Future<Result<Component>> run(
       Component component, ChainContext context) async {
-    var options = new ProcessedOptions(new CompilerOptions());
+    StringBuffer problems = new StringBuffer();
+    ProcessedOptions options = new ProcessedOptions(
+        options: new CompilerOptions()
+          ..onProblem = (FormattedMessage problem, Severity severity,
+              List<FormattedMessage> context) {
+            if (problems.isNotEmpty) {
+              problems.write("\n");
+            }
+            problems.write(problem.formatted);
+          });
     return await CompilerContext.runWithOptions(options, (_) async {
-      var errors = verifyComponent(component,
+      List<LocatedMessage> verificationErrors = verifyComponent(component,
           isOutline: !fullCompile, skipPlatform: true);
-      if (errors.isEmpty) {
+      assert(verificationErrors.isEmpty || problems.isNotEmpty);
+      if (problems.isEmpty) {
         return pass(component);
       } else {
-        return new Result<Component>(
-            null, context.expectationSet["VerificationError"], errors, null);
+        return new Result<Component>(null,
+            context.expectationSet["VerificationError"], "$problems", null);
       }
-    });
+    }, errorOnMissingInput: false);
   }
 }
 
@@ -123,17 +134,26 @@
 
   String get name => "match expectations";
 
-  Future<Result<Component>> run(Component component, _) async {
+  Future<Result<Component>> run(Component component, dynamic context) async {
+    StringBuffer problems = context.componentToProblems[component];
     Library library = component.libraries
         .firstWhere((Library library) => library.importUri.scheme != "dart");
     Uri uri = library.importUri;
     Uri base = uri.resolve(".");
     Uri dartBase = Uri.base;
     StringBuffer buffer = new StringBuffer();
+    if (problems.isNotEmpty) {
+      buffer.write("// Formatted problems:\n//");
+      for (String line in "${problems}".split("\n")) {
+        buffer.write("\n// $line".trimRight());
+      }
+      buffer.write("\n\n");
+      problems.clear();
+    }
     for (Field field in library.fields) {
       if (field.name.name != "#errors") continue;
       ListLiteral list = field.initializer;
-      buffer.write("// Errors:");
+      buffer.write("// Unhandled errors:");
       for (StringLiteral string in list.expressions) {
         buffer.write("\n//");
         for (String line in string.value.split("\n")) {
@@ -240,17 +260,16 @@
   Future<Result<Component>> run(
       TestDescription description, CompileContext context) async {
     Result<Component> result;
-    reportError(CompilationMessage error) {
-      result ??= fail(null, error.message);
-    }
-
     Uri sdk = Uri.base.resolve("sdk/");
     var options = new CompilerOptions()
       ..sdkRoot = sdk
       ..compileSdk = true
       ..packagesFileUri = Uri.base.resolve('.packages')
       ..strongMode = context.strongMode
-      ..onError = reportError;
+      ..onProblem = (FormattedMessage problem, Severity severity,
+          List<FormattedMessage> context) {
+        result ??= fail(null, problem.formatted);
+      };
     if (context.target != null) {
       options.target = context.target;
       // Do not link platform.dill, but recompile the platform libraries. This
diff --git a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
index 362a67a..879e18f 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
@@ -786,7 +786,7 @@
         //     method to infer from and the signatures are compatible, it is
         //     treated as dynamic (e.g. overriding a one parameter method with a
         //     method that takes a second optional parameter).  Note: if there
-        //     is no corresponding parameter position in the overriden method to
+        //     is no corresponding parameter position in the overridden method to
         //     infer from and the signatures are incompatible (e.g. overriding a
         //     one parameter method with a method that takes a second
         //     non-optional parameter), the inference result is not defined and
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 96ef8c84..fc2c472 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -99,6 +99,9 @@
 DirectiveAfterDeclaration/script2: Fail
 DuplicateDeferred/example: Fail
 DuplicatePrefix/example: Fail
+DuplicatedDeclarationUse/analyzerCode: Fail # No corresponding analyzer code.
+DuplicatedDeclarationUse/script1: Fail # This test can't pass.
+DuplicatedDeclarationUse/script2: Fail # Wrong error.
 DuplicatedDefinition/analyzerCode: Fail
 DuplicatedDefinition/example: Fail
 DuplicatedExportInType/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index ba5e7d6..1ccc260 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -385,16 +385,18 @@
   analyzerCode: EXPECTED_TYPE_NAME
 
 MissingExpressionInThrow:
+  index: 32
   template: "Missing expression after 'throw'."
   tip: "Add an expression after 'throw' or use 'rethrow' to throw a caught exception"
-  analyzerCode: MISSING_EXPRESSION_IN_THROW
+  analyzerCode: ParserErrorCode.MISSING_EXPRESSION_IN_THROW
   statement:
     - "throw;"
 
 MissingConstFinalVarOrType:
+  index: 33
   template: "Variables must be declared using the keywords 'const', 'final', 'var' or a type name."
   tip: "Try adding the name of the type of the variable or the keyword 'var'."
-  analyzerCode: MISSING_CONST_FINAL_VAR_OR_TYPE
+  analyzerCode: ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
   script:
     - "class C { static f; }"
 
@@ -897,15 +899,17 @@
     - "'\\u{110000}'"
 
 InvalidHexEscape:
+  index: 40
   template: "An escape sequence starting with '\\x' must be followed by 2 hexadecimal digits."
-  analyzerCode: INVALID_HEX_ESCAPE
+  analyzerCode: ParserErrorCode.INVALID_HEX_ESCAPE
   expression:
     - "'\\x0'"
     - "'\\x0y'"
 
 InvalidUnicodeEscape:
+  index: 38
   template: "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'."
-  analyzerCode: INVALID_UNICODE_ESCAPE
+  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE
   expression:
     - "'\\u'"
     - "'\\u0F'"
@@ -1573,8 +1577,23 @@
 
 DuplicatedExport:
   template: "'#name' is exported from both '#uri' and '#uri2'."
-  severity: IGNORED
   analyzerCode: AMBIGUOUS_EXPORT
+  script:
+    lib1.dart: "class A {}"
+    lib2.dart: "class A {}"
+    main.dart: "export 'lib1.dart'; export 'lib2.dart';"
+
+DuplicatedLibraryExport:
+  template: "A library with name '#name' is exported more than once."
+  analyzerCode: EXPORT_DUPLICATED_LIBRARY_NAMED
+  script:
+    lib1.dart: "library foo;"
+    lib2.dart: "library foo;"
+    main.dart: "export 'lib1.dart'; export 'lib2.dart';"
+
+DuplicatedLibraryExportContext:
+  template: "'#name' is also exported here."
+  severity: CONTEXT
 
 DuplicatedExportInType:
   template: "'#name' is exported from both '#uri' and '#uri2'."
@@ -1584,6 +1603,18 @@
   template: "'#name' is imported from both '#uri' and '#uri2'."
   severity: IGNORED
 
+DuplicatedLibraryImport:
+  template: "A library with name '#name' is imported more than once."
+  analyzerCode: IMPORT_DUPLICATED_LIBRARY_NAMED
+  script:
+    lib1.dart: "library foo;"
+    lib2.dart: "library foo;"
+    main.dart: "import 'lib1.dart'; import 'lib2.dart';"
+
+DuplicatedLibraryImportContext:
+  template: "'#name' is also imported here."
+  severity: CONTEXT
+
 DuplicatedImportInType:
   template: "'#name' is imported from both '#uri' and '#uri2'."
   severity: ERROR_LEGACY_WARNING
@@ -1884,9 +1915,10 @@
   analyzerCode: INVALID_GENERIC_FUNCTION_TYPE
 
 LibraryDirectiveNotFirst:
+  index: 37
   template: "The library directive must appear before all other directives."
   tip: "Try moving the library directive before any other directives."
-  analyzerCode: LIBRARY_DIRECTIVE_NOT_FIRST
+  analyzerCode: ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST
   script:
     - "class Foo{} library l;"
     - "import 'x.dart'; library l;"
@@ -2089,17 +2121,60 @@
   script:
     - "dynamic<T>(x) => 0"
 
-DuplicatedDefinition:
-  template: "Duplicated definition of '#name'."
-
-DuplicatedName:
+# Use this message when a duplicated declaration is introduced.  For example:
+#
+#    class C {} // First declaration (related information points here).
+#    class C {} // Duplicated declaration (error here).
+#    main() {
+#      new C(); // Use of duplicated declaration.
+#    }
+#
+# We follow the convention from C that a definition is the unique element that
+# provides the implementation of a name, and a declaration may not be unique
+# (for example, forward declaration). Using this terminology, one could argue
+# that a method that is abstract or external is a declaration, not a
+# definition. Similarly, imported names are declarations, not
+# definitions. Consequently, it is more convenient to use the word
+# "declaration" instead of "definition" as the former implies less.
+DuplicatedDeclaration:
   template: "'#name' is already declared in this scope."
   analyzerCode: DUPLICATE_DEFINITION
+  script: |
+    class C {} // First declaration (related information points here).
+    class C {} // Duplicated declaration (error here).
+    main() {
+      // The following line is commented out as it would lead to an extraneous
+      // diagnostic.
+      // new C(); // Use of duplicated declaration.
+    }
 
-DuplicatedNameCause:
+DuplicatedDeclarationCause:
   template: "Previous declaration of '#name'."
   severity: CONTEXT
 
+# Use this message when a duplicated declaration is used.
+DuplicatedDeclarationUse:
+  template: "Can't use '#name' because it is declared more than once."
+  script:
+    - main.dart: |
+        // This test can't pass as tests must produce only one error message.
+        class C {} // First declaration (related information points here).
+        class C {} // Duplicated declaration (error here).
+        main() {
+          new C(); // Use of duplicated declaration.
+        }
+    - main.dart: |
+        import 'lib1.dart';
+        import 'lib2.dart';
+
+        main() {
+          new C(); // Use of duplicated declaration.
+        }
+      lib1.dart: |
+        class C {}
+      lib2.dart: |
+        class C {}
+
 DuplicatedNamePreviouslyUsed:
   template: "Can't declare '#name' because it was already used in this scope."
   analyzerCode: REFERENCED_BEFORE_DECLARATION
@@ -2130,15 +2205,17 @@
   analyzerCode: ENUM_CONSTANT_WITH_ENUM_NAME
 
 MissingOperatorKeyword:
+  index: 31
   template: "Operator declarations must be preceeded by the keyword 'operator'."
   tip: "Try adding the keyword 'operator'."
-  analyzerCode: MISSING_KEYWORD_OPERATOR
+  analyzerCode: ParserErrorCode.MISSING_KEYWORD_OPERATOR
   script:
     - "class C { +(x) {} }"
 
 InvalidOperator:
+  index: 39
   template: "The string '#lexeme' isn't a user-definable operator."
-  analyzerCode: INVALID_OPERATOR
+  analyzerCode: ParserErrorCode.INVALID_OPERATOR
   script:
     - "class C { void operator %=(x) {} }"
 
@@ -2380,15 +2457,17 @@
   template: "This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor."
 
 ExpectedAnInitializer:
+  index: 36
   template: "Expected an initializer."
-  analyzerCode: MISSING_INITIALIZER
+  analyzerCode: ParserErrorCode.MISSING_INITIALIZER
   script:
     - "class C { C() : {} }"
 
 MissingAssignmentInInitializer:
+  index: 34
   template: "Expected an assignment after the field name."
   tip: "To initialize a field, use the syntax 'name = value'."
-  analyzerCode: MISSING_ASSIGNMENT_IN_INITIALIZER
+  analyzerCode: ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER
   script:
     - "class C { C() : x(3) {} }"
 
@@ -2419,9 +2498,10 @@
     - "main(){ f()++; }"
 
 MissingAssignableSelector:
+  index: 35
   template: "Missing selector such as '.<identifier>' or '[0]'."
   tip: "Try adding a selector."
-  analyzerCode: MISSING_ASSIGNABLE_SELECTOR
+  analyzerCode: ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR
   script:
     - "main(){ ++f(); }"
 
@@ -2831,7 +2911,7 @@
     - >-
       class A {
         factory A.f({int x = 42}) = A.g;
-        A.g() {}
+        A.g({int x = 40}) {}
       }
 
 UntranslatableUri:
@@ -2856,3 +2936,82 @@
 PackagesFileFormat:
   template: "Problem in packages configuration file: #string"
   external: test/packages_format_error_test.dart
+
+FactoryRedirecteeInvalidReturnType:
+  template: "The return type '#type' of the constructor '#name' isn't a subtype of '#type2'."
+  tip: "Try redirecting to a different constructor."
+  analyzerCode: REDIRECT_TO_INVALID_RETURN_TYPE
+  script:
+    - >-
+      class A {
+        factory A() = B;
+      }
+      class B {
+        B();
+      }
+
+FactoryRedirecteeHasTooFewPositionalParameters:
+  template: "Redirection target '#name' accepts fewer arguments ('#count') than the redirecting factory can provide."
+  tip: "Try redirecting to a different constructor."
+  analyzerCode: REDIRECT_TO_INVALID_FUNCTION_TYPE
+  script:
+    - >-
+      class A {
+        factory A.one(int x) = A.zero;
+        A.zero() {}
+      }
+
+RedirectingFactoryInvalidPositionalParameterType:
+  template: "The type of parameter '#name' (#type) is not a subtype of the redirection target's corresponding parameter type (#type2)."
+  tip: "Try changing either the type of the parameter or the redirection target."
+  analyzerCode: REDIRECT_TO_INVALID_FUNCTION_TYPE
+  script:
+    - >-
+      class A {
+        factory A.i(int x) = A.s;
+        A.s(String x) { }
+      }
+
+RedirectingFactoryMissingNamedParameter:
+  template: "The constructor '#name' does not have a named parameter '#name2'."
+  tip: "Try adding '#name2' as a named parameter to '#name'."
+  analyzerCode: REDIRECT_TO_INVALID_FUNCTION_TYPE
+  script:
+    - >-
+      class A {
+        factory A.f({int x}) = A.g;
+        A.g({int y}) { }
+      }
+
+RedirectingFactoryInvalidNamedParameterType:
+  template: "The type of the named parameter '#name' (#type) is not a subtype of the redirection target's corresponding named parameter type (#type2)."
+  tip: "Try changing either the type of the parameter or the redirection target."
+  analyzerCode: REDIRECT_TO_INVALID_FUNCTION_TYPE
+  script:
+    - >-
+      class A {
+        factory A.f({int x}) = A.g;
+        A.g({String x}) { }
+      }
+
+RedirectingFactoryProvidesTooFewRequiredParameters:
+  template: "Redirecting factory '#name' can provide less arguments ('#count') than required by the redirection target '#name2' ('#count2')."
+  tip: "Try redirecting to a different constructor."
+  analyzerCode: REDIRECT_TO_INVALID_FUNCTION_TYPE
+  script:
+    - >-
+      class A {
+        factory A.f(int x) = A.g;
+        A.g(int x, int y) {}
+      }
+
+RedirectingFactoryIncompatibleTypeArgument:
+  template: "The type '#type' doesn't extend '#type2'."
+  tip: "Try using a different type as argument."
+  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+  script:
+    - >-
+      class A<T extends int> {
+         factory A() = B<T, int>;
+      }
+      class B<T extends int, S extends String> implements A<T> {}
diff --git a/pkg/front_end/test/fasta/expression_test.dart b/pkg/front_end/test/fasta/expression_test.dart
index ebe6423..2eeba80 100644
--- a/pkg/front_end/test/fasta/expression_test.dart
+++ b/pkg/front_end/test/fasta/expression_test.dart
@@ -46,7 +46,8 @@
 
 import '../../lib/src/fasta/testing/kernel_chain.dart' show runDiff, openWrite;
 
-import '../../lib/src/fasta/kernel/utils.dart' show writeComponentToFile;
+import '../../lib/src/fasta/kernel/utils.dart'
+    show writeComponentToFile, serializeProcedure;
 
 const JsonEncoder json = const JsonEncoder.withIndent("  ");
 
@@ -284,6 +285,37 @@
 
   String get name => "compile expression";
 
+  // Compile [test.expression], update [test.errors] with results.
+  // As a side effect - verify that generated procedure can be serialized.
+  void compileExpression(TestCase test, IncrementalCompiler compiler,
+      Component component, Context context) async {
+    Map<String, DartType> definitions = {};
+    for (String name in test.definitions) {
+      definitions[name] = new DynamicType();
+    }
+    List<TypeParameter> typeParams = [];
+    for (String name in test.typeDefinitions) {
+      typeParams.add(new TypeParameter(name, new DynamicType()));
+    }
+
+    Procedure compiledProcedure = await compiler.compileExpression(
+        test.expression,
+        definitions,
+        typeParams,
+        "debugExpr",
+        test.library,
+        test.className,
+        test.isStaticMethod);
+    List<CompilationMessage> errors = context.takeErrors();
+    test.results.add(new CompilationResult(compiledProcedure, errors));
+    if (compiledProcedure != null) {
+      // Confirm we can serialize generated procedure.
+      component.computeCanonicalNames();
+      List<int> list = serializeProcedure(compiledProcedure);
+      assert(list.length > 0);
+    }
+  }
+
   Future<Result<List<TestCase>>> run(
       List<TestCase> tests, Context context) async {
     for (var test in tests) {
@@ -305,39 +337,19 @@
         context.fileSystem.entityForUri(dillFileUri).writeAsBytesSync(
             await new File.fromUri(dillFileUri).readAsBytes());
       }
+      compileExpression(test, sourceCompiler, component, context);
 
       var dillCompiler =
           new IncrementalCompiler(context.compilerContext, dillFileUri);
-      await dillCompiler.computeDelta(entryPoint: test.entryPoint);
+      component = await dillCompiler.computeDelta(entryPoint: test.entryPoint);
+      component.computeCanonicalNames();
       await dillFile.delete();
 
       errors = context.takeErrors();
-
       // Since it compiled successfully from source, the bootstrap-from-Dill
       // should also succeed without errors.
       assert(errors.isEmpty);
-
-      Map<String, DartType> definitions = {};
-      for (String name in test.definitions) {
-        definitions[name] = new DynamicType();
-      }
-      List<TypeParameter> typeParams = [];
-      for (String name in test.typeDefinitions) {
-        typeParams.add(new TypeParameter(name, new DynamicType()));
-      }
-
-      for (var compiler in [sourceCompiler, dillCompiler]) {
-        Procedure compiledProcedure = await compiler.compileExpression(
-            test.expression,
-            definitions,
-            typeParams,
-            "debugExpr",
-            test.library,
-            test.className,
-            test.isStaticMethod);
-        var errors = context.takeErrors();
-        test.results.add(new CompilationResult(compiledProcedure, errors));
-      }
+      compileExpression(test, dillCompiler, component, context);
     }
     return new Result.pass(tests);
   }
@@ -377,7 +389,7 @@
     };
 
   final ProcessedOptions options =
-      new ProcessedOptions(optionBuilder, [entryPoint]);
+      new ProcessedOptions(options: optionBuilder, inputs: [entryPoint]);
 
   final ExternalStateSnapshot snapshot =
       new ExternalStateSnapshot(await options.loadSdkSummary(null));
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index b8baa33..cd77f74 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -59,7 +59,7 @@
         KernelDelayedAssignment,
         KernelDelayedPostfixIncrement,
         KernelIndexedAccessGenerator,
-        KernelLargeIntAccessGenerator,
+        KernelIntAccessGenerator,
         KernelLoadLibraryGenerator,
         KernelNullAwarePropertyAccessGenerator,
         KernelPrefixUseGenerator,
@@ -222,8 +222,8 @@
         "ReadOnlyAccessGenerator(offset: 4, expression: expression,"
         " plainNameForRead: foo, value: null)",
         new KernelReadOnlyAccessGenerator(helper, token, expression, "foo"));
-    check("LargeIntAccessGenerator(offset: 4, lexeme: myToken)",
-        new KernelLargeIntAccessGenerator(helper, token));
+    check("IntAccessGenerator(offset: 4, lexeme: myToken)",
+        new KernelIntAccessGenerator(helper, token));
     check(
         "ParenthesizedExpressionGenerator(offset: 4, expression: expression,"
         " plainNameForRead: null, value: null)",
diff --git a/pkg/front_end/test/fasta/incremental_hello_test.dart b/pkg/front_end/test/fasta/incremental_hello_test.dart
index bd0929e..ff7c678 100644
--- a/pkg/front_end/test/fasta/incremental_hello_test.dart
+++ b/pkg/front_end/test/fasta/incremental_hello_test.dart
@@ -55,7 +55,7 @@
   final Uri helloDart = Uri.base.resolve("pkg/front_end/testcases/hello.dart");
 
   final ProcessedOptions options =
-      new ProcessedOptions(optionBuilder, [helloDart]);
+      new ProcessedOptions(options: optionBuilder, inputs: [helloDart]);
 
   IncrementalCompiler compiler =
       new IncrementalCompiler(new CompilerContext(options));
diff --git a/pkg/front_end/test/fasta/incremental_test.dart b/pkg/front_end/test/fasta/incremental_test.dart
index 3609b70..34f0a73 100644
--- a/pkg/front_end/test/fasta/incremental_test.dart
+++ b/pkg/front_end/test/fasta/incremental_test.dart
@@ -226,7 +226,7 @@
     };
 
   final ProcessedOptions options =
-      new ProcessedOptions(optionBuilder, [entryPoint]);
+      new ProcessedOptions(options: optionBuilder, inputs: [entryPoint]);
 
   final ExternalStateSnapshot snapshot =
       new ExternalStateSnapshot(await options.loadSdkSummary(null));
diff --git a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
index ed8df9c..f47b461 100644
--- a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
+++ b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
@@ -22,46 +22,30 @@
   /// Indicates whether the tests should set up [Token.previous].
   bool get setPrevious;
 
-  void test_insertTokenAfter_end_single() {
+  void test_insertToken_end() {
     var a = _makeToken(0, 'a');
     var b = _makeToken(1, 'b');
     var eof = _link([a]);
     var rewriter = new TokenStreamRewriter();
-    expect(rewriter.insertTokenAfter(a, b), same(a));
+    expect(rewriter.insertToken(a, b), same(b));
     expect(a.next, same(b));
     expect(b.next, same(eof));
     expect(eof.previous, same(b));
     expect(b.previous, same(a));
   }
 
-  void test_insertTokenAfter_middle_multiple() {
-    var a = _makeToken(0, 'a');
-    var b = _makeToken(1, 'b');
-    var c = _makeToken(2, 'c');
-    var d = _makeToken(3, 'd');
-    var e = _makeToken(4, 'e');
-    _link([a, b, e]);
-    _link([c, d]);
-    var rewriter = new TokenStreamRewriter();
-    rewriter.insertTokenAfter(b, c);
-    expect(a.next, same(b));
-    expect(b.next, same(c));
-    expect(c.next, same(d));
-    expect(d.next, same(e));
-  }
-
-  void test_insertTokenAfter_middle_single() {
+  void test_insertToken_middle() {
     var a = _makeToken(0, 'a');
     var b = _makeToken(1, 'b');
     var c = _makeToken(2, 'c');
     _link([a, c]);
     var rewriter = new TokenStreamRewriter();
-    rewriter.insertTokenAfter(a, b);
+    rewriter.insertToken(a, b);
     expect(a.next, same(b));
     expect(b.next, same(c));
   }
 
-  void test_insertTokenAfter_second_insertion_earlier_in_stream() {
+  void test_insertToken_second_insertion_earlier_in_stream() {
     var a = _makeToken(0, 'a');
     var b = _makeToken(1, 'b');
     var c = _makeToken(2, 'c');
@@ -69,12 +53,12 @@
     var e = _makeToken(4, 'e');
     _link([a, c, e]);
     var rewriter = new TokenStreamRewriter();
-    rewriter.insertTokenAfter(c, d);
+    rewriter.insertToken(c, d);
     expect(c.next, same(d));
     expect(d.next, same(e));
     // The next call to rewriter should be able to find the insertion point
     // even though it is before the insertion point used above.
-    rewriter.insertTokenAfter(a, b);
+    rewriter.insertToken(a, b);
     expect(a.next, same(b));
     expect(b.next, same(c));
   }
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 02bf15a..c3bde5b 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -34,7 +34,7 @@
 import 'package:vm/target/vm.dart' show VmTarget;
 
 import 'package:front_end/src/api_prototype/compiler_options.dart'
-    show CompilerOptions;
+    show CompilerOptions, FormattedMessage, Severity;
 
 import 'package:front_end/src/api_prototype/standard_file_system.dart'
     show StandardFileSystem;
@@ -102,6 +102,8 @@
   final bool onlyCrashes;
   final Map<Component, KernelTarget> componentToTarget =
       <Component, KernelTarget>{};
+  final Map<Component, StringBuffer> componentToProblems =
+      <Component, StringBuffer>{};
   final Uri platformBinaries;
   Uri platformUri;
   Component platform;
@@ -137,6 +139,7 @@
     if (strongMode) {
       steps.add(const TypeCheck());
     }
+    steps.add(const EnsureNoErrors());
     if (fullCompile && !skipVm) {
       steps.add(const Transform());
       if (!ignoreExpectations) {
@@ -146,6 +149,7 @@
                 : ".outline.transformed.expect",
             updateExpectations: updateExpectations));
       }
+      steps.add(const EnsureNoErrors());
       steps.add(const WriteDill());
       steps.add(const Run());
     }
@@ -185,9 +189,14 @@
     Uri sdk = Uri.base.resolve("sdk/");
     Uri vm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
     Uri packages = Uri.base.resolve(".packages");
-    var options = new ProcessedOptions(new CompilerOptions()
-      ..sdkRoot = sdk
-      ..packagesFileUri = packages);
+    var options = new ProcessedOptions(
+        options: new CompilerOptions()
+          ..onProblem = (FormattedMessage problem, Severity severity,
+              List<FormattedMessage> context) {
+            throw problem.formatted;
+          }
+          ..sdkRoot = sdk
+          ..packagesFileUri = packages);
     UriTranslator uriTranslator = await options.getUriTranslator();
     bool strongMode = environment.containsKey(STRONG_MODE);
     bool onlyCrashes = environment["onlyCrashes"] == "true";
@@ -264,7 +273,21 @@
 
   Future<Result<Component>> run(
       TestDescription description, FastaContext context) async {
-    var options = new ProcessedOptions(new CompilerOptions());
+    StringBuffer errors = new StringBuffer();
+    ProcessedOptions options = new ProcessedOptions(
+        options: new CompilerOptions()
+          ..onProblem = (FormattedMessage problem, Severity severity,
+              List<FormattedMessage> context) {
+            if (errors.isNotEmpty) {
+              errors.write("\n\n");
+            }
+            errors.write(problem.formatted);
+            for (FormattedMessage c in context) {
+              errors.write("\n");
+              errors.write(c.formatted);
+            }
+          },
+        inputs: <Uri>[description.uri]);
     return await CompilerContext.runWithOptions(options, (_) async {
       // Disable colors to ensure that expectation files are the same across
       // platforms and independent of stdin/stderr.
@@ -309,6 +332,7 @@
       }
       context.componentToTarget.clear();
       context.componentToTarget[p] = sourceTarget;
+      context.componentToProblems[p] = errors;
       return pass(p);
     });
   }
@@ -354,3 +378,17 @@
     }
   }
 }
+
+class EnsureNoErrors extends Step<Component, Component, FastaContext> {
+  const EnsureNoErrors();
+
+  String get name => "check errors";
+
+  Future<Result<Component>> run(
+      Component component, FastaContext context) async {
+    StringBuffer buffer = context.componentToProblems[component];
+    return buffer.isEmpty
+        ? pass(component)
+        : fail(component, """Unexpected errors:\n$buffer""");
+  }
+}
diff --git a/pkg/front_end/test/fasta/tool_test.dart b/pkg/front_end/test/fasta/tool_test.dart
index 21805d7..d94ba75 100644
--- a/pkg/front_end/test/fasta/tool_test.dart
+++ b/pkg/front_end/test/fasta/tool_test.dart
@@ -15,18 +15,15 @@
 
 const List<String> subtools = const <String>[
   "abcompile",
-  "analyzer-compile",
   "compile",
   "compile-platform",
   "log",
   "logd",
   "outline",
   "parser",
-  "run",
   "scanner",
   "dump-partial",
   "dump-ir",
-  "kernel-service",
   "testing",
   "generate-messages",
 ];
@@ -65,12 +62,6 @@
 """,
       "stderr": "",
     },
-    "analyzer-compile": {
-      "exitCode": 2,
-      "stdout": "",
-      "stderr": "'analyzer-compile' isn't supported anymore,"
-          " please use 'compile' instead.\n",
-    },
     "compile": {
       "exitCode": 1,
       "stdout": """
@@ -120,12 +111,6 @@
       "stdout": "",
       "stderr": "",
     },
-    "run": {
-      "exitCode": 2,
-      "stdout": "",
-      "stderr": "'run' isn't supported anymore,"
-          " please use 'kernel-service' instead.\n",
-    },
     "scanner": {
       "exitCode": 0,
       "stderr": "",
@@ -141,10 +126,6 @@
       "stdout": "",
       "stderr": "Usage: dump-ir dillfile [output]\n",
     },
-    "kernel-service": {
-      "exitCode": 255,
-      "stdout": "",
-    },
   };
 
   for (String subtool in testedSubtools) {
@@ -167,11 +148,6 @@
         Expect.stringEquals(expectation["stderr"], result.stderr);
         break;
 
-      case "kernel-service":
-        Expect.stringEquals(expectation["stdout"], result.stdout);
-        Expect.isTrue(result.stderr.startsWith("Usage: dart ["));
-        break;
-
       default:
         Expect.stringEquals(expectation["stdout"], result.stdout);
         Expect.stringEquals(expectation["stderr"], result.stderr);
diff --git a/pkg/front_end/test/fasta/unlinked_scope_test.dart b/pkg/front_end/test/fasta/unlinked_scope_test.dart
index 3b1fd5e..b7820d0 100644
--- a/pkg/front_end/test/fasta/unlinked_scope_test.dart
+++ b/pkg/front_end/test/fasta/unlinked_scope_test.dart
@@ -100,7 +100,7 @@
 
 main() {
   CompilerContext context = new CompilerContext(new ProcessedOptions(
-      new CompilerOptions()
+      options: new CompilerOptions()
         ..onProblem = (FormattedMessage problem, Severity severity,
             List<FormattedMessage> context) {
           handler(problem, severity, context);
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 68f91f0..ba72579 100644
--- a/pkg/front_end/test/incremental_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_test.dart
@@ -483,7 +483,9 @@
 
   TestIncrementalCompiler(CompilerOptions options, this.entryPoint,
       [Uri initializeFrom])
-      : super(new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+      : super(
+            new CompilerContext(
+                new ProcessedOptions(options: options, inputs: [entryPoint])),
             initializeFrom);
 
   @override
diff --git a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
index deced6f..2903688 100644
--- a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
@@ -67,7 +67,8 @@
     formattedErrors.clear();
     formattedWarnings.clear();
     IncrementalCompiler compiler = new IncrementalCompiler(
-        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        new CompilerContext(
+            new ProcessedOptions(options: options, inputs: [entryPoint])),
         initializeFrom);
     await compiler.computeDelta();
     if (compiler.initializedFromDill) {
@@ -128,7 +129,8 @@
 
   Future<Null> test() async {
     IncrementalCompiler compiler = new IncrementalCompiler(
-        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        new CompilerContext(
+            new ProcessedOptions(options: options, inputs: [entryPoint])),
         initializeFrom);
 
     Component componentGood = await compiler.computeDelta();
@@ -137,7 +139,8 @@
 
     // Initialize from good dill file should be ok.
     compiler = new IncrementalCompiler(
-        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        new CompilerContext(
+            new ProcessedOptions(options: options, inputs: [entryPoint])),
         initializeFrom);
     compiler.invalidate(entryPoint);
     Component component = await compiler.computeDelta();
diff --git a/pkg/front_end/test/packages_format_error_test.dart b/pkg/front_end/test/packages_format_error_test.dart
index f960378..e776b71 100644
--- a/pkg/front_end/test/packages_format_error_test.dart
+++ b/pkg/front_end/test/packages_format_error_test.dart
@@ -23,8 +23,8 @@
   Uri packages = root.resolve(".packages");
   fs.entityForUri(packages).writeAsStringSync("bad\n");
   List<FormattedMessage> messages = <FormattedMessage>[];
-  CompilerContext c =
-      new CompilerContext(new ProcessedOptions(new CompilerOptions()
+  CompilerContext c = new CompilerContext(new ProcessedOptions(
+      options: new CompilerOptions()
         ..fileSystem = fs
         ..onProblem = (message, severity, context) {
           messages.add(message);
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index 13c42fa..ec9cf42 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -38,7 +38,7 @@
   test_compileSdk_false() {
     for (var value in [false, true]) {
       var raw = new CompilerOptions()..compileSdk = value;
-      var processed = new ProcessedOptions(raw);
+      var processed = new ProcessedOptions(options: raw);
       expect(processed.compileSdk, value);
     }
   }
@@ -49,21 +49,21 @@
     var raw = new CompilerOptions()
       ..sdkRoot = Uri.parse('org-dartlang-test:///sdk/dir/')
       ..compileSdk = false;
-    expect(new ProcessedOptions(raw).sdkSummary,
+    expect(new ProcessedOptions(options: raw).sdkSummary,
         Uri.parse('org-dartlang-test:///sdk/dir/vm_platform_strong.dill'));
 
     // But it is left null when compile-sdk is true
     raw = new CompilerOptions()
       ..sdkRoot = Uri.parse('org-dartlang-test:///sdk/dir/')
       ..compileSdk = true;
-    expect(new ProcessedOptions(raw).sdkSummary, null);
+    expect(new ProcessedOptions(options: raw).sdkSummary, null);
   }
 
   test_fileSystem_noBazelRoots() {
     // When no bazel roots are specified, the filesystem should be passed
     // through unmodified.
     var raw = new CompilerOptions()..fileSystem = fileSystem;
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     expect(processed.fileSystem, same(fileSystem));
   }
 
@@ -75,7 +75,7 @@
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..sdkSummary = uri;
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
 
     var bytes = await processed.loadSdkSummaryBytes();
     expect(bytes, isNotEmpty);
@@ -100,7 +100,7 @@
   }
 
   Future<Null> checkMockSummary(CompilerOptions raw) async {
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var sdkSummary = await processed.loadSdkSummary(new CanonicalName.root());
     expect(sdkSummary.libraries.single.importUri,
         mockSummary.libraries.single.importUri);
@@ -118,7 +118,7 @@
       ..fileSystem = fileSystem
       ..librariesSpecificationUri =
           Uri.parse('org-dartlang-test:///libraries.json');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     expect(uriTranslator.dartLibraries.libraryInfoFor('foo').uri.path,
         '/bar.dart');
@@ -137,7 +137,7 @@
       ..packagesFileUri = Uri.parse('org-dartlang-test:///.packages')
       ..compileSdk = true
       ..sdkRoot = Uri.parse('org-dartlang-test:///mysdk/');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     expect(uriTranslator.dartLibraries.libraryInfoFor('foo').uri.path,
         '/mysdk/lib/bar.dart');
@@ -156,7 +156,7 @@
       ..packagesFileUri = Uri.parse('org-dartlang-test:///.packages')
       ..compileSdk = false // libraries.json is only inferred if true
       ..sdkRoot = Uri.parse('org-dartlang-test:///mysdk/');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     expect(uriTranslator.dartLibraries.libraryInfoFor('foo'), isNull);
   }
@@ -180,7 +180,7 @@
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..packagesFileUri = Uri.parse('org-dartlang-test:///explicit.packages');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'baz', uriTranslator.packages);
   }
@@ -199,7 +199,7 @@
       ..fileSystem = fileSystem
       ..packagesFileUri =
           Uri.parse('org-dartlang-test:///base/location/explicit.packages');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'base/location/baz', uriTranslator.packages);
   }
@@ -216,7 +216,7 @@
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..packagesFileUri = Uri.parse('org-dartlang-test:///explicit.packages');
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'baz', uriTranslator.packages);
   }
@@ -240,7 +240,8 @@
         .writeAsStringSync('foo:baz\n');
     var raw = new CompilerOptions()..fileSystem = fileSystem;
     var processed = new ProcessedOptions(
-        raw, [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
+        options: raw,
+        inputs: [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'base/location/baz', uriTranslator.packages);
   }
@@ -260,7 +261,8 @@
         .writeAsStringSync('foo:baz\n');
     var raw = new CompilerOptions()..fileSystem = fileSystem;
     var processed = new ProcessedOptions(
-        raw, [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
+        options: raw,
+        inputs: [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'base/baz', uriTranslator.packages);
   }
@@ -284,7 +286,8 @@
         .writeAsStringSync('foo:baz\n');
     var raw = new CompilerOptions()..fileSystem = fileSystem;
     var processed = new ProcessedOptions(
-        raw, [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
+        options: raw,
+        inputs: [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
     var uriTranslator = await processed.getUriTranslator();
     checkPackageExpansion('foo', 'base/baz', uriTranslator.packages);
   }
@@ -300,7 +303,8 @@
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
     var processed = new ProcessedOptions(
-        raw, [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
+        options: raw,
+        inputs: [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
     var uriTranslator = await processed.getUriTranslator();
     expect(errors, isEmpty);
     expect(uriTranslator.packages.asMap(), isEmpty);
@@ -316,7 +320,7 @@
       ..fileSystem = fileSystem
       ..packagesFileUri = new Uri()
       ..onError = (e) => errors.add(e);
-    var processed = new ProcessedOptions(raw);
+    var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     expect(uriTranslator.packages.asMap(), isEmpty);
     expect(errors.single.message,
@@ -331,7 +335,7 @@
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw);
+    var options = new ProcessedOptions(options: raw);
     var result = await options.validateOptions();
     expect(errors.single.message, messageMissingInput.message);
     expect(result, isFalse);
@@ -342,7 +346,8 @@
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     var result = await options.validateOptions();
     expect(errors, isEmpty);
     expect(result, isTrue);
@@ -367,7 +372,8 @@
       ..sdkRoot = sdkRoot
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     var result = await options.validateOptions();
     // Note: we check this first so test failures show the cause directly.
     expect(errors, isEmpty);
@@ -384,7 +390,8 @@
       ..sdkRoot = sdkRoot
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
     expect(errors.first.message,
         startsWith(_stringPrefixOf(templateSdkRootNotFound)));
@@ -402,7 +409,8 @@
       ..sdkSummary = sdkSummary
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     var result = await options.validateOptions();
     expect(errors, isEmpty);
     expect(result, isTrue);
@@ -418,7 +426,8 @@
       ..sdkSummary = sdkSummary
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
     expect(errors.single.message,
         startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
@@ -439,7 +448,8 @@
       ..sdkRoot = sdkRoot
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     var result = await options.validateOptions();
     expect(errors, isEmpty);
     expect(result, isTrue);
@@ -457,7 +467,8 @@
       ..sdkSummary = sdkSummary
       ..fileSystem = fileSystem
       ..onError = (e) => errors.add(e);
-    var options = new ProcessedOptions(raw, [Uri.parse('foo.dart')]);
+    var options =
+        new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
     expect(errors.single.message,
         startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
diff --git a/pkg/front_end/test/src/incremental/kernel_driver_test.dart b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
index 0b33811..2769682 100644
--- a/pkg/front_end/test/src/incremental/kernel_driver_test.dart
+++ b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
@@ -1008,8 +1008,8 @@
       ..strongMode = true
       ..target = new NoneTarget(new TargetFlags(strongMode: true));
 
-    driver = new KernelDriver(
-        new ProcessedOptions(options), uriTranslator, new KernelErrorListener(),
+    driver = new KernelDriver(new ProcessedOptions(options: options),
+        uriTranslator, new KernelErrorListener(),
         sdkOutlineBytes: sdkOutlineBytes, fileAddedFn: fileAddedFn);
   }
 
diff --git a/pkg/front_end/test/whole_program_test.dart b/pkg/front_end/test/whole_program_test.dart
index d342a04..9c63521 100644
--- a/pkg/front_end/test/whole_program_test.dart
+++ b/pkg/front_end/test/whole_program_test.dart
@@ -56,7 +56,6 @@
 
   final List<String> arguments = <String>[
     '--packages=${packagesFile.toFilePath()}',
-    '--no_preview_dart_2',
     '-c',
     compiler.toFilePath(),
     '--platform=${platformDill.toFilePath()}',
diff --git a/pkg/front_end/testcases/accessors.dart.direct.expect b/pkg/front_end/testcases/accessors.dart.direct.expect
index 342baaf..4f83131 100644
--- a/pkg/front_end/testcases/accessors.dart.direct.expect
+++ b/pkg/front_end/testcases/accessors.dart.direct.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/accessors.dart:16:13: Warning: Getter not found: 'onlySetter'.
+//       print(onlySetter);
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/accessors.dart:25:11: Warning: Getter not found: 'onlySetter'.
+//     print(onlySetter);
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/accessors.dart:40:11: Warning: Getter not found: 'onlySetter'.
+//     print(onlySetter);
+//           ^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/ambiguous_exports.dart.direct.expect b/pkg/front_end/testcases/ambiguous_exports.dart.direct.expect
index b45d2fc..c3c8517 100644
--- a/pkg/front_end/testcases/ambiguous_exports.dart.direct.expect
+++ b/pkg/front_end/testcases/ambiguous_exports.dart.direct.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/ambiguous_exports.dart.direct.transformed.expect b/pkg/front_end/testcases/ambiguous_exports.dart.direct.transformed.expect
index b45d2fc..b993c56 100644
--- a/pkg/front_end/testcases/ambiguous_exports.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/ambiguous_exports.dart.direct.transformed.expect
@@ -1,3 +1,9 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/ambiguous_exports.dart.outline.expect b/pkg/front_end/testcases/ambiguous_exports.dart.outline.expect
index b45d2fc..dc412d7 100644
--- a/pkg/front_end/testcases/ambiguous_exports.dart.outline.expect
+++ b/pkg/front_end/testcases/ambiguous_exports.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/ambiguous_exports.dart.strong.expect b/pkg/front_end/testcases/ambiguous_exports.dart.strong.expect
index b45d2fc..c3c8517 100644
--- a/pkg/front_end/testcases/ambiguous_exports.dart.strong.expect
+++ b/pkg/front_end/testcases/ambiguous_exports.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/ambiguous_exports.dart.strong.transformed.expect b/pkg/front_end/testcases/ambiguous_exports.dart.strong.transformed.expect
index b45d2fc..b993c56 100644
--- a/pkg/front_end/testcases/ambiguous_exports.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/ambiguous_exports.dart.strong.transformed.expect
@@ -1,3 +1,9 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/hello.dart' and 'pkg/front_end/testcases/map.dart'.
+// export 'map.dart' show main;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/annotation_eof.dart.direct.expect b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
index ff821dc..5acfc4b 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.direct.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
@@ -1,4 +1,8 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
 
diff --git a/pkg/front_end/testcases/annotation_eof.dart.direct.transformed.expect b/pkg/front_end/testcases/annotation_eof.dart.direct.transformed.expect
index ff821dc..1be62d2 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
 
diff --git a/pkg/front_end/testcases/annotation_eof.dart.outline.expect b/pkg/front_end/testcases/annotation_eof.dart.outline.expect
index e4f3929..464bbee 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.outline.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.outline.expect
@@ -1,6 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
 library;
 import self as self;
 
 static method main() → dynamic
   ;
-
diff --git a/pkg/front_end/testcases/annotation_eof.dart.strong.expect b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
index ff821dc..5acfc4b 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.strong.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
@@ -1,4 +1,8 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
 
diff --git a/pkg/front_end/testcases/annotation_eof.dart.strong.transformed.expect b/pkg/front_end/testcases/annotation_eof.dart.strong.transformed.expect
index ff821dc..1be62d2 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
 
diff --git a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
index 5f3f9aa..df4ee91 100644
--- a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
+++ b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/argument_mismatch.dart:10:34: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   /*@warning=MethodNotFound*/ foo(null);
+//                                  ^
+// pkg/front_end/testcases/argument_mismatch.dart:7:29: Warning: Found this candidate, but the arguments don't match.
+// /*@context=CandidateFound*/ foo() {}
+//                             ^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
index f7bb244..e33f013 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
@@ -1,4 +1,44 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set b();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set c(x, y);
+//            ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+// set b();
+//      ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+// set c(x, y);
+//      ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Warning: The class 'B' is abstract and can't be instantiated.
+//     new B();
+//         ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.transformed.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.transformed.expect
index f7bb244..6c9d767 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
index 1f7abc8..062086d 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set b();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set c(x, y);
+//            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index 1d77ca6..07155ae 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -1,4 +1,44 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set b();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set c(x, y);
+//            ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+// set b();
+//      ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+// set c(x, y);
+//      ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.
+//     new B();
+//         ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.transformed.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.transformed.expect
index 5876551..de4fa240 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/bug21938.dart.strong.expect b/pkg/front_end/testcases/bug21938.dart.strong.expect
index cc7a72b..4417d30 100644
--- a/pkg/front_end/testcases/bug21938.dart.strong.expect
+++ b/pkg/front_end/testcases/bug21938.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x /*@error=UndefinedMethod*/ ();
+//    ^
+//
+// pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x /*@error=UndefinedMethod*/ (3);
+//    ^
+//
+// pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x. /*@error=UndefinedMethod*/ call();
+//                                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bug30695.dart.direct.expect b/pkg/front_end/testcases/bug30695.dart.direct.expect
index b07b4f4..db1bcbd 100644
--- a/pkg/front_end/testcases/bug30695.dart.direct.expect
+++ b/pkg/front_end/testcases/bug30695.dart.direct.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug30695.dart:11:3: Warning: Can't declare a member that conflicts with an inherited one.
+//   foo() => 42;
+//   ^
+// pkg/front_end/testcases/bug30695.dart:6:7: Warning: This is the inherited member.
+//   var foo = 42;
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bug30695.dart.outline.expect b/pkg/front_end/testcases/bug30695.dart.outline.expect
index 2771dbb..2f3f34e 100644
--- a/pkg/front_end/testcases/bug30695.dart.outline.expect
+++ b/pkg/front_end/testcases/bug30695.dart.outline.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug30695.dart:11:3: Warning: Can't declare a member that conflicts with an inherited one.
+//   foo() => 42;
+//   ^
+// pkg/front_end/testcases/bug30695.dart:6:7: Warning: This is the inherited member.
+//   var foo = 42;
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bug30695.dart.strong.expect b/pkg/front_end/testcases/bug30695.dart.strong.expect
index 070f366..1375e22 100644
--- a/pkg/front_end/testcases/bug30695.dart.strong.expect
+++ b/pkg/front_end/testcases/bug30695.dart.strong.expect
@@ -1,4 +1,13 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug30695.dart:11:3: Error: Can't declare a member that conflicts with an inherited one.
+//   foo() => 42;
+//   ^
+// pkg/front_end/testcases/bug30695.dart:6:7: Error: This is the inherited member.
+//   var foo = 42;
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/bug30695.dart:11:3: Error: Can't declare a member that conflicts with an inherited one.
 //   foo() => 42;
diff --git a/pkg/front_end/testcases/bug31124.dart.direct.expect b/pkg/front_end/testcases/bug31124.dart.direct.expect
index e470ed2..559f7d8 100644
--- a/pkg/front_end/testcases/bug31124.dart.direct.expect
+++ b/pkg/front_end/testcases/bug31124.dart.direct.expect
@@ -1,8 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+// pkg/front_end/testcases/bug31124.dart:1:5: Error: Previous declaration of 'a'.
+// var a = () => 'b';a();
+//     ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+
 library;
 import self as self;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
-var a = () => 'b';a();
-^";
-}
+static field dynamic a;
diff --git a/pkg/front_end/testcases/bug31124.dart.direct.transformed.expect b/pkg/front_end/testcases/bug31124.dart.direct.transformed.expect
index e470ed2..b75686c 100644
--- a/pkg/front_end/testcases/bug31124.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/bug31124.dart.direct.transformed.expect
@@ -1,8 +1,15 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+
 library;
 import self as self;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
-var a = () => 'b';a();
-^";
-}
+static field dynamic a;
diff --git a/pkg/front_end/testcases/bug31124.dart.outline.expect b/pkg/front_end/testcases/bug31124.dart.outline.expect
index 59b88ac..ef07e67 100644
--- a/pkg/front_end/testcases/bug31124.dart.outline.expect
+++ b/pkg/front_end/testcases/bug31124.dart.outline.expect
@@ -1,5 +1,18 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+// pkg/front_end/testcases/bug31124.dart:1:5: Error: Previous declaration of 'a'.
+// var a = () => 'b';a();
+//     ^
+
 library;
 import self as self;
 
 static field dynamic a;
-static abstract method a() → dynamic;
diff --git a/pkg/front_end/testcases/bug31124.dart.strong.expect b/pkg/front_end/testcases/bug31124.dart.strong.expect
index e470ed2..559f7d8 100644
--- a/pkg/front_end/testcases/bug31124.dart.strong.expect
+++ b/pkg/front_end/testcases/bug31124.dart.strong.expect
@@ -1,8 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+// pkg/front_end/testcases/bug31124.dart:1:5: Error: Previous declaration of 'a'.
+// var a = () => 'b';a();
+//     ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+
 library;
 import self as self;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
-var a = () => 'b';a();
-^";
-}
+static field dynamic a;
diff --git a/pkg/front_end/testcases/bug31124.dart.strong.transformed.expect b/pkg/front_end/testcases/bug31124.dart.strong.transformed.expect
index e470ed2..b75686c 100644
--- a/pkg/front_end/testcases/bug31124.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/bug31124.dart.strong.transformed.expect
@@ -1,8 +1,15 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/bug31124.dart:1:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+
 library;
 import self as self;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
-var a = () => 'b';a();
-^";
-}
+static field dynamic a;
diff --git a/pkg/front_end/testcases/bug32414a.dart.strong.expect b/pkg/front_end/testcases/bug32414a.dart.strong.expect
index 052c06d..bef880c 100644
--- a/pkg/front_end/testcases/bug32414a.dart.strong.expect
+++ b/pkg/front_end/testcases/bug32414a.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   b = 42;
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/bug33298.dart.strong.expect b/pkg/front_end/testcases/bug33298.dart.strong.expect
index e1f9aaf..5c96b04 100644
--- a/pkg/front_end/testcases/bug33298.dart.strong.expect
+++ b/pkg/front_end/testcases/bug33298.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/bug33298.dart:28:44: Error: The argument type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) → #lib1::C::call::T' can't be assigned to the parameter type '(dart.core::String) → dynamic'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::String) → dynamic'.
+//   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+//                                            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.direct.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.direct.expect
index d17f162..199b7b0 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.direct.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Warning: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   x as lib.C;
+//        ^^^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
index 9360419..8ec92a4 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   x as lib.C;
+//        ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.transformed.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.transformed.expect
index 9360419..102d021 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.direct.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.direct.expect
index 8fa0c48..c56363b 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.direct.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Warning: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   print(x is lib.C);
+//              ^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
index 75dd8d4..03bc9f5 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   print(x is lib.C);
+//              ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.transformed.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.transformed.expect
index 75dd8d4..1d4f45e 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.direct.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.direct.expect
index fe4fe2e..23dbb5f 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Warning: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   lib.C x = null;
+//   ^^^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
index 98139b2..f05771b 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+//   lib.C x = null;
+//   ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.transformed.expect
index 98139b2..a29a189 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.expect b/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.expect
index 6bcb407..47de836 100644
--- a/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.expect
+++ b/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.transformed.expect b/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.transformed.expect
index 6bcb407..1d27680 100644
--- a/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/circularity-via-initializing-formal.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
index 7b807bd..0e2fda7 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
@@ -1,8 +1,38 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:7: Error: Previous declaration of 'A'.
+// class A {
+//       ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
-class A {
-        ^";
+class A extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
 }
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.transformed.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.transformed.expect
index 7b807bd..a2f8868 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.transformed.expect
@@ -1,8 +1,25 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
-class A {
-        ^";
+class A extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
 }
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
index 2b25f5b..c818405 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
@@ -1,3 +1,16 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:7: Error: Previous declaration of 'A'.
+// class A {
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
@@ -10,7 +23,5 @@
   synthetic constructor •() → void
     ;
 }
-static method A() → dynamic
-  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
index 7b807bd..0e2fda7 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
@@ -1,8 +1,38 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:7: Error: Previous declaration of 'A'.
+// class A {
+//       ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
-class A {
-        ^";
+class A extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
 }
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.transformed.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.transformed.expect
index 7b807bd..a2f8868 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.transformed.expect
@@ -1,8 +1,25 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
-class A {
-        ^";
+class A extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
 }
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index 8f7efbe..44960a5 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -8,9 +8,8 @@
 
 DeltaBlue: Fail # Fasta and dartk disagree on static initializers
 ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
-bug31124: RuntimeError # Test has an intentional error
+bug31124: RuntimeError # Test has no main method (and we shouldn't add one).
 call: Fail # Test can't run.
-co19_language_metadata_syntax_t04: RuntimeError # Fasta doesn't recover well
 constructor_const_inference: RuntimeError # Test exercises strong mode semantics.  See also Issue #33813.
 external_import: RuntimeError # Expected -- test uses import which doesn't exist.
 fallthrough: Fail # Missing FallThroughError.
@@ -20,14 +19,12 @@
 inference/constructors_too_many_positional_arguments: Fail
 inference/downwards_inference_annotations_locals: Fail # Issue #30031
 inference/future_then_explicit_future: Fail
-inference/generic_methods_infer_js_builtin: Fail
+inference/generic_methods_infer_js_builtin: RuntimeError # Test attempts to access platform-private library leading to NSM.
 inference/infer_assign_to_index: Fail
 inference/infer_assign_to_property: Fail
 inference/infer_assign_to_property_custom: Fail
 inference/infer_type_cast: Fail
 inference/infer_typed_list_literal: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: RuntimeError
 instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
 instantiate_to_bound/non_simple_class_parametrized_typedef_cycle: RuntimeError # May be related to Issue 33479
@@ -99,8 +96,8 @@
 redirecting_factory_typeparam_test: Fail # Missing support for RedirectingFactoryConstructor.
 redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
 regress/issue_29975: Fail # Issue 29975.
-regress/issue_29976: RuntimeError # Issue 29976.
-regress/issue_29982: Fail # Issue 29982.
+regress/issue_29976: RuntimeError # Tests runtime behavior of error recovery.
+regress/issue_29982: RuntimeError # Tests runtime behavior of error recovery.
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_32972: RuntimeError
 regress/issue_33452: RuntimeError # Test has an intentional error
diff --git a/pkg/front_end/testcases/constructor_cycle.dart.direct.expect b/pkg/front_end/testcases/constructor_cycle.dart.direct.expect
index 9bb081d..b589a24 100644
--- a/pkg/front_end/testcases/constructor_cycle.dart.direct.expect
+++ b/pkg/front_end/testcases/constructor_cycle.dart.direct.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A.bar() : this.foo();
+//                  ^^^
+//
+// pkg/front_end/testcases/constructor_cycle.dart:9:9: Error: Redirecting constructers can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A() : this();
+//         ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
 // Try to have all constructors eventually redirect to a non-redirecting constructor.
diff --git a/pkg/front_end/testcases/constructor_cycle.dart.direct.transformed.expect b/pkg/front_end/testcases/constructor_cycle.dart.direct.transformed.expect
index 9bb081d..765d352 100644
--- a/pkg/front_end/testcases/constructor_cycle.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/constructor_cycle.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
 // Try to have all constructors eventually redirect to a non-redirecting constructor.
diff --git a/pkg/front_end/testcases/constructor_cycle.dart.strong.expect b/pkg/front_end/testcases/constructor_cycle.dart.strong.expect
index 9bb081d..b589a24 100644
--- a/pkg/front_end/testcases/constructor_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_cycle.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A.bar() : this.foo();
+//                  ^^^
+//
+// pkg/front_end/testcases/constructor_cycle.dart:9:9: Error: Redirecting constructers can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A() : this();
+//         ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
 // Try to have all constructors eventually redirect to a non-redirecting constructor.
diff --git a/pkg/front_end/testcases/constructor_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_cycle.dart.strong.transformed.expect
index 9bb081d..765d352 100644
--- a/pkg/front_end/testcases/constructor_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_cycle.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
 // Try to have all constructors eventually redirect to a non-redirecting constructor.
diff --git a/pkg/front_end/testcases/cycles.dart.direct.expect b/pkg/front_end/testcases/cycles.dart.direct.expect
index 25d9423..ca01a6a 100644
--- a/pkg/front_end/testcases/cycles.dart.direct.expect
+++ b/pkg/front_end/testcases/cycles.dart.direct.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
+// class A implements C {}
+//       ^
+//
+// pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.
+// class B extends A {}
+//       ^
+//
+// pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.
+// class C extends B implements D {}
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
 // class A implements C {}
diff --git a/pkg/front_end/testcases/cycles.dart.direct.transformed.expect b/pkg/front_end/testcases/cycles.dart.direct.transformed.expect
index 25d9423..4f1f53a 100644
--- a/pkg/front_end/testcases/cycles.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/cycles.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
 // class A implements C {}
diff --git a/pkg/front_end/testcases/cycles.dart.outline.expect b/pkg/front_end/testcases/cycles.dart.outline.expect
index 9c6a6f2..1c9d1e5 100644
--- a/pkg/front_end/testcases/cycles.dart.outline.expect
+++ b/pkg/front_end/testcases/cycles.dart.outline.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
+// class A implements C {}
+//       ^
+//
+// pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.
+// class B extends A {}
+//       ^
+//
+// pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.
+// class C extends B implements D {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/deferred_type_annotation.dart.direct.expect b/pkg/front_end/testcases/deferred_type_annotation.dart.direct.expect
index 8e7b027..1f6def8 100644
--- a/pkg/front_end/testcases/deferred_type_annotation.dart.direct.expect
+++ b/pkg/front_end/testcases/deferred_type_annotation.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/deferred_type_annotation.dart:7:5: Warning: The type '#lib1::C' is deferred loaded via prefix 'd' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'd' or use a supertype of '#lib1::C' that isn't deferred.
+// bad(d.C x) {}
+//     ^^^
+
 library;
 import self as self;
 import "./deferred_lib.dart" as def;
diff --git a/pkg/front_end/testcases/deferred_type_annotation.dart.strong.expect b/pkg/front_end/testcases/deferred_type_annotation.dart.strong.expect
index c92a44c..8a311e1 100644
--- a/pkg/front_end/testcases/deferred_type_annotation.dart.strong.expect
+++ b/pkg/front_end/testcases/deferred_type_annotation.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/deferred_type_annotation.dart:7:5: Error: The type '#lib1::C' is deferred loaded via prefix 'd' and can't be used as a type annotation.
+// Try removing 'deferred' from the import of 'd' or use a supertype of '#lib1::C' that isn't deferred.
+// bad(d.C x) {}
+//     ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/deferred_type_annotation.dart:7:5: Error: The type '#lib1::C' is deferred loaded via prefix 'd' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'd' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/deferred_type_annotation.dart.strong.transformed.expect b/pkg/front_end/testcases/deferred_type_annotation.dart.strong.transformed.expect
index c92a44c..61ff935 100644
--- a/pkg/front_end/testcases/deferred_type_annotation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/deferred_type_annotation.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/deferred_type_annotation.dart:7:5: Error: The type '#lib1::C' is deferred loaded via prefix 'd' and can't be used as a type annotation.
 // Try removing 'deferred' from the import of 'd' or use a supertype of '#lib1::C' that isn't deferred.
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart b/pkg/front_end/testcases/duplicated_declarations.dart
new file mode 100644
index 0000000..d971623
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef Typedef = void Function();
+
+typedef Typedef = Object Function();
+
+typedef void OldTypedef();
+
+typedef Object OldTypedef();
+
+var field = "1st";
+
+var field = "2nd";
+
+main() {
+  "1st";
+}
+
+main() {
+  "2nd";
+}
+
+foo() {
+  main();
+  print(field);
+  C.s();
+}
+
+class C {
+  C(a);
+  C(a, b);
+  var field = "1st";
+
+  var field = "2nd";
+
+  m() {
+    "1st";
+  }
+
+  m() {
+    "2nd";
+  }
+
+  static s() {
+    "1st";
+  }
+
+  static s() {
+    "2nd";
+  }
+
+  static f() => s;
+}
+
+class Sub extends C {
+  Sub() : super(null);
+  m() => super.m();
+}
+
+class C {
+  C._();
+}
+
+enum Enum {
+  Enum,
+  a,
+  a,
+  b,
+}
+
+enum Enum {
+  a,
+  b,
+  c,
+}
+
+enum AnotherEnum {
+  a,
+  b,
+  c,
+  _name,
+  index,
+  toString,
+  values,
+}
+
+useAnotherEnum() {
+  <String, Object>{
+    "AnotherEnum.a": AnotherEnum.a,
+    "AnotherEnum.b": AnotherEnum.b,
+    "AnotherEnum.c": AnotherEnum.c,
+    "AnotherEnum._name": AnotherEnum._name,
+    "AnotherEnum.index": AnotherEnum.index,
+    "AnotherEnum.toString": AnotherEnum.toString,
+    "AnotherEnum.values": AnotherEnum.values,
+  };
+}
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect b/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect
new file mode 100644
index 0000000..df7e42f
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect
@@ -0,0 +1,325 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:5:9: Error: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:9:14: Error: Previous declaration of 'OldTypedef'.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:13:5: Error: Previous declaration of 'field'.
+// var field = "1st";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:17:1: Error: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:32:3: Error: Previous declaration of ''.
+//   C(a);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:34:7: Error: Previous declaration of 'field'.
+//   var field = "1st";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:38:3: Error: Previous declaration of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+// pkg/front_end/testcases/duplicated_declarations.dart:46:10: Error: Previous declaration of 's'.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/duplicated_declarations.dart:31:7: Error: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:68:3: Error: Previous declaration of 'a'.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:66:6: Error: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of '_name'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'index'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'toString'.
+// enum AnotherEnum {
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'values'.
+// enum AnotherEnum {
+//      ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: Can't use 'main' because it is declared more than once.
+//   main();
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: Can't use 'field' because it is declared more than once.
+//   print(field);
+//         ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:28:3: Error: Can't use 'C' because it is declared more than once.
+//   C.s();
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: Can't use 's' because it is declared more than once.
+//   static f() => s;
+//                 ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:58:16: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   Sub() : super(null);
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:59:16: Warning: Superclass has no method named 'm'.
+//   m() => super.m();
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:94:38: Error: Can't use '_name' because it is declared more than once.
+//     "AnotherEnum._name": AnotherEnum._name,
+//                                      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:95:38: Error: Can't use 'index' because it is declared more than once.
+//     "AnotherEnum.index": AnotherEnum.index,
+//                                      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:96:41: Error: Can't use 'toString' because it is declared more than once.
+//     "AnotherEnum.toString": AnotherEnum.toString,
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:97:39: Error: Can't use 'values' because it is declared more than once.
+//     "AnotherEnum.values": AnotherEnum.values,
+//                                       ^^^^^^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
+class C#1 extends core::Object {
+  constructor _() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field dynamic field;
+  constructor •(dynamic a) → void
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: Can't use 's' because it is declared more than once.
+  static f() => s;
+                ^";
+}
+class Sub extends core::Object {
+  constructor •() → void
+    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    ;
+  method m() → dynamic
+    return super.m();
+}
+class Enum#1 extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum#1> values = const <self::Enum#1>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
+  static const field self::Enum#1 a = const self::Enum#1::•(0, "Enum.a");
+  static const field self::Enum#1 b = const self::Enum#1::•(1, "Enum.b");
+  static const field self::Enum#1 c = const self::Enum#1::•(2, "Enum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum#1::_name};
+}
+class Enum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::Enum, self::Enum::a, self::Enum::b];
+  static const field self::Enum Enum = const self::Enum::•(0, "Enum.Enum");
+  static const field self::Enum a = const self::Enum::•(1, "Enum.a");
+  static const field self::Enum b = const self::Enum::•(2, "Enum.b");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+class AnotherEnum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::AnotherEnum> values = const <self::AnotherEnum>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
+  static const field self::AnotherEnum a = const self::AnotherEnum::•(0, "AnotherEnum.a");
+  static const field self::AnotherEnum b = const self::AnotherEnum::•(1, "AnotherEnum.b");
+  static const field self::AnotherEnum c = const self::AnotherEnum::•(2, "AnotherEnum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::AnotherEnum::_name};
+}
+static field dynamic field;
+static method main() → dynamic {
+  "1st";
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: Can't use 'main' because it is declared more than once.
+  main();
+  ^".call();
+  core::print(invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: Can't use 'field' because it is declared more than once.
+  print(field);
+        ^");
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:28:3: Error: Can't use 'C' because it is declared more than once.
+  C.s();
+  ^".s();
+}
+static method useAnotherEnum() → dynamic {
+  <core::String, core::Object>{"AnotherEnum.a": self::AnotherEnum::a, "AnotherEnum.b": self::AnotherEnum::b, "AnotherEnum.c": self::AnotherEnum::c, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:94:38: Error: Can't use '_name' because it is declared more than once.
+    \"AnotherEnum._name\": AnotherEnum._name,
+                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:95:38: Error: Can't use 'index' because it is declared more than once.
+    \"AnotherEnum.index\": AnotherEnum.index,
+                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:96:41: Error: Can't use 'toString' because it is declared more than once.
+    \"AnotherEnum.toString\": AnotherEnum.toString,
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:97:39: Error: Can't use 'values' because it is declared more than once.
+    \"AnotherEnum.values\": AnotherEnum.values,
+                                      ^^^^^^"};
+}
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect b/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect
new file mode 100644
index 0000000..f583777
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect
@@ -0,0 +1,169 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
+class C#1 extends core::Object {
+  constructor _() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field dynamic field;
+  constructor •(dynamic a) → void
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: Can't use 's' because it is declared more than once.
+  static f() => s;
+                ^";
+}
+class Sub extends core::Object {
+  constructor •() → void
+    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    ;
+  method m() → dynamic
+    return super.m();
+}
+class Enum#1 extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum#1> values = const <self::Enum#1>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
+  static const field self::Enum#1 a = const self::Enum#1::•(0, "Enum.a");
+  static const field self::Enum#1 b = const self::Enum#1::•(1, "Enum.b");
+  static const field self::Enum#1 c = const self::Enum#1::•(2, "Enum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum#1::_name};
+}
+class Enum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::Enum, self::Enum::a, self::Enum::b];
+  static const field self::Enum Enum = const self::Enum::•(0, "Enum.Enum");
+  static const field self::Enum a = const self::Enum::•(1, "Enum.a");
+  static const field self::Enum b = const self::Enum::•(2, "Enum.b");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+class AnotherEnum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::AnotherEnum> values = const <self::AnotherEnum>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
+  static const field self::AnotherEnum a = const self::AnotherEnum::•(0, "AnotherEnum.a");
+  static const field self::AnotherEnum b = const self::AnotherEnum::•(1, "AnotherEnum.b");
+  static const field self::AnotherEnum c = const self::AnotherEnum::•(2, "AnotherEnum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::AnotherEnum::_name};
+}
+static field dynamic field;
+static method main() → dynamic {
+  "1st";
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: Can't use 'main' because it is declared more than once.
+  main();
+  ^".call();
+  core::print(invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: Can't use 'field' because it is declared more than once.
+  print(field);
+        ^");
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:28:3: Error: Can't use 'C' because it is declared more than once.
+  C.s();
+  ^".s();
+}
+static method useAnotherEnum() → dynamic {
+  <core::String, core::Object>{"AnotherEnum.a": self::AnotherEnum::a, "AnotherEnum.b": self::AnotherEnum::b, "AnotherEnum.c": self::AnotherEnum::c, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:94:38: Error: Can't use '_name' because it is declared more than once.
+    \"AnotherEnum._name\": AnotherEnum._name,
+                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:95:38: Error: Can't use 'index' because it is declared more than once.
+    \"AnotherEnum.index\": AnotherEnum.index,
+                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:96:41: Error: Can't use 'toString' because it is declared more than once.
+    \"AnotherEnum.toString\": AnotherEnum.toString,
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:97:39: Error: Can't use 'values' because it is declared more than once.
+    \"AnotherEnum.values\": AnotherEnum.values,
+                                      ^^^^^^"};
+}
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.outline.expect b/pkg/front_end/testcases/duplicated_declarations.dart.outline.expect
new file mode 100644
index 0000000..aa488b8
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.outline.expect
@@ -0,0 +1,188 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:5:9: Error: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:9:14: Error: Previous declaration of 'OldTypedef'.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:13:5: Error: Previous declaration of 'field'.
+// var field = "1st";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:17:1: Error: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:32:3: Error: Previous declaration of ''.
+//   C(a);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:34:7: Error: Previous declaration of 'field'.
+//   var field = "1st";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:38:3: Error: Previous declaration of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+// pkg/front_end/testcases/duplicated_declarations.dart:46:10: Error: Previous declaration of 's'.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/duplicated_declarations.dart:31:7: Error: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:68:3: Error: Previous declaration of 'a'.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:66:6: Error: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of '_name'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'index'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'toString'.
+// enum AnotherEnum {
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'values'.
+// enum AnotherEnum {
+//      ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
+class C#1 extends core::Object {
+  constructor _() → void
+    ;
+}
+class C extends core::Object {
+  field dynamic field;
+  constructor •(dynamic a) → void
+    ;
+  method m() → dynamic
+    ;
+  static method s() → dynamic
+    ;
+  static method f() → dynamic
+    ;
+}
+class Sub extends core::Object {
+  constructor •() → void
+    ;
+  method m() → dynamic
+    ;
+}
+class Enum#1 extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum#1> values = const <self::Enum#1>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
+  static const field self::Enum#1 a = const self::Enum#1::•(0, "Enum.a");
+  static const field self::Enum#1 b = const self::Enum#1::•(1, "Enum.b");
+  static const field self::Enum#1 c = const self::Enum#1::•(2, "Enum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum#1::_name};
+}
+class Enum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::Enum, self::Enum::a, self::Enum::b];
+  static const field self::Enum Enum = const self::Enum::•(0, "Enum.Enum");
+  static const field self::Enum a = const self::Enum::•(1, "Enum.a");
+  static const field self::Enum b = const self::Enum::•(2, "Enum.b");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+class AnotherEnum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::AnotherEnum> values = const <self::AnotherEnum>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
+  static const field self::AnotherEnum a = const self::AnotherEnum::•(0, "AnotherEnum.a");
+  static const field self::AnotherEnum b = const self::AnotherEnum::•(1, "AnotherEnum.b");
+  static const field self::AnotherEnum c = const self::AnotherEnum::•(2, "AnotherEnum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::AnotherEnum::_name};
+}
+static field dynamic field;
+static method main() → dynamic
+  ;
+static method foo() → dynamic
+  ;
+static method useAnotherEnum() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.strong.expect b/pkg/front_end/testcases/duplicated_declarations.dart.strong.expect
new file mode 100644
index 0000000..7e56c2c
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.strong.expect
@@ -0,0 +1,334 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:5:9: Error: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:9:14: Error: Previous declaration of 'OldTypedef'.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:13:5: Error: Previous declaration of 'field'.
+// var field = "1st";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:17:1: Error: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:32:3: Error: Previous declaration of ''.
+//   C(a);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:34:7: Error: Previous declaration of 'field'.
+//   var field = "1st";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:38:3: Error: Previous declaration of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+// pkg/front_end/testcases/duplicated_declarations.dart:46:10: Error: Previous declaration of 's'.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/duplicated_declarations.dart:31:7: Error: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+// pkg/front_end/testcases/duplicated_declarations.dart:68:3: Error: Previous declaration of 'a'.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:66:6: Error: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of '_name'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'index'.
+// enum AnotherEnum {
+//      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'toString'.
+// enum AnotherEnum {
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+// pkg/front_end/testcases/duplicated_declarations.dart:79:6: Error: Previous declaration of 'values'.
+// enum AnotherEnum {
+//      ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: Can't use 'main' because it is declared more than once.
+//   main();
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: Can't use 'field' because it is declared more than once.
+//   print(field);
+//         ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:28:3: Error: Can't use 'C' because it is declared more than once.
+//   C.s();
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: Can't use 's' because it is declared more than once.
+//   static f() => s;
+//                 ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:58:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   Sub() : super(null);
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:59:16: Error: Superclass has no method named 'm'.
+//   m() => super.m();
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:94:38: Error: Can't use '_name' because it is declared more than once.
+//     "AnotherEnum._name": AnotherEnum._name,
+//                                      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:95:38: Error: Can't use 'index' because it is declared more than once.
+//     "AnotherEnum.index": AnotherEnum.index,
+//                                      ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:96:41: Error: Can't use 'toString' because it is declared more than once.
+//     "AnotherEnum.toString": AnotherEnum.toString,
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:97:39: Error: Can't use 'values' because it is declared more than once.
+//     "AnotherEnum.values": AnotherEnum.values,
+//                                       ^^^^^^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: '' is already declared in this scope.
+//   C(a, b);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:62:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:67:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:69:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:83:3: Error: '_name' is already declared in this scope.
+//   _name,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:84:3: Error: 'index' is already declared in this scope.
+//   index,
+//   ^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:85:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:86:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:57:19: Error: Type 'C' not found.
+// class Sub extends C {
+//                   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:58:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   Sub() : super(null);
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:59:16: Error: Superclass has no method named 'm'.
+//   m() => super.m();
+//                ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
+class C#1 extends core::Object {
+  constructor _() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field dynamic field;
+  constructor •(dynamic a) → void
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: Can't use 's' because it is declared more than once.
+  static f() => s;
+                ^";
+}
+class Sub extends core::Object {
+  constructor •() → void
+    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    ;
+  method m() → dynamic
+    return super.m();
+}
+class Enum#1 extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum#1> values = const <self::Enum#1>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
+  static const field self::Enum#1 a = const self::Enum#1::•(0, "Enum.a");
+  static const field self::Enum#1 b = const self::Enum#1::•(1, "Enum.b");
+  static const field self::Enum#1 c = const self::Enum#1::•(2, "Enum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum#1::_name};
+}
+class Enum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::Enum, self::Enum::a, self::Enum::b];
+  static const field self::Enum Enum = const self::Enum::•(0, "Enum.Enum");
+  static const field self::Enum a = const self::Enum::•(1, "Enum.a");
+  static const field self::Enum b = const self::Enum::•(2, "Enum.b");
+  const constructor •(core::int index, core::String _name) → void
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+class AnotherEnum extends core::Object {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::AnotherEnum> values = const <self::AnotherEnum>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
+  static const field self::AnotherEnum a = const self::AnotherEnum::•(0, "AnotherEnum.a");
+  static const field self::AnotherEnum b = const self::AnotherEnum::•(1, "AnotherEnum.b");
+  static const field self::AnotherEnum c = const self::AnotherEnum::•(2, "AnotherEnum.c");
+  const constructor •(core::int index, core::String _name) → void
+    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::AnotherEnum::_name};
+}
+static field dynamic field;
+static method main() → dynamic {
+  "1st";
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: Can't use 'main' because it is declared more than once.
+  main();
+  ^".call();
+  core::print(invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: Can't use 'field' because it is declared more than once.
+  print(field);
+        ^");
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:28:3: Error: Can't use 'C' because it is declared more than once.
+  C.s();
+  ^".s();
+}
+static method useAnotherEnum() → dynamic {
+  <core::String, core::Object>{"AnotherEnum.a": self::AnotherEnum::a, "AnotherEnum.b": self::AnotherEnum::b, "AnotherEnum.c": self::AnotherEnum::c, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:94:38: Error: Can't use '_name' because it is declared more than once.
+    \"AnotherEnum._name\": AnotherEnum._name,
+                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:95:38: Error: Can't use 'index' because it is declared more than once.
+    \"AnotherEnum.index\": AnotherEnum.index,
+                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:96:41: Error: Can't use 'toString' because it is declared more than once.
+    \"AnotherEnum.toString\": AnotherEnum.toString,
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:97:39: Error: Can't use 'values' because it is declared more than once.
+    \"AnotherEnum.values\": AnotherEnum.values,
+                                      ^^^^^^"};
+}
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/duplicated_declarations.dart.strong.transformed.expect
new file mode 100644
index 0000000..a61366d
--- /dev/null
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.strong.transformed.expect
@@ -0,0 +1,76 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:7:9: Error: Duplicated definition of 'Typedef'.
+// typedef Typedef = Object Function();
+//         ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:11:16: Error: Duplicated definition of 'OldTypedef'.
+// typedef Object OldTypedef();
+//                ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:15:5: Error: Duplicated definition of 'field'.
+// var field = "2nd";
+//     ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:21:1: Error: Duplicated definition of 'main'.
+// main() {
+// ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:33:3: Error: Duplicated definition of ''.
+//   C(a, b);
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:36:7: Error: Duplicated definition of 'field'.
+//   var field = "2nd";
+//       ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:42:3: Error: Duplicated definition of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/duplicated_declarations.dart:50:10: Error: Duplicated definition of 's'.
+//   static s() {
+//          ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
+class C extends core::Object {
+  field dynamic field = null;
+  constructor •(dynamic a) → void
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:54:17: Error: 's' is already declared in this scope.
+  static f() => s;
+                ^";
+}
+class Sub extends self::C {
+  constructor •() → void
+    : super self::C::•(null)
+    ;
+  method m() → dynamic
+    return super.{self::C::m}();
+}
+static field dynamic field;
+static method main() → dynamic {
+  "1st";
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:26:3: Error: 'main' is already declared in this scope.
+  main();
+  ^".call();
+  core::print(invalid-expression "pkg/front_end/testcases/duplicated_declarations.dart:27:9: Error: 'field' is already declared in this scope.
+  print(field);
+        ^");
+  self::C::s();
+}
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
index e95737c..b9f36ee 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//             ^
+//
+// pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
index e95737c..b9f36ee 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//             ^
+//
+// pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect b/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect
index 4b7b5f6..aad29f6 100644
--- a/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/dynamic_and_void.dart:12:27: Warning: Type 'dynamic' not found.
+// /*@warning=TypeNotFound*/ dynamic testDynamic() => 0;
+//                           ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect b/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect
index 61f4199..3b6e18a 100644
--- a/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/dynamic_and_void.dart:12:27: Warning: Type 'dynamic' not found.
+// /*@warning=TypeNotFound*/ dynamic testDynamic() => 0;
+//                           ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml
new file mode 100644
index 0000000..086d26f
--- /dev/null
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml
@@ -0,0 +1,9 @@
+# Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+entry_point: "main.dart"
+definitions: []
+position: "main.dart#MiddlewareApi"
+expression: |
+  toString()
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
new file mode 100644
index 0000000..e380b76
--- /dev/null
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.core::Object::toString}();
\ No newline at end of file
diff --git a/pkg/front_end/testcases/expression/main.dart b/pkg/front_end/testcases/expression/main.dart
index 66153cb..a889b39 100644
--- a/pkg/front_end/testcases/expression/main.dart
+++ b/pkg/front_end/testcases/expression/main.dart
@@ -48,6 +48,13 @@
   }
 }
 
+abstract class Built<V extends Built<V, B>, B extends Builder<V, B>> {}
+
+abstract class Builder<V extends Built<V, B>, B extends Builder<V, B>> {}
+
+class MiddlewareApi<State extends Built<State, StateBuilder>,
+    StateBuilder extends Builder<State, StateBuilder>> {}
+
 main() {
   exit(0);
 }
diff --git a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
index 285eca0..b18dd26 100644
--- a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return main::hasBound<main::debugExpr::T>();
+  return main::hasBound<#lib1::debugExpr::T>();
diff --git a/pkg/front_end/testcases/expressions.dart.direct.expect b/pkg/front_end/testcases/expressions.dart.direct.expect
index 7fece02..158f1ec 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/expressions.dart:74:16: Warning: Method not found: 'int.toString'.
+//     print(int?.toString());
+//                ^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/expressions.dart.direct.transformed.expect b/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
index 7fece02..04022a3 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
@@ -42,7 +42,7 @@
   core::print(let final dynamic #t3 = i in let final dynamic #t4 = i = #t3.+(1) in #t3);
   core::print(new core::Object::•());
   core::print(const core::Object::•());
-  core::print(core::List::•<core::String>(2).runtimeType);
+  core::print(core::_List::•<core::String>(2).runtimeType);
   self::foo(fisk: "Blorp gulp");
   function f() → dynamic {
     core::print("f was called");
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
index ccd9621..264936d 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
+//     print(int?.toString());
+//                ^^^^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
 //     print(int?.toString());
diff --git a/pkg/front_end/testcases/expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/expressions.dart.strong.transformed.expect
index 8f2bfb4..aa3ea16 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
 //     print(int?.toString());
@@ -48,7 +48,7 @@
   core::print(let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1) in #t3);
   core::print(new core::Object::•());
   core::print(const core::Object::•());
-  core::print(core::List::•<core::String>(2).{core::Object::runtimeType});
+  core::print(core::_List::•<core::String>(2).{core::Object::runtimeType});
   self::foo(fisk: "Blorp gulp");
   function f() → core::Null {
     core::print("f was called");
diff --git a/pkg/front_end/testcases/function_type_recovery.dart.outline.expect b/pkg/front_end/testcases/function_type_recovery.dart.outline.expect
index 9081604..244b4eb 100644
--- a/pkg/front_end/testcases/function_type_recovery.dart.outline.expect
+++ b/pkg/front_end/testcases/function_type_recovery.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/function_type_recovery.dart:8:31: Error: Inline function types cannot be used for parameters in a generic function type.
+// Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
+// typedef F = int Function(int f(String x));
+//                               ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
index f2605ca..1364b6c 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+//   var x = void f<T>(T t) {};
+//                ^
+//
+// pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+//   print(void g<T>(T t) {});
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
 //   var x = void f<T>(T t) {};
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
index f2605ca..72e3e66 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
 //   var x = void f<T>(T t) {};
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
index 8c8bdd6..0fbf026 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+//   var x = void f<T>(T t) {};
+//                ^
+//
+// pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+//   print(void g<T>(T t) {});
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
 //   var x = void f<T>(T t) {};
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
index 8c8bdd6..0f485bc 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
 //   var x = void f<T>(T t) {};
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
index b4865bb..246c806 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+//   print(void f() {});
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
 //   print(void f() {});
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.transformed.expect
index b4865bb..1cf55b6 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
 //   print(void f() {});
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
index 1bb53e4..eb14ed2 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+//   print(void f() {});
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
 //   print(void f() {});
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.transformed.expect
index 1bb53e4..546d092 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
 //   print(void f() {});
diff --git a/pkg/front_end/testcases/implicit_new.dart.direct.expect b/pkg/front_end/testcases/implicit_new.dart.direct.expect
index 4262af7..8e0c23c 100644
--- a/pkg/front_end/testcases/implicit_new.dart.direct.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.direct.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/implicit_new.dart:18:18: Warning: Method not found: 'Bar'.
+//   var y = prefix.Bar();
+//                  ^^^
+//
+// pkg/front_end/testcases/implicit_new.dart:19:10: Warning: Method not found: 'Bar'.
+//   prefix.Bar();
+//          ^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.expect b/pkg/front_end/testcases/implicit_new.dart.strong.expect
index 0326d11..721c891 100644
--- a/pkg/front_end/testcases/implicit_new.dart.strong.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+//   var y = prefix.Bar();
+//                  ^^^
+//
+// pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+//   prefix.Bar();
+//          ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
 //   var y = prefix.Bar();
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.transformed.expect b/pkg/front_end/testcases/implicit_new.dart.strong.transformed.expect
index 0326d11..0cdd17e 100644
--- a/pkg/front_end/testcases/implicit_new.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
 //   var y = prefix.Bar();
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
index 4624781..8f3319f 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:15:27: Warning: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=C*/ x = new C();
+//                           ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:16:50: Warning: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=D<int>*/ y = new /*@typeArgs=int*/ D(1);
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:48: Warning: The class 'D' is abstract and can't be instantiated.
+//   D<List<int>> z = new /*@typeArgs=List<int>*/ D(/*@typeArgs=int*/ []);
+//                                                ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index 644c45e..f258371 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
+//                                             ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
index 5e2379c..30ce298 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:35:44: Warning: Must explicitly return a value from a non-void function.
+//       /*@warning=ReturnWithoutExpression*/ return;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:65:44: Warning: Must explicitly return a value from a non-void function.
+//       /*@warning=ReturnWithoutExpression*/ return;
+//                                            ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
index 5d462fc..3ed3a13 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
+//   var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
+//   var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
+//                                                                 ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
index 147f052..708cd81 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+// abstract class A extends B {
+//                ^
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+// abstract class B extends A {
+//                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
 // abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.transformed.expect
index 147f052..011cb62 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
 // abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
index 0f349ae..3c9369a 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+// abstract class A extends B {
+//                ^
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+// abstract class B extends A {
+//                ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
index 147f052..708cd81 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+// abstract class A extends B {
+//                ^
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+// abstract class B extends A {
+//                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
 // abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.transformed.expect
index 147f052..011cb62 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
 // abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
index 77eedf0..a71159f 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
index 77eedf0..adfe785 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
index 83cae8a..3bf5411 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
index 83cae8a..6ac80a6 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index c37d0e9..a51a200 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -1,4 +1,48 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// Specify the type explicitly.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// Specify the type explicitly.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: The return type of the method 'C1::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Error: This is the overridden method ('a').
+//   final I1 a = null;
+//            ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: The return type of the method 'C1::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Error: This is the overridden method ('a').
+//   final I2 a = null;
+//            ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Error: This is the overridden method ('a').
+//   final I2 a = null;
+//            ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Error: This is the overridden method ('a').
+//   final I1 a = null;
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 746541f..920dfc8 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -1,4 +1,27 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// Specify the type explicitly.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Error: This is the overridden method ('a').
+//   final I1 a = null;
+//            ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+//   get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Error: This is the overridden method ('a').
+//   final I2 a = null;
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index e3df93c..09066dc 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                        ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index 5808a55..1d034f2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                        ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index 3374e4c..c4053e2 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.
+// Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
+//                                                                                                              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.
 // Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
index 3374e4c..33b8e13 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.
 // Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
index d3420e5..a17cf91 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:9:13: Error: This is the overridden method ('x').
+//   final int x = 2;
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
 // Change to a subtype of dart.core::int.
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index a31f14b..1789c32 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+//                                                                     ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index 8248a92..f2e2c5c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -1,3 +1,55 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index 7c0032b..cb21af9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -1,3 +1,55 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index 81fd737..6b359eb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -1,3 +1,60 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) → dart.core::String' can't be assigned to a variable of type '(dart.core::int) → dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) → dart.core::String'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+//                                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+//                                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//             3;
+//             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ x;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) → dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) → dart.core::List<dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) → dart.core::List<dart.core::String>'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                          ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//             x;
+//             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+//             .substring(3);
+//              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index bd656ad..bc0d5a9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -1,3 +1,55 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index c873221..302c6ca 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -1,3 +1,60 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) → dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) → dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) → dart.core::String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//         3;
+//         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ x;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) → dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) → dart.core::List<dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) → dart.core::List<dart.core::String>'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//         x;
+//         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+//         .substring(3);
+//          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 32aa1b3..5c41272 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -1,3 +1,130 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+// Change the type of the object being constructed or the context in which it is used.
+//         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, "hello");
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+// Change the type of the object being constructed or the context in which it is used.
+//         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+//         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>("hello", 3);
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+//         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+//     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
+//                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+//     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
+//                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+//         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>("hello");
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+//         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index 56be18e..49c6469 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -1,3 +1,70 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                                                         ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index 58ac3bf..c422b68 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -1,3 +1,85 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
index 5b85710..3c303a7 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.direct.transformed.expect
@@ -64,7 +64,7 @@
         [yield] true;
       }
       {
-        :iterator.{core::_SyncIterator::_current} = core::List::•<dynamic>();
+        :iterator.{core::_SyncIterator::_current} = core::_GrowableList::•<dynamic>(0);
         [yield] true;
       }
       {
@@ -72,7 +72,7 @@
         [yield] true;
       }
       {
-        :iterator.{core::_SyncIterator::_yieldEachIterable} = core::List::•<dynamic>();
+        :iterator.{core::_SyncIterator::_yieldEachIterable} = core::_GrowableList::•<dynamic>(0);
         [yield] true;
       }
     }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index a5a751e..48fb3e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
+//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+//   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+//                                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
+//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+//   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
+//                                                                         ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
index 1081803..d424341 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+//       d. /*@target=Object::hashCode*/ hashCode();
+//                                       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 8c13443..c8c5654 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+//   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                 ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index 5983869..8c60a46 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
+//   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                   ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index a6d1069..64a5480 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+//   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                 ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index 732664a..dade3e7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+// Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index 86a7783..5b56228 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+// Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index b5c11d3..107dc5a3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -1,3 +1,35 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//       /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//       /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::double'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::double'.
+//       /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::double'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::double'.
+//       /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hi",
+//                                              ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "there"));
+//                                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 5d1b277..a521d4f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -1,4 +1,25 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+// /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+//                                                                ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Error: This is the overridden method ('m').
+//   T m<T>(T x) => x;
+//     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).
+// Change to a subtype of test::C::m::T.
+// /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+//                                                                ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Error: This is the overridden method ('m').
+//   T m<T>(T x) => x;
+//     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:21:106: Error: Expected 0 type arguments.
+//       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D::m*/ /*@error=TypeArgumentMismatch*/ m<
+//                                                                                                          ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
 // /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index 9a823d0..f83fd7b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+//                                                                            ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
index f688995..b77c625 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
@@ -1,3 +1,19 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Warning: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+//   T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
+//                                              ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:24: Warning: This is the overridden method ('m').
+//   /*@topType=dynamic*/ m(/*@topType=dynamic*/ x) => x;
+//                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Warning: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.
+//   T /*@error=OverrideTypeVariablesMismatch*/ g<T>(
+//                                              ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Warning: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index 46b8e3f..c5fed39 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -1,4 +1,36 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+//   T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
+//                                              ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:24: Error: This is the overridden method ('m').
+//   /*@topType=dynamic*/ m(/*@topType=dynamic*/ x) => x;
+//                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).
+// Change to a supertype of dynamic (or, for a covariant parameter, a subtype).
+//           T /*@error=OverrideTypeMismatchParameter*/ x) =>
+//                                                      ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:24: Error: This is the overridden method ('m').
+//   /*@topType=dynamic*/ m(/*@topType=dynamic*/ x) => x;
+//                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.
+//   T /*@error=OverrideTypeVariablesMismatch*/ g<T>(
+//                                              ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Error: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).
+// Change to a supertype of dart.core::int (or, for a covariant parameter, a subtype).
+//           T /*@error=OverrideTypeMismatchParameter*/ x) =>
+//                                                      ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Error: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
 //   T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 4c1af02..fe2ca89 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -1,3 +1,35 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) → dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) → dart.core::int'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) → dart.core::double'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) → dart.core::double'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) → dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) → dart.core::int'.
+//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) → dart.core::double'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) → dart.core::double'.
+//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) → dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) → dart.core::int'.
+//           . /*@target=C::m*/ m);
+//                              ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type '(dart.core::num, dart.core::num) → dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) → dart.core::double'.
+// Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) → dart.core::double'.
+//           . /*@target=C::m*/ m);
+//                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
index 2d25757..5b0e517 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
@@ -1,6 +1,38 @@
-library;
-import self as self;
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Can't access platform private library.
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Not found: 'dart:_foreign_helper'
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:11:43: Warning: Method not found: 'JS'.
+//   String x = /*error:INVALID_ASSIGNMENT*/ JS('int', '42');
+//                                           ^^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:28: Warning: Method not found: 'JS'.
+//   var /*@type=String*/ y = JS('String', '"hello"');
+//                            ^^
 
-static method #main() → dynamic {
-  throw "dart:_foreign_helper: Error: Not found: dart:_foreign_helper.";
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Can't access platform private library.
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Not found: 'dart:_foreign_helper'
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::String x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  y = "world";
+  y = 42;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect
new file mode 100644
index 0000000..89adde8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect
@@ -0,0 +1,20 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Can't access platform private library.
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Not found: 'dart:_foreign_helper'
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::String x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  y = "world";
+  y = 42;
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.outline.expect
new file mode 100644
index 0000000..ce6b792
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.outline.expect
@@ -0,0 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Can't access platform private library.
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:8:42: Error: Not found: 'dart:_foreign_helper'
+// /*error:IMPORT_INTERNAL_LIBRARY*/ import 'dart:_foreign_helper' show JS;
+//                                          ^
+
+library test;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index 032f49a..8bb727b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//           1.0);
+//           ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 0af21f3..80c8abf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
+// Try correcting the name to the name of an existing method, or defining a method named '+'.
+//                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+//                                                                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type '(dart.core::String, dart.core::int) → dart.core::String' can't be assigned to the parameter type '(dart.async::FutureOr<dart.core::String>, dart.core::int) → dart.async::FutureOr<dart.core::String>'.
+// Try changing the type of the parameter, or casting the argument to '(dart.async::FutureOr<dart.core::String>, dart.core::int) → dart.async::FutureOr<dart.core::String>'.
+//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+//                                                                                                            ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index cdf4cc7..9eca0a5 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
+//                                                              ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
+//                                                              ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
+//                                                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index ec15c8d..983f71c 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -1,4 +1,69 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: The return type of the method 'F::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Error: This is the overridden method ('x').
+//   int get x;
+//           ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: The return type of the method 'F::x' is dynamic, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Error: This is the overridden method ('x').
+//   num get x;
+//           ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: The return type of the method 'G::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Error: This is the overridden method ('x').
+//   int get x;
+//           ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: The return type of the method 'G::x' is dynamic, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Error: This is the overridden method ('x').
+//   double get x;
+//              ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: The return type of the method 'H::x' is dynamic, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Error: This is the overridden method ('x').
+//   num get x;
+//           ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: The return type of the method 'H::x' is dynamic, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+//                                                                                                                                                                   ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Error: This is the overridden method ('x').
+//   double get x;
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
index 8876de4..6859457 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Warning: Getter not found: 'x'.
+// var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Warning: Getter not found: 'x'.
+//   /*error:UNDEFINED_IDENTIFIER*/ x
+//                                  ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 5d55e92..2d9e2de 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -1,4 +1,74 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.
+// var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+//   /*error:UNDEFINED_IDENTIFIER*/ x
+//                                  ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// var /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+//   a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+//   b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+//   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+//   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
+//   d = /*error:INVALID_ASSIGNMENT*/ 3;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+//   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   f = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   g = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+//   h = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+//   j = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+//   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
+//                                                          ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.
 // var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
index fa5b98d..579e8e2 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.
 // var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 8b50c96..7e3bee0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   y = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+
 library test;
 import self as self;
 import "./infer_from_variables_in_non_cycle_imports_with_flag_a.dart" as inf;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index ea8e666..7090357 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   A.x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   B.y = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
index 9071805..e5b0d6e 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
@@ -1,3 +1,16 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Warning: Method not found: 'g'.
+//   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                          ^
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+//   g() => 0;
+//   ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+//   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
index c939a0a..12d4a27 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.
+//   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                          ^
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+//   g() => 0;
+//   ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+//   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                          ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.
 //   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.transformed.expect
index c939a0a..dc3bf25 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.
 //   /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
index 80a5e2b..25d9b0f 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Warning: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
+//   /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
+//                                                             ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Warning: This is the overridden method ('f').
+//   int f(int x);
+//       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
index f5fbe09..b2900dc 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Warning: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
+//   /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
+//                                                             ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Warning: This is the overridden method ('f').
+//   int f(int x);
+//       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
index 56fdbc9..09b21ca 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
@@ -1,4 +1,28 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
+// Specify the type explicitly.
+//       /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+// Specify the type explicitly.
+//       {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});
+//                                                                                ^
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+// Specify the type explicitly.
+//       [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);
+//                                                                                ^
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
+//   /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
+//                                                             ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:17:7: Error: This is the overridden method ('f').
+//   int f(int x);
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 35575d7..6b24c06 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+//                                                                     ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index e45a825..3d2ac1b 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+//                                                                     ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index 693987c..67fece6 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index f42a486..71ad907 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index 4296aaf..bea0734 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     c = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index 1da00c1..21d3ddd 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   c = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 3344f00..eed50dc 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
+//                                                                     ^
+
 library test;
 import self as self;
 import "./infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
index cc75323..5e68253 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
+//                                                                     ^
+
 library;
 import self as self;
 import "./infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 22a1397..61cebb7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ "hello";
+//                                                              ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+//                                                                     ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index efe5253..93b9420 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
+//                                                                          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 5c0a1e4..2ad57bf 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       . /*@target=B::m*/ m(null, null);
+//                          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index e92f2a3..e7c2714 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       . /*@target=A::value*/ value;
+//                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
index 83c90ce..eae7652 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       . /*@target=A::value*/ value;
+//                              ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index 9b83615..3bc8090 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Error: This is the overridden method ('x').
+//   final T x = null;
+//           ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
 // Change to a subtype of dart.core::int.
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index f79f8f4..c82d4fe 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -1,3 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//     String y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                             ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the variable.
+//   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
+//               ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+//   for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+//                                                                    ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index a915514..c7b0dde 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -1,3 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//     String y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                             ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the variable.
+//   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+//                     ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+//   await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+//                                                                          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index fcd2925..f4c80be 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ "1"]);
+//                                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 0ef38ce..1cd0d49 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
+//   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index f2f1e31..dadf046 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
+//   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+// Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
+//   x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                        ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index 08af811..2841354 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) → dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) → dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) → dart.core::int>'.
+//     return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+//                                    ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index e539f33..82c5211 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -1,3 +1,30 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+//   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                             ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index af7a290..358d35f 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -1,3 +1,30 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+//   x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+//   x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                              ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
index 5f6695d..29c18e5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
index 6f5d53c..632df5b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
index 79c34df..8408785 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+//                                      ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index 5f6695d..29c18e5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
index be9b974..baad424 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
index 940281a..7287640 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
index 9c4a906..193de30 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object
+//                                      ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
index be9b974..baad424 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
index 9d11b4f..87ea24c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
index 69991d5..9dee1ed 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
index 558e05a..53cd60a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index 9d11b4f..87ea24c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
index a944e9f..037f589 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
index 7c37439..55e34e4 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
index 0486b4b..f54fe8d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index a944e9f..037f589 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+//                                      ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
 // class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 6ed5cbf..592da28 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                                         ^
+//
+// pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                                         ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
index 48cc6c8..0a6b99f 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+//   void set x() {}
+//                ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
index d34e8a8..0b9f2cd 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+//   void set x() {}
+//                ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index c48a4c4..baf4a8c 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) → dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) → dart.core::int>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) → dart.core::int>'.
+//   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+//                                  ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
index 7b6dfaa..80fb1bd 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Warning: Superclass has no method named 'foo'.
+//     var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Warning: Superclass has no getter named 'bar'.
+//     var /*@type=dynamic*/ v2 = super.bar;
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Warning: Superclass has no method named '[]'.
+//     var /*@type=dynamic*/ v3 = super[0];
+//                                     ^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Warning: Superclass has no setter named 'bar'.
+//     var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Warning: Superclass has no method named '[]='.
+//     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+//                                     ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index 2fff017..f9ec341 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -1,4 +1,26 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
+//     var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
+//     var /*@type=dynamic*/ v2 = super.bar;
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
+//     var /*@type=dynamic*/ v3 = super[0];
+//                                     ^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.
+//     var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
+//                                      ^^^
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+//     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+//                                     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
 //     var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
index 84e190d..fcb3945 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
@@ -8,3 +8,4 @@
 List<T> f<T>(T g()) => <T>[g()];
 var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
 
+main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.expect
index 999be87..3cdb4282 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.expect
@@ -1,6 +1,36 @@
-library;
-import self as self;
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                       ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Warning: Getter not found: ''.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: Unexpected token '>'.\nvar /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });\n                                      ^";
-}
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                       ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v = self::f.<(dynamic).>(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call(() → dynamic {
+  return 1;
+});
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  return <self::f::T>[g.call()];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.transformed.expect
new file mode 100644
index 0000000..1b87566
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.direct.transformed.expect
@@ -0,0 +1,21 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                       ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v = self::f.<(dynamic).>(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call(() → dynamic {
+  return 1;
+});
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  return <self::f::T>[g.call()];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.outline.expect
new file mode 100644
index 0000000..03bbeef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.outline.expect
@@ -0,0 +1,24 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                       ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Warning: Getter not found: ''.
+// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
+//                                        ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v;
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
index 48fff69a..761fe2a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
@@ -8,3 +8,4 @@
 List<T> f<T>(T g()) => <T>[g()];
 var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
 
+main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.expect
index f26e722..461a75a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.expect
@@ -1,6 +1,36 @@
-library;
-import self as self;
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:35: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                   ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Warning: Getter not found: ''.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:35: Error: Unexpected token '>'.\nvar /*@topType=dynamic*/v = (f<int>)(() { return 1; });\n                                  ^";
-}
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:35: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                   ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v = self::f.<(core::int).>(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call(() → dynamic {
+  return 1;
+});
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  return <self::f::T>[g.call()];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.transformed.expect
new file mode 100644
index 0000000..2af1d54
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.direct.transformed.expect
@@ -0,0 +1,21 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:35: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                   ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v = self::f.<(core::int).>(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call(() → dynamic {
+  return 1;
+});
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  return <self::f::T>[g.call()];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.outline.expect
new file mode 100644
index 0000000..88141c9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.outline.expect
@@ -0,0 +1,24 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:35: Error: An equality expression can't be an operand of another equality expression.
+// Try re-writing the expression.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                   ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Error: Expected an identifier, but got ')'.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:36: Warning: Getter not found: ''.
+// var /*@topType=dynamic*/v = (f<int>)(() { return 1; });
+//                                    ^
+
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic v;
+static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index fb9dc87..6de5297 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
index fb9dc87..08a2efb 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index 4d4101b..5820a4e 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
index 4d4101b..085c83e 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
index 0454a7c..4722264 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:19:69: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x;
+//                                                                     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
index 0454a7c..9862ea2 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index 9e2999f..ac08e1d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -1,3 +1,21 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:53: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+//   for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
+//                                                     ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:59: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+//   await for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
+//                                                           ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:49: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+//   for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
+//                                                 ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:55: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+//   await for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
+//                                                       ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 9ac5ea0..b31b52c 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:55: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the variable.
+//   for (i /*@error=ForInLoopElementTypeNotAssignable*/ in iterable) {}
+//                                                       ^
+//
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:61: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the variable.
+//   await for (i /*@error=ForInLoopElementTypeNotAssignable*/ in stream) {}
+//                                                             ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index d231fbe..8d562e5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -1,3 +1,40 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+//                                                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+//                             ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+//                                                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+//                                ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+//                                                                 ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index 06f2a25..aa0ec5f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -1,3 +1,40 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();
+//                                                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];
+//                             ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//     var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;
+//                                                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];
+//                                ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//     var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;
+//                                                                 ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index abc6e6b..907b43b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -1,3 +1,40 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//   var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+//                                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//   var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+//                           ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+//   var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+//                                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+//                                                           ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();
+//                                                           ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+//                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+//                                                           ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index c06c05f..d471225 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+// var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
+//                                     ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+// var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
+//                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+// var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
+//                                                               ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+// var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
+//                                                               ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
index dcef35c..d0acf00 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:24: Error: The return type of the method 'B::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+//   var /*@topType=int*/ x;
+//                        ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Error: This is the overridden method ('x').
+//   void set x(double value);
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:24: Error: The return type of the method 'B::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::double).
 // Change to a subtype of dart.core::double.
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
index d765039..501efd7 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:24: Error: The return type of the method 'C::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+//   var /*@topType=int*/ x;
+//                        ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Error: This is the overridden method ('x').
+//   void set x(num value);
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:24: Error: The return type of the method 'C::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::num).
 // Change to a subtype of dart.core::num.
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
index db4967d..97e21fd 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+//   var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
index db4967d..6485531 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index 81e4b1f..eb2c4e2 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+// var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
+//                                                              ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
index 419ba0e..e40ce71 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+//                                                                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
index 419ba0e..322965f 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
 // Specify the type explicitly.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
index d068e62..f4996ec 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.
+// Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
+// var y = new B();
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.
 // Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
index d068e62..66a3752 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.
 // Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
index 964c88f..9385afe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
@@ -1,4 +1,26 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
 // Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
index 964c88f..7e40579 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
 // Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
index c917def..96233c8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
index b442329..3722939 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
@@ -1,4 +1,26 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
 // Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
index b442329..d4f8227 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
 // Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect
index 693def5..b7a35b1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:10:16: Error: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'A' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect
index 693def5..4bf21ae 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'A' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect
index ba808e0..f8cdb5a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:9:16: Error: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'A' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect
index ba808e0..4ae9aec 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'A' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.expect
index 6649d48..6269fa0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Error: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.transformed.expect
index 6649d48..5d686fd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect
index af1c74a..1ac7a60 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef void Fisk<TypeY extends Hest>();
+//              ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:19: Error: Bound of this variable references raw type 'Hest'.
+// typedef void Fisk<TypeY extends Hest>();
+//                   ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:8:12: Error: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect
index af1c74a..bd13c95 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect
index 41104fc..178bf7a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect
index 41104fc..f990bcc 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect
index 4163521..c4264ab 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//                                ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect
index 4163521..f4b3391 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect
index 2616a8e..60c725c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Map<Hest, Hest>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect
index 2616a8e..8073742 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect
index 435843c..16965b6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//                                ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect
index 435843c..05da9c9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
index a835974..7e93861 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'LinkedListEntry' here.
+// class Hest<X extends LinkedListEntry> {}
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'LinkedListEntry' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
index a835974..52cc742 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'LinkedListEntry' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect
index c807c38..91a7c9c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect
index c807c38..b2e39a8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect
index c4f448b..4cac409 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:8:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Fisk' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:10:12: Error: Bound of this variable references variable 'TypeY' from the same declaration.
+// class Fisk<TypeY extends Fisk<TypeY>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect
index c4f448b..7bb7234 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
index 6d5ff15..8e28663 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// class Hest<TypeX extends lib.Hest> {}
+//       ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:12: Error: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeX extends lib.Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:16:12: Error: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeY extends lib.Hest> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
index 6d5ff15..f8fe191 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect
index 11e9935..03e702c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Map<Hest, Hest>> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:9:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect
index 11e9935..26843e1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect
index a7a478f..2331e87 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:9:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect
index a7a478f..92649f4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect
index 16fb364..e0630b5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10:12: Error: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect
index 16fb364..f34f645 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
 // Try providing type arguments to 'Hest' here.
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index 32ac9fb..b20f7cd 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   i = /*@error=InvalidAssignment*/ s;
+//                                    ^
+//
+// pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+//   i ??= /*@error=InvalidAssignment*/ s;
+//                                      ^
+//
+// pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+// Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
+//   a /*@error=InvalidAssignment*/ += 1;
+//                                  ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index 9c249ad..8f11e81 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -1,3 +1,50 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+// Change the type of the list literal or the context in which it is used.
+//   List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
+//                                                            ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+// Change the type of the map literal or the context in which it is used.
+//   Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
+//                                                                          ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+// Change the type of the map literal or the context in which it is used.
+//   Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
+//                                                                       ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) → dart.core::int' isn't of expected type '(dart.core::Object) → dart.core::int'.
+// Change the type of the function expression or the context in which it is used.
+//   int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
+//                                                               ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+// Change the type of the object being constructed or the context in which it is used.
+//   D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
+//                                           ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+// Change the type of the object being constructed or the context in which it is used.
+//   D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
+//                                           ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) → void' that isn't of expected type '(dart.core::Object) → void'.
+// Change the type of the method or the context in which it is used.
+//       C. /*@error=InvalidCastStaticMethod*/ staticFunction;
+//                                             ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) → void' that isn't of expected type '(dart.core::Object) → void'.
+// Change the type of the function or the context in which it is used.
+//       j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
+//                                                  ^
+//
+// pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) → void' that isn't of expected type '(dart.core::Object) → void'.
+// Change the type of the function or the context in which it is used.
+//   void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
+//                                                                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/magic_const.dart.direct.expect b/pkg/front_end/testcases/magic_const.dart.direct.expect
index 2f1ef5a..d0beacd 100644
--- a/pkg/front_end/testcases/magic_const.dart.direct.expect
+++ b/pkg/front_end/testcases/magic_const.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const NotConstant();
+//         ^^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/magic_const.dart.strong.expect b/pkg/front_end/testcases/magic_const.dart.strong.expect
index b47780b..1fdf754 100644
--- a/pkg/front_end/testcases/magic_const.dart.strong.expect
+++ b/pkg/front_end/testcases/magic_const.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const NotConstant();
+//         ^^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/named_function_scope.dart b/pkg/front_end/testcases/named_function_scope.dart
index 010ffc7..97888e3 100644
--- a/pkg/front_end/testcases/named_function_scope.dart
+++ b/pkg/front_end/testcases/named_function_scope.dart
@@ -58,8 +58,8 @@
     // the function-type scope.
     var x =
         /*@error=NamedFunctionExpression*/
-        /*@error=DuplicatedName*/
-        T< /*@context=DuplicatedNameCause*/ T>() {};
+        /*@error=DuplicatedDeclaration*/
+        T< /*@context=DuplicatedDeclarationCause*/ T>() {};
   }
   {
     /*@context=DuplicatedNamePreviouslyUsedCause*/
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
index 60bcdea..6a0a469 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
@@ -1,4 +1,85 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
+//     var x = /*@error=NamedFunctionExpression*/ T() {};
+//                                                ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:33:49: Error: Can't declare 'V' because it was already used in this scope.
+//     var /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//                                                 ^
+// pkg/front_end/testcases/named_function_scope.dart:31:52: Error: Previous use of 'V'.
+//     /*@context=DuplicatedNamePreviouslyUsedCause*/ V  v;
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+//     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
+//                                                 ^
+// pkg/front_end/testcases/named_function_scope.dart:36:52: Error: Previous use of 'V'.
+//     /*@context=DuplicatedNamePreviouslyUsedCause*/ V  v;
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:48:9: Error: A function expression can't have a name.
+//         T() {};
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+//         T() {};
+//         ^
+// pkg/front_end/testcases/named_function_scope.dart:45:9: Error: Previous use of 'T'.
+//         T
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:54:47: Error: Can't declare 'V' because it was already used in this scope.
+//     V /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:54:5: Error: Previous use of 'V'.
+//     V /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//         ^
+// pkg/front_end/testcases/named_function_scope.dart:62:52: Error: Previous declaration of 'T'.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:67:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:66:5: Error: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:71:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:71:5: Error: Previous use of 'T'.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:76:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:75:5: Error: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:80:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:80:5: Error: Previous use of 'T'.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:83:32: Warning: 'T' isn't a type.
+//     void T(/*@error=NotAType*/ T t) {}
+//                                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
 //     var x = /*@error=NamedFunctionExpression*/ T() {};
@@ -9,7 +90,7 @@
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
-//         T< /*@context=DuplicatedNameCause*/ T>() {};
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
 //         ^
 
 library;
@@ -63,7 +144,7 @@
   }
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
-        T< /*@context=DuplicatedNameCause*/ T>() {};
+        T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
index 60bcdea..02bf73d 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
 //     var x = /*@error=NamedFunctionExpression*/ T() {};
@@ -9,7 +9,7 @@
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
-//         T< /*@context=DuplicatedNameCause*/ T>() {};
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
 //         ^
 
 library;
@@ -63,7 +63,7 @@
   }
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
-        T< /*@context=DuplicatedNameCause*/ T>() {};
+        T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
index 0dde266..38d058b 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
@@ -1,4 +1,85 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
+//     var x = /*@error=NamedFunctionExpression*/ T() {};
+//                                                ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:33:49: Error: Can't declare 'V' because it was already used in this scope.
+//     var /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//                                                 ^
+// pkg/front_end/testcases/named_function_scope.dart:31:52: Error: Previous use of 'V'.
+//     /*@context=DuplicatedNamePreviouslyUsedCause*/ V  v;
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+//     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
+//                                                 ^
+// pkg/front_end/testcases/named_function_scope.dart:36:52: Error: Previous use of 'V'.
+//     /*@context=DuplicatedNamePreviouslyUsedCause*/ V  v;
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:48:9: Error: A function expression can't have a name.
+//         T() {};
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+//         T() {};
+//         ^
+// pkg/front_end/testcases/named_function_scope.dart:45:9: Error: Previous use of 'T'.
+//         T
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:54:47: Error: Can't declare 'V' because it was already used in this scope.
+//     V /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:54:5: Error: Previous use of 'V'.
+//     V /*@error=DuplicatedNamePreviouslyUsed*/ V;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//         ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//         ^
+// pkg/front_end/testcases/named_function_scope.dart:62:52: Error: Previous declaration of 'T'.
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
+//                                                    ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:67:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:66:5: Error: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:71:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:71:5: Error: Previous use of 'T'.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T() {}
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:76:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:75:5: Error: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:80:47: Error: Can't declare 'T' because it was already used in this scope.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//                                               ^
+// pkg/front_end/testcases/named_function_scope.dart:80:5: Error: Previous use of 'T'.
+//     T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {}
+//     ^
+//
+// pkg/front_end/testcases/named_function_scope.dart:83:32: Error: 'T' isn't a type.
+//     void T(/*@error=NotAType*/ T t) {}
+//                                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
 //     var x = /*@error=NamedFunctionExpression*/ T() {};
@@ -9,7 +90,7 @@
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
-//         T< /*@context=DuplicatedNameCause*/ T>() {};
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:83:32: Error: 'T' isn't a type.
@@ -67,7 +148,7 @@
   }
   {
     dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
-        T< /*@context=DuplicatedNameCause*/ T>() {};
+        T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
index c427566..bffb97c 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/named_function_scope.dart:28:48: Error: A function expression can't have a name.
 //     var x = /*@error=NamedFunctionExpression*/ T() {};
@@ -9,7 +9,7 @@
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:62:9: Error: A function expression can't have a name.
-//         T< /*@context=DuplicatedNameCause*/ T>() {};
+//         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
 //         ^
 //
 // pkg/front_end/testcases/named_function_scope.dart:83:32: Error: 'T' isn't a type.
@@ -67,7 +67,7 @@
   }
   {
     dynamic x = let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
-        T< /*@context=DuplicatedNameCause*/ T>() {};
+        T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
   {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.direct.expect
index 081ba63..99cfce5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.direct.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Warning: Can't declare a member that conflicts with an inherited one.
+//   void foo(int x) {}
+//        ^
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:12:12: Warning: This is the inherited member.
+//   void set foo(int x);
+//            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.outline.expect
index f4edc47..94996d7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.outline.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Warning: Can't declare a member that conflicts with an inherited one.
+//   void foo(int x) {}
+//        ^
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:12:12: Warning: This is the inherited member.
+//   void set foo(int x);
+//            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.expect
index 26812a7..8facc2b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.expect
@@ -1,4 +1,13 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void foo(int x) {}
+//        ^
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:12:12: Error: This is the inherited member.
+//   void set foo(int x);
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
 //   void foo(int x) {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.transformed.expect
index 26812a7..d158aa5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
 //   void foo(int x) {}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 1159e1b..aeed5cf 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -87,7 +87,6 @@
 inference/generic_methods_infer_generic_function_return_type: Fail
 inference/generic_methods_infer_generic_instantiation: Fail
 inference/generic_methods_infer_generic_method_type: Fail
-inference/generic_methods_infer_js_builtin: Fail
 inference/generic_methods_inference_error: Fail
 inference/generic_methods_iterable_and_future: Fail
 inference/generic_methods_nested_generic_instantiation: Fail
@@ -226,10 +225,8 @@
 inference/unsafe_block_closure_inference_constructor_call_implicit_type_param: Fail
 inference/unsafe_block_closure_inference_constructor_call_no_type_param: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
 inference/unsafe_block_closure_inference_function_call_implicit_type_param: Fail
 inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr: Fail
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
index b8c3f6f..d517d97 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).
+// Change to a subtype of #lib1::B.
+//   A get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+//                                                   ^
+// pkg/front_end/testcases/override_check_accessor_after_inference.dart:18:7: Error: This is the overridden method ('y').
+//   get y => null; // Inferred type: B
+//       ^
+//
+// pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+//                                                         ^
+// pkg/front_end/testcases/override_check_accessor_after_inference.dart:17:12: Error: This is the overridden method ('x').
+//   void set x(value) {} // Inferred type: A
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).
 // Change to a subtype of #lib1::B.
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
index 1079542..cdc0223 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+// Change to a subtype of #lib1::A.
+//   Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+//                                                        ^
+// pkg/front_end/testcases/override_check_accessor_basic.dart:13:9: Error: This is the overridden method ('y').
+//   A get y => null;
+//         ^
+//
+// pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+//                                                         ^
+// pkg/front_end/testcases/override_check_accessor_basic.dart:12:12: Error: This is the overridden method ('x').
+//   void set x(A value) {}
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
 // Change to a subtype of #lib1::A.
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
index a16ec7c..0a4e4f0 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//       B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant
+//                                                  ^
+// pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:15:12: Error: This is the overridden method ('x4').
+//   void set x4(A value) {}
+//            ^
+//
+// pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//       covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}
+//                                                                 ^
+// pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:16:12: Error: This is the overridden method ('x5').
+//   void set x5(covariant A value) {}
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
 // Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
index 118eae6..bc8edb9 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+//                                                     ^
+// pkg/front_end/testcases/override_check_after_inference.dart:16:8: Error: This is the overridden method ('f').
+//   void f(x) {} // Inferred type: (A) -> void
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
 // Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
diff --git a/pkg/front_end/testcases/override_check_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
index 14ce8e1..8b4f9db 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
@@ -1,4 +1,38 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+// Change to a subtype of #lib1::A.
+//   Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}
+//                                                    ^
+// pkg/front_end/testcases/override_check_basic.dart:15:5: Error: This is the overridden method ('f4').
+//   A f4() {}
+//     ^
+//
+// pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}
+//                                                       ^
+// pkg/front_end/testcases/override_check_basic.dart:14:8: Error: This is the overridden method ('f3').
+//   void f3({A x}) {}
+//        ^
+//
+// pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+//                                                      ^
+// pkg/front_end/testcases/override_check_basic.dart:12:8: Error: This is the overridden method ('f1').
+//   void f1(A x) {}
+//        ^
+//
+// pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}
+//                                                       ^
+// pkg/front_end/testcases/override_check_basic.dart:13:8: Error: This is the overridden method ('f2').
+//   void f2([A x]) {}
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
 // Change to a subtype of #lib1::A.
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
index 1ce77e1..cdddc5d 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}
+//                                                                     ^
+// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:16:8: Error: This is the overridden method ('f5').
+//   void f5(covariant A x) {}
+//        ^
+//
+// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:24:54: Error: The parameter 'x' of the method 'D::f4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+// Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+//   void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant
+//                                                      ^
+// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:15:8: Error: This is the overridden method ('f4').
+//   void f4(A x) {}
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
 // Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index b5e33b4..c507585 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -1,4 +1,25 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory WrongName() {}
+//           ^^^^^^^^^
+// pkg/front_end/testcases/qualified.dart:11:7: Error: The name of the enclosing class is 'Bad'.
+// class Bad extends lib.Missing {
+//       ^^^
+//
+// pkg/front_end/testcases/qualified.dart:12:3: Warning: Type 'lib.Missing' not found.
+//   lib.Missing method() {}
+//   ^
+//
+// pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
+// class Bad extends lib.Missing {
+//                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
 //   factory WrongName() {}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
index 3ffad7c..bc19cfd 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
 //   factory WrongName() {}
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index f72c9c6..ae38d0d 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -1,3 +1,24 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory WrongName() {}
+//           ^^^^^^^^^
+// pkg/front_end/testcases/qualified.dart:11:7: Error: The name of the enclosing class is 'Bad'.
+// class Bad extends lib.Missing {
+//       ^^^
+//
+// pkg/front_end/testcases/qualified.dart:12:3: Warning: Type 'lib.Missing' not found.
+//   lib.Missing method() {}
+//   ^
+//
+// pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
+// class Bad extends lib.Missing {
+//                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
+
 library test.qualified.main;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index f1a7aea..81c5a97 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -1,4 +1,25 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory WrongName() {}
+//           ^^^^^^^^^
+// pkg/front_end/testcases/qualified.dart:11:7: Error: The name of the enclosing class is 'Bad'.
+// class Bad extends lib.Missing {
+//       ^^^
+//
+// pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+//   lib.Missing method() {}
+//   ^
+//
+// pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
+// class Bad extends lib.Missing {
+//                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
 //   factory WrongName() {}
diff --git a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
index 34c0697..35303f8 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
 //   factory WrongName() {}
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.outline.expect
index 6a28c0d..b9d119d 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.outline.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:13: Error: String starting with " must end with ".
+//   print(" $x.);
+//             ^
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:8: Error: Can't find ')' to match '('.
+//   print(" $x.);
+//        ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.outline.expect
index 0f04f62..ca1dccd 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/bad_redirection.dart:6:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() = Bar;
+//         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
index 8c80f82..5bae75e 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
@@ -1,3 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
+// class C = Object with Missing;
+//       ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Error: Type 'Missing' not found.
+// class A extends Missing {}
+//                 ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:7:20: Error: Type 'Missing' not found.
+// class B implements Missing {}
+//                    ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:23: Error: Type 'Missing' not found.
+// class C = Object with Missing;
+//                       ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Warning: Couldn't find constructor 'Missing'.
+//   factory D() = Missing;
+//                 ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:11: Warning: Redirection constructor target not found: 'Missing'
+//   factory D() = Missing;
+//           ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
index 1033641..2bee7a2 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Warning: Couldn't find constructor 'Missing'.
+//   factory A.c() = Missing;
+//                   ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Warning: Redirection constructor target not found: 'Missing'
+//   factory A.c() = Missing;
+//           ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.outline.expect
index a6165ac..530ae8d 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.outline.expect
@@ -1,3 +1,22 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected an identifier, but got '}'.
+// }
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Constructors can't have type parameters.
+//   C<
+//    ^^...
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   C<
+//   ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected '{' before this.
+// }
+// ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
index 0f7997f..1ad775d 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Warning: Method not found: 'JS'.
+// @JS()
+//  ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.outline.expect
index 9cdc3c0..ca492a1 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   const C() : this.x;
+//               ^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
index 2f20ccb..1486b02 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:10: Error: The non-ASCII character 'æ' (U+00E6) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+// class C {æøC();}
+//          ^
+//
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:11: Error: The non-ASCII character 'ø' (U+00F8) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+// class C {æøC();}
+//           ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.outline.expect
index ccf680c..d32fcc1 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.outline.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000035a.dart:5:9: Error: The non-ASCII space character U+2028 can only be used in strings and comments.
+// class C{  C();}
+//         ^
+//
+// pkg/front_end/testcases/rasta/issue_000035a.dart:5:10: Error: The non-ASCII space character U+2028 can only be used in strings and comments.
+// class C{  C();}
+//          ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.outline.expect
index 6a28c0d..b1d01f2 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got '-'.
+// main() => a. - 5;
+//              ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
index 58b020e..2c2bacee 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: '+' is not a prefix operator.
 // Try removing '+'.
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
index c34187e..5a7b5f6 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: '+' is not a prefix operator.
 // Try removing '+'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
index 3058134..a542560 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
@@ -1,3 +1,28 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// a b(c) = d;
+//        ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:29: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C.missingFactoryKeyword() = C.constant;
+//                             ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:28: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C notEvenAConstructor(a) = h;
+//                            ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Warning: Type 'a' not found.
+// a b(c) = d;
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Warning: Couldn't find constructor 'h'.
+//   C notEvenAConstructor(a) = h;
+//                              ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
index 3ea2923b..935af28 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.transformed.expect
@@ -6,7 +6,7 @@
 class A<N extends core::Object = dynamic, S extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
   final field core::List<self::A::U> field;
   constructor •(self::A::N n, self::A::S s) → void
-    : self::A::field = core::List::•<self::A::U>(), super core::Object::•() {
+    : self::A::field = core::_GrowableList::•<self::A::U>(0), super core::Object::•() {
     exp::Expect::isTrue(n is self::A::N);
     exp::Expect::isTrue(s is self::A::S);
   }
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
index 16a1f84..36343aa 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected '{' before this.
 //     : x = 'foo'
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
index 8c3bb35..5002235 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
@@ -1,3 +1,23 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected '{' before this.
+//     : x = 'foo'
+//     ^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:6:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A()
+//   ^^^^^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected a class member, but got ':'.
+//     : x = 'foo'
+//     ^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:7: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+//     : x = 'foo'
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
index be30e1a..fe2d820 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
+// typedef Handle Handle(String command);
+//                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
 // typedef Handle Handle(String command);
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.transformed.expect
index be30e1a..88fea44 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
 // typedef Handle Handle(String command);
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
index 3951999..2cff7f8 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
+// typedef Handle Handle(String command);
+//                ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.outline.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.outline.expect
index 26f7900..fde9d1b 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:16: Error: Non-optional parameters can't have a default value.
+// Try removing the default value or making the parameter optional.
+// main(arguments = [x]) {
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 0da6aee..7994ea9 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+//   foo() => super.foo() + f();
+//                  ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
 //   foo() => super.foo() + f();
diff --git a/pkg/front_end/testcases/rasta/static.dart.direct.expect b/pkg/front_end/testcases/rasta/static.dart.direct.expect
index 2154f49..4702749 100644
--- a/pkg/front_end/testcases/rasta/static.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.direct.expect
@@ -1,3 +1,141 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/static.dart:28:9: Warning: Getter not found: 'staticSetter'.
+//     Foo.staticSetter;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:29:13: Warning: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:31:9: Warning: Setter not found: 'staticConstant'.
+//     Foo.staticConstant++;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:32:13: Warning: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant++);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:35:9: Warning: Setter not found: 'staticFunction'.
+//     Foo.staticFunction++;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:36:13: Warning: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction++);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:37:9: Warning: Setter not found: 'staticGetter'.
+//     Foo.staticGetter++;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:38:13: Warning: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter++);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:39:9: Warning: Getter not found: 'staticSetter'.
+//     Foo.staticSetter++;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:40:13: Warning: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter++);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:42:11: Warning: Setter not found: 'staticConstant'.
+//     ++Foo.staticConstant;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:43:15: Warning: Setter not found: 'staticConstant'.
+//     use(++Foo.staticConstant);
+//               ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:46:11: Warning: Setter not found: 'staticFunction'.
+//     ++Foo.staticFunction;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:47:15: Warning: Setter not found: 'staticFunction'.
+//     use(++Foo.staticFunction);
+//               ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:48:11: Warning: Setter not found: 'staticGetter'.
+//     ++Foo.staticGetter;
+//           ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:49:15: Warning: Setter not found: 'staticGetter'.
+//     use(++Foo.staticGetter);
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:50:11: Warning: Getter not found: 'staticSetter'.
+//     ++Foo.staticSetter;
+//           ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:51:15: Warning: Getter not found: 'staticSetter'.
+//     use(++Foo.staticSetter);
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:61:9: Warning: Getter not found: 'staticSetter'.
+//     Foo.staticSetter();
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:62:13: Warning: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter());
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:64:9: Warning: Setter not found: 'staticConstant'.
+//     Foo.staticConstant = 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:65:13: Warning: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant = 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:68:9: Warning: Setter not found: 'staticFunction'.
+//     Foo.staticFunction = 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:69:13: Warning: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction = 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:70:9: Warning: Setter not found: 'staticGetter'.
+//     Foo.staticGetter = 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:71:13: Warning: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter = 87);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:75:9: Warning: Setter not found: 'staticConstant'.
+//     Foo.staticConstant ??= 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:76:13: Warning: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant ??= 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:79:9: Warning: Setter not found: 'staticFunction'.
+//     Foo.staticFunction ??= 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:80:13: Warning: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction ??= 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:81:9: Warning: Setter not found: 'staticGetter'.
+//     Foo.staticGetter ??= 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:82:13: Warning: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter ??= 87);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:83:9: Warning: Getter not found: 'staticSetter'.
+//     Foo.staticSetter ??= 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:84:13: Warning: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter ??= 87);
+//             ^^^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/super.dart.direct.expect b/pkg/front_end/testcases/rasta/super.dart.direct.expect
index 6f3fd55..412e093 100644
--- a/pkg/front_end/testcases/rasta/super.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.direct.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
 // Try removing '+'.
diff --git a/pkg/front_end/testcases/rasta/super.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/super.dart.direct.transformed.expect
index 6f3fd55..412e093 100644
--- a/pkg/front_end/testcases/rasta/super.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
 // Try removing '+'.
diff --git a/pkg/front_end/testcases/rasta/super.dart.outline.expect b/pkg/front_end/testcases/rasta/super.dart.outline.expect
index 6bfb282..f81146c 100644
--- a/pkg/front_end/testcases/rasta/super.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.outline.expect
@@ -1,3 +1,12 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/super.dart:26:8: Warning: Can't declare a member that conflicts with an inherited one.
+//   void n() {}
+//        ^
+// pkg/front_end/testcases/rasta/super.dart:27:7: Warning: This is the inherited member.
+//   set n(_) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 9b12575..db43639 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/super.dart:26:8: Error: Can't declare a member that conflicts with an inherited one.
 //   void n() {}
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
index f43c8b5..adf016a 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Warning: Superclass has no method named 'foo'.
+//   foo() => super.foo() + f();
+//                  ^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 1cd4858..3037992 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+//   foo() => super.foo() + f();
+//                  ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
 //   foo() => super.foo() + f();
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
index 8c84e9b..fbd4248 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:35:5: Warning: Switch case may fall through to the next case.
+//     case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:36:5: Warning: Switch case may fall through to the next case.
+//     case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:46:5: Warning: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
index bbdd5fa..d2d8a68 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:7:5: Warning: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:13:5: Warning: Switch case may fall through to the next case.
+//     case 2:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:20:5: Warning: Switch case may fall through to the next case.
+//     case 3:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:26:5: Warning: Switch case may fall through to the next case.
+//     case 4:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:31:5: Warning: Switch case may fall through to the next case.
+//     case 5:
+//     ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index d5f0745..ed58703 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -1,4 +1,78 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Warning: Getter not found: 'key'.
+//       print(key);
+//             ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Warning: Setter not found: 'key'.
+//     for (key in x) {
+//          ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Warning: Setter not found: 'Fisk'.
+//     for (Fisk in x) {
+//          ^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:18:13: Error: A prefix can't be used as an expression.
+//       print(collection);
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
+//     for (collection in x) {
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Warning: Setter not found: 'VoidFunction'.
+//     for (VoidFunction in x) {
+//          ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected an identifier, but got '1'.
+//     for (1 in x) {
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:24:13: Warning: Getter not found: 'key'.
+//       print(key);
+//             ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+//     for (1 in x) {
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Warning: Getter not found: 'key'.
+//     print(key);
+//           ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Warning: Setter not found: 'key'.
+//   for (key in arguments) {
+//        ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Warning: Setter not found: 'Fisk'.
+//   for (Fisk in arguments) {
+//        ^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:38:11: Error: A prefix can't be used as an expression.
+//     print(collection);
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
+//   for (collection in arguments) {
+//        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Warning: Setter not found: 'VoidFunction'.
+//   for (VoidFunction in arguments) {
+//        ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected an identifier, but got '1'.
+//   for (1 in arguments) {
+//        ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Warning: Getter not found: 'key'.
+//     print(key);
+//           ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
+//   for (1 in arguments) {
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected an identifier, but got '1'.
 //     for (1 in x) {
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
index d5f0745..a8e8265 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected an identifier, but got '1'.
 //     for (1 in x) {
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.expect
index 0c3e32a..c6efc4b 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
+// import 'dart:html';
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
 // import 'dart:html';
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.transformed.expect
index 0c3e32a..b3ae1f4 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
 // import 'dart:html';
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.outline.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.outline.expect
index 6a28c0d..9edee97 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
+// import 'dart:html';
+//        ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.expect
index 0c3e32a..c6efc4b 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
+// import 'dart:html';
+//        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
 // import 'dart:html';
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.transformed.expect
index 0c3e32a..b3ae1f4 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
 // import 'dart:html';
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
index 6ec2d0c..e03cc64 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type '#lib1::Foo::T'.
+// Try changing the type of the parameter, or casting the argument to '#lib1::Foo::T'.
+//   Foo.from(String _init) : this._internal(x: _init);
+//                                              ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
index 52e72a3..be87a73 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+//   [f() {}];
+//    ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
 //   [f() {}];
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29937.dart.direct.transformed.expect
index 52e72a3..3232e26 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
 //   [f() {}];
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
index adc4090..6872ff5 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+//   [f() {}];
+//    ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
 //   [f() {}];
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29937.dart.strong.transformed.expect
index adc4090..87fc344 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
 //   [f() {}];
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29940.dart.direct.expect
index b13d5e8..4a7fdf3 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29940.dart:7:3: Warning: 'a.b' can't be used as a type because 'a' doesn't refer to an import prefix.
+//   a.b c = null;
+//   ^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
index f07748e..00641a9 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' can't be used as a type because 'a' doesn't refer to an import prefix.
+//   a.b c = null;
+//   ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' can't be used as a type because 'a' doesn't refer to an import prefix.
 //   a.b c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.transformed.expect
index f07748e..0d0ae79 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' can't be used as a type because 'a' doesn't refer to an import prefix.
 //   a.b c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
index eea6787..7d8e0ac 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '""'.
+//   a."";
+//     ^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
index 5c24424..8d219da 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '""'.
+//   a."";
+//     ^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
index 63a61b7..f278bcd 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
@@ -1,4 +1,15 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+// Try adding {}.
+// f() =
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+// h() => null;
+// ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29942.dart.direct.transformed.expect
index 63a61b7..b45be16 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29942.dart.outline.expect
index 3e9bfb4..cedaf70 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.outline.expect
@@ -1,3 +1,14 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+// Try adding {}.
+// f() =
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+// h() => null;
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
index ec26782..39a4246 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
@@ -1,4 +1,15 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+// Try adding {}.
+// f() =
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+// h() => null;
+// ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29942.dart.strong.transformed.expect
index ec26782..ef6dd3f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
index 69b4062..163bc19 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+//   x.(null);
+//     ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
index 69b4062..163bc19 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+//   x.(null);
+//     ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
index be4cec3..7fa8fb7 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+//   var C;
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
 //   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29944.dart.direct.transformed.expect
index be4cec3..af5fa11 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
 //   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29944.dart.outline.expect
index 49b1b59..22ab63f 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+//   var C;
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
index be4cec3..7fa8fb7 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+//   var C;
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
 //   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29944.dart.strong.transformed.expect
index be4cec3..af5fa11 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
 //   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29945.dart.direct.expect
index 186616b..34da2814 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29945.dart:6:3: Warning: 's.bool' can't be used as a type because 's' isn't defined.
+//   s.bool x = null;
+//   ^^^^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
index aecaa47..0215a73 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
+//   s.bool x = null;
+//   ^^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
 //   s.bool x = null;
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.transformed.expect
index aecaa47..da35f2c 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
 //   s.bool x = null;
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29975.dart.direct.expect
index 55032f9..2d292e2 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.direct.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29975.dart:6:14: Error: Duplicated definition of 'F'.
 // typedef void F();
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29975.dart.outline.expect
index 486b2d7..5343ae7 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.outline.expect
@@ -1,7 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29975.dart:6:14: Error: 'F' is already declared in this scope.
+// typedef void F();
+//              ^
+// pkg/front_end/testcases/regress/issue_29975.dart:5:14: Error: Previous declaration of 'F'.
+// typedef void F();
+//              ^
+
 library;
 import self as self;
 
 typedef F = () → void;
-typedef F = () → void;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29975.dart.strong.expect
index 55032f9..2d292e2 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.strong.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29975.dart:6:14: Error: Duplicated definition of 'F'.
 // typedef void F();
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart b/pkg/front_end/testcases/regress/issue_29976.dart
index 94e1cc1..3d2a10c 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart
+++ b/pkg/front_end/testcases/regress/issue_29976.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+get x => null;
+
 void main() {
   f(
     "x${x*"'"é'}x
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
index 7c0169a..b2fd9b3 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
@@ -1,31 +1,66 @@
-// Errors:
+// Formatted problems:
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:15: Error: String starting with ' must end with '.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
 //     "x${x*"'"é'}x
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:7: Error: Can't find '}' to match '${'.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
 //     "x${x*"'"é'}x
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: String starting with " must end with ".
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: Expected a declaration, but got ''.
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: Expected '}' before this.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
 //   )
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Warning: Method not found: 'f'.
+//   f(
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
+//   )
+//   ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
+//     "x${x*"'"é'}x
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
+//     "x${x*"'"é'}x
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
+//   )
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
 //   )
 //   ^
 
@@ -33,6 +68,8 @@
 import self as self;
 import "dart:core" as core;
 
+static get x() → dynamic
+  return null;
 static method main() → void {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
index 7c0169a..d89579f 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
@@ -1,31 +1,31 @@
-// Errors:
+// Unhandled errors:
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:15: Error: String starting with ' must end with '.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
 //     "x${x*"'"é'}x
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:7: Error: Can't find '}' to match '${'.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
 //     "x${x*"'"é'}x
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: String starting with " must end with ".
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: Expected a declaration, but got ''.
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: Expected '}' before this.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
 //   )
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
 //   )
 //   ^
 
@@ -33,6 +33,8 @@
 import self as self;
 import "dart:core" as core;
 
+static get x() → dynamic
+  return null;
 static method main() → void {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29976.dart.outline.expect
index 2982c48..eb72274 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.outline.expect
@@ -1,5 +1,26 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
+//     "x${x*"'"é'}x
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
+//     "x${x*"'"é'}x
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
+
 library;
 import self as self;
 
+static get x() → dynamic
+  ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
index 8ed52a2..381ef02 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
@@ -1,39 +1,70 @@
-// Errors:
+// Formatted problems:
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:15: Error: String starting with ' must end with '.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
 //     "x${x*"'"é'}x
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:7: Error: Can't find '}' to match '${'.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
 //     "x${x*"'"é'}x
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: String starting with " must end with ".
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:10:1: Error: Expected a declaration, but got ''.
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:7:9: Error: Getter not found: 'x'.
-//     "x${x*"'"é'}x
-//         ^
-//
-// pkg/front_end/testcases/regress/issue_29976.dart:7:14: Error: Expected '}' before this.
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
 //     "x${x*"'"é'}x
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
 //   )
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:6:3: Error: Method not found: 'f'.
+// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Method not found: 'f'.
 //   f(
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
+//   )
+//   ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
+//     "x${x*"'"é'}x
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
+//     "x${x*"'"é'}x
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
+//   )
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Method not found: 'f'.
+//   f(
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
 //   )
 //   ^
 
@@ -41,6 +72,8 @@
 import self as self;
 import "dart:core" as core;
 
+static get x() → dynamic
+  return null;
 static method main() → void {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29976.dart.strong.transformed.expect
index d2f376d..080428d 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.strong.transformed.expect
@@ -1,8 +1,44 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
+//     "x${x*"'"é'}x
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
+//     "x${x*"'"é'}x
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: String starting with " must end with ".
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
+//   )
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Method not found: 'f'.
+//   f(
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
+//   )
+//   ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
-  )
-  ^";
+static get x() → dynamic
+  return null;
+static method main() → void {
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
index 2e710dd..2e676e4 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+//   Invalid MIME type.
+// import 'data:async';
+//                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
 //   Invalid MIME type.
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29977.dart.direct.transformed.expect
index 2e710dd..262ff05 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
 //   Invalid MIME type.
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29977.dart.outline.expect
index 6a28c0d..33e2d4e 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+//   Invalid MIME type.
+// import 'data:async';
+//                   ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
index 2e710dd..2e676e4 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+//   Invalid MIME type.
+// import 'data:async';
+//                   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
 //   Invalid MIME type.
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29977.dart.strong.transformed.expect
index 2e710dd..262ff05 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
 //   Invalid MIME type.
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
index e7d6daa..e883dbf 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+//   foo(null, f() {});
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
 //   foo(null, f() {});
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29978.dart.direct.transformed.expect
index e7d6daa..62cb849 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
 //   foo(null, f() {});
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
index 8056564..a15db2b 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+//   foo(null, f() {});
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
 //   foo(null, f() {});
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29978.dart.strong.transformed.expect
index 8056564..6a94d34 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
 //   foo(null, f() {});
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
index c6c9753..2df3c7c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+//   (f() {})();
+//    ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
 //   (f() {})();
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29979.dart.direct.transformed.expect
index c6c9753..f556c17 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
 //   (f() {})();
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
index 14197c3..e9dc062 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+//   (f() {})();
+//    ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
 //   (f() {})();
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29979.dart.strong.transformed.expect
index 14197c3..aafb742 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
 //   (f() {})();
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29980.dart.direct.expect
index 15d1958..c2b6598 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29980.dart:6:3: Warning: 'x.y' can't be used as a type because 'x' isn't defined.
+//   x.y z;
+//   ^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
index 4a6574c..d313908 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
+//   x.y z;
+//   ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
 //   x.y z;
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.transformed.expect
index 4a6574c..c271e3e 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
 //   x.y z;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
index dad6a74..c031f86 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Warning: Expected 1 type arguments.
+//   C<String, String> field;
+//   ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index f2f6961..a99b77c 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
+//   C<String, String> field;
+//   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
 //   C<String, String> field;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
index f2f6961..f41e053 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
 //   C<String, String> field;
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
index f8f0cc4..2a74ae4 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
@@ -1,6 +1,74 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Warning: Getter not found: 'éh'.
+//   print('${eh[éh']}');
+//               ^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.\n  print('\${eh[\u0233h']}');\n                ^";
+static method main() → dynamic {
+  dynamic eh = <dynamic, dynamic>{"\u0233h": "\u0233h"};
+  core::print("${eh.[](throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect
new file mode 100644
index 0000000..e608ced
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect
@@ -0,0 +1,39 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  dynamic eh = <dynamic, dynamic>{"\u0233h": "\u0233h"};
+  core::print("${eh.[](throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
+}
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29982.dart.outline.expect
index 6a28c0d..8e9ae53 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.outline.expect
@@ -1,3 +1,22 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29982.dart.strong.expect
index f8f0cc4..3cf1dab 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.strong.expect
@@ -1,6 +1,78 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: 'éh'.
+//   print('${eh[éh']}');
+//               ^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: 'éh'.
+//   print('${eh[éh']}');
+//               ^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
 library;
 import self as self;
+import "dart:core" as core;
 
-static method #main() → dynamic {
-  throw "pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.\n  print('\${eh[\u0233h']}');\n                ^";
+static method main() → dynamic {
+  core::Map<core::String, core::String> eh = <core::String, core::String>{"\u0233h": "\u0233h"};
+  core::print("${eh.{core::Map::[]}(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.strong.transformed.expect
new file mode 100644
index 0000000..02e6e5f
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.strong.transformed.expect
@@ -0,0 +1,43 @@
+// Unhandled errors:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: String starting with ' must end with '.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: 'éh'.
+//   print('${eh[éh']}');
+//               ^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Map<core::String, core::String> eh = <core::String, core::String>{"\u0233h": "\u0233h"};
+  core::print("${eh.{core::Map::[]}(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
+}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
index 9c66143..0043c08 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
@@ -1,3 +1,21 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Warning: Getter not found: 'missing'.
+//   return missing;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+//   return missing;
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Warning: Getter not found: 'dummy'.
+// g() sync* => dummy;
+//              ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+// g() sync* => dummy;
+//              ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index 324e30a..5af7027 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -1,4 +1,22 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
+//   return missing;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+//   return missing;
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+// g() sync* => dummy;
+//              ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+// g() sync* => dummy;
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
 //   return missing;
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.transformed.expect
index 688f612..6fcb220 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
 //   return missing;
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index 01ccbc1..9c9464b 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -1,3 +1,16 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Warning: Getter not found: 'i'.
+//   for (int i = i;; false) {}
+//                ^
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+//   for (int i = i;; false) {}
+//            ^
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+//   for (int i = i;; false) {}
+//                ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 689db8c..ca8ca48 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+//   for (int i = i;; false) {}
+//                ^
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+//   for (int i = i;; false) {}
+//            ^
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+//   for (int i = i;; false) {}
+//                ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
 //   for (int i = i;; false) {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
index 7db28e0..03506c1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
 //   for (int i = i;; false) {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
index d87258e..d6e6130 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
@@ -1,4 +1,19 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   🔛
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Expected ';' after this.
+//   🔛
+//   ^^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Warning: Getter not found: '🔛'.
+//   🔛
+//   ^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
index d87258e..52f90dd 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29985.dart.outline.expect
index 81debf2..355a2a5 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   🔛
+//   ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
index 2ec7cc8..0a05af8 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
@@ -1,4 +1,19 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   🔛
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Expected ';' after this.
+//   🔛
+//   ^^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '🔛'.
+//   🔛
+//   ^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.transformed.expect
index 2ec7cc8..0d94ae5 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
 // Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
index aa0c741..095bbbf 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+// C(this.name);
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: Field formal parameters can only be used in a constructor.
+// Try removing 'this.'.
+// C(this.name);
+//   ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29986.dart.direct.transformed.expect
index aa0c741..7c524d5 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29986.dart.outline.expect
index d2eac43..2fe2ce6 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+// C(this.name);
+//             ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
index aa0c741..095bbbf 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
@@ -1,4 +1,16 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+// C(this.name);
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: Field formal parameters can only be used in a constructor.
+// Try removing 'this.'.
+// C(this.name);
+//   ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29986.dart.strong.transformed.expect
index aa0c741..7c524d5 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
 // Try adding {}.
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
index bd8fdba..6273432 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+//   Illegal scheme character.
+// import "dart_:core";
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
 //   Illegal scheme character.
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29987.dart.direct.transformed.expect
index bd8fdba..99b37bf 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
 //   Illegal scheme character.
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29987.dart.outline.expect
index 6a28c0d..d226574 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+//   Illegal scheme character.
+// import "dart_:core";
+//             ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
index bd8fdba..6273432 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+//   Illegal scheme character.
+// import "dart_:core";
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
 //   Illegal scheme character.
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29987.dart.strong.transformed.expect
index bd8fdba..99b37bf 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
 //   Illegal scheme character.
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
index a07ea78..e7243ad 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   set A(v) {}
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
index a07ea78..6b3d9f4 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   set A(v) {}
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
index c591247..d2f5b89 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
index 729a604..41ead93 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   set A(v) {}
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
index 729a604..5b18f1e 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   set A(v) {}
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30836.dart.direct.expect
index a55281a..981475d 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.direct.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int x;
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30836.dart.direct.transformed.expect
index a55281a..686b6ba 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30836.dart.strong.expect
index a55281a..981475d 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.strong.expect
@@ -1,4 +1,11 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int x;
+//             ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30836.dart.strong.transformed.expect
index a55281a..686b6ba 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
index 37bfe50..3f2e7c5 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   get A {
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   get A {
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30981.dart.direct.transformed.expect
index 37bfe50..f9a4f7b 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   get A {
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30981.dart.outline.expect
index f1cbbf4..b7d5e6b 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   get A {
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
index 37bfe50..3f2e7c5 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   get A {
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   get A {
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30981.dart.strong.transformed.expect
index 37bfe50..f9a4f7b 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
 //   get A {
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
index a31a78a..ce9d891 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
@@ -1,4 +1,34 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+// part '$foo';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+// part '$foo/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+// part '$for/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+// part '${true}';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+// part 'the${1}thing';
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+// part 'part_$foo${'a'}.dart';
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+// part 'part_${'a'}_$foo.dart';
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30994.dart.direct.transformed.expect
index a31a78a..9fa56bb 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30994.dart.outline.expect
index 11351ee..849db7f 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.outline.expect
@@ -1,3 +1,33 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+// part '$foo';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+// part '$foo/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+// part '$for/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+// part '${true}';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+// part 'the${1}thing';
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+// part 'part_$foo${'a'}.dart';
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+// part 'part_${'a'}_$foo.dart';
+//            ^
+
 library lib;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
index a31a78a..ce9d891 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
@@ -1,4 +1,34 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+// part '$foo';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+// part '$foo/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+// part '$for/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+// part '${true}';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+// part 'the${1}thing';
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+// part 'part_$foo${'a'}.dart';
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+// part 'part_${'a'}_$foo.dart';
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30994.dart.strong.transformed.expect
index a31a78a..9fa56bb 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31155.dart.direct.expect
index d785e40..fbe631b 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.direct.expect
@@ -1,4 +1,28 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
+//   var f = Map<A, B> {};
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator declarations must be preceeded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator '>' should have exactly one parameter.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:23: Error: Expected a class member, but got ';'.
+//   var f = Map<A, B> {};
+//                       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
 //   var f = Map<A, B> {};
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31155.dart.direct.transformed.expect
index d785e40..78c1a61 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
 //   var f = Map<A, B> {};
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
index 5b7edf4..526a82b 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
@@ -1,3 +1,27 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
+//   var f = Map<A, B> {};
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator declarations must be preceeded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator '>' should have exactly one parameter.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:23: Error: Expected a class member, but got ';'.
+//   var f = Map<A, B> {};
+//                       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
index 3b1594e..23f4fbd 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
@@ -1,4 +1,33 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
+//   var f = Map<A, B> {};
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator declarations must be preceeded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:19: Error: Operator '>' should have exactly one parameter.
+//   var f = Map<A, B> {};
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:23: Error: Expected a class member, but got ';'.
+//   var f = Map<A, B> {};
+//                       ^
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+// Try correcting the name to the name of an existing method, or defining a method named '<'.
+//   var f = Map<A, B> {};
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
 //   var f = Map<A, B> {};
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
index 868d241..d572835 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31155.dart:11:18: Error: Expected ';' after this.
 //   var f = Map<A, B> {};
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
index 895f75f..8a84bd6 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+//   return null?.(1);
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
index 895f75f..8a84bd6 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+//   return null?.(1);
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31171.dart.direct.expect
index 49b38eb..f3cb890 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.direct.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
+// typedef T =
+//           ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
 // typedef F = Map<String, dynamic> Function();
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31171.dart.direct.transformed.expect
index 49b38eb..f86e25c4 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
 // typedef F = Map<String, dynamic> Function();
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31171.dart.outline.expect
index b3a684f..b3c6998 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.outline.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
+// typedef T =
+//           ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31171.dart.strong.expect
index 49b38eb..f3cb890 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.strong.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
+// typedef T =
+//           ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
 // typedef F = Map<String, dynamic> Function();
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31171.dart.strong.transformed.expect
index 49b38eb..f86e25c4 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
 // typedef F = Map<String, dynamic> Function();
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
index 624821f2..1223575 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+//   return null?.[1];
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
index 624821f2..1223575 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+//   return null?.[1];
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
index c09214e..dfeec4e 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
@@ -1,4 +1,15 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
+//   operator unary- => 0;
+//            ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- => 0;
+//                 ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
 //   operator unary- => 0;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.transformed.expect
index c09214e..3ffea36 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
 //   operator unary- => 0;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
index 626dcfc..2de1a4b 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
@@ -1,3 +1,14 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
+//   operator unary- => 0;
+//            ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- => 0;
+//                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
index c09214e..dfeec4e 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
@@ -1,4 +1,15 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
+//   operator unary- => 0;
+//            ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- => 0;
+//                 ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
 //   operator unary- => 0;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.transformed.expect
index c09214e..3ffea36 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
 //   operator unary- => 0;
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
index 0e18d33..8528783 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
@@ -1,4 +1,25 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+// pkg/front_end/testcases/regress/issue_31184.dart:6:12: Error: Previous declaration of 'i'.
+//   for (int i = 0, i > 10; i++) {}
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+//   for (int i = 0, i > 10; i++) {}
+//                     ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:21: Warning: Getter not found: ''.
+//   for (int i = 0, i > 10; i++) {}
+//                     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
 //   for (int i = 0, i > 10; i++) {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.direct.transformed.expect
index 0e18d33..fd614a7 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
 //   for (int i = 0, i > 10; i++) {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index b3ffbf8..a72fee1 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -1,4 +1,25 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+// pkg/front_end/testcases/regress/issue_31184.dart:6:12: Error: Previous declaration of 'i'.
+//   for (int i = 0, i > 10; i++) {}
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+//   for (int i = 0, i > 10; i++) {}
+//                     ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.
+//   for (int i = 0, i > 10; i++) {}
+//                     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
 //   for (int i = 0, i > 10; i++) {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31185.dart.direct.expect
index d3a912f..bc5ace6 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.direct.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
+//   return i ++ (i);
+//            ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:14: Error: Expected ';' after this.
+//   return (i) ++ (i);
+//              ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
+//   return (i) ++ (i);
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
 //   return i ++ (i);
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.direct.transformed.expect
index d3a912f..4494677 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
 //   return i ++ (i);
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
index f26aee4..3255194 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
+//   return i ++ (i);
+//            ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:14: Error: Expected ';' after this.
+//   return (i) ++ (i);
+//              ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
+//   return (i) ++ (i);
+//            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
 //   return i ++ (i);
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
index 1e08909..9b0d784 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
 //   return i ++ (i);
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
index db52098..79db460 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+//   return null?.true;
+//                ^^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
index db52098..79db460 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+//   return null?.true;
+//                ^^^^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
index df2ebb4..4b86241 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+//   return null?.1;
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
index df2ebb4..4b86241 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+//   return null?.1;
+//                ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
index eb3888b..4877df5 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
@@ -1,4 +1,26 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected a declaration, but got '>'.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Warning: Type 'type' not found.
+// type T = Map<A, B>
+// ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Warning: Getter not found: 'A'.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Warning: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
 // type T = Map<A, B>
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
index eb3888b..17bbd41 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
 // type T = Map<A, B>
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
index c8bd468..96028d3 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected a declaration, but got '>'.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Warning: Type 'type' not found.
+// type T = Map<A, B>
+// ^
+
 library;
 import self as self;
 
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
index 968f42b..5e7a651 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
@@ -1,4 +1,31 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected a declaration, but got '>'.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Error: Getter not found: 'A'.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// type T = Map<A, B>
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
 // type T = Map<A, B>
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
index 2d9d977..6757514 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: Expected ';' after this.
 // type T = Map<A, B>
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
index 808b453..6c4525d 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
@@ -1,3 +1,16 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:1: Warning: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Warning: 'U' isn't a type.
+//   T<U> v;
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Warning: Expected 0 type arguments.
+//   T<U> v;
+//   ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
index b7201fd..3961a70 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
@@ -1,3 +1,8 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:1: Warning: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index d69d0be..a02febd 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -1,4 +1,17 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:1: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
+//   T<U> v;
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
+//   T<U> v;
+//   ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31190.dart:1: Error: Can't use type arguments with type variable 'T'.
 // Try removing the type arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
index d69d0be..4f5ca69 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31190.dart:1: Error: Can't use type arguments with type variable 'T'.
 // Try removing the type arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
index 94c1472..7729a31 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
@@ -1,4 +1,19 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Increment() : x++ {}
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Can't access 'this' in a field initializer to read 'x'.
+//   Increment() : x++ {}
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+//   Increment() : x++ {}
+//                 ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31192.dart.direct.transformed.expect
index 94c1472..3a2498d 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31192.dart.outline.expect
index 9ebe466..2ce48d5 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.outline.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Increment() : x++ {}
+//                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
index 94c1472..7729a31 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -1,4 +1,19 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Increment() : x++ {}
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Can't access 'this' in a field initializer to read 'x'.
+//   Increment() : x++ {}
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+//   Increment() : x++ {}
+//                 ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
index 94c1472..3a2498d 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
index 6421b2c..008a259 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
@@ -1,3 +1,14 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   B(): super().foo() {}
+//        ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
+//   B(): super().foo() {}
+//                ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index 6421b2c..008a259 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -1,3 +1,14 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   B(): super().foo() {}
+//        ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
+//   B(): super().foo() {}
+//                ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
index 30d4403..6385681 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Warning: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   new A.foo(1, 2);
+//            ^
+// pkg/front_end/testcases/regress/issue_31299.dart:10:3: Warning: Found this candidate, but the arguments don't match.
+//   A.foo() : m = 2;
+//   ^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index 11b7715..b103d7c 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -1,4 +1,18 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   new A.foo(1, 2);
+//            ^
+// pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Found this candidate, but the arguments don't match.
+//   A.foo() : m = 2;
+//   ^^^
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+//   new A().foo();
+//              ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 // Try removing the extra positional arguments.
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32200.dart.direct.expect
index 9857054..14469fb9 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Warning: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+//   self.Foo self;
+//   ^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
index 4253658..ff1f016 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+//   self.Foo self;
+//   ^^^^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
 //   self.Foo self;
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
index 4253658..40183e6 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
 //   self.Foo self;
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
index 057aa3f..90e7da0 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
@@ -1,4 +1,34 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The non-abstract class 'C' is missing implementations for these members:
+//   'foo'.
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C extends A implements B {
+//       ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Error: 'foo' is defined here.
+//   foo(int x, {int y}) => y;
+//   ^^^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The non-abstract class 'E' is missing implementations for these members:
+//   'foo'.
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class E extends D {
+//       ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Error: 'foo' is defined here.
+//   foo(int x, {int y});
+//   ^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The non-abstract class 'C' is missing implementations for these members:
 //   'foo'.
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
index 720e78e..eb7d14d 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
@@ -1,3 +1,26 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Warning: Expected 1 type arguments.
+//   foo<String, String>("hello world");
+//   ^
+// pkg/front_end/testcases/regress/issue_32972.dart:5:6: Warning: Found this candidate, but the arguments don't match.
+// void foo<X>(X i) {
+//      ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Warning: Expected 1 type arguments.
+//   Foo.foo<int, int>(42);
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:10:10: Warning: Found this candidate, but the arguments don't match.
+//   static foo<X>(X i) {
+//          ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Warning: Expected 2 type arguments.
+//   new Bar<String>();
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:19:7: Warning: The class 'Bar' has a constructor that takes no arguments.
+// class Bar<X, Y> {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
index 11825b0..bf43955 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
@@ -1,4 +1,31 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+//   foo<String, String>("hello world");
+//   ^
+// pkg/front_end/testcases/regress/issue_32972.dart:5:6: Error: Found this candidate, but the arguments don't match.
+// void foo<X>(X i) {
+//      ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+//   Foo.foo<int, int>(42);
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:10:10: Error: Found this candidate, but the arguments don't match.
+//   static foo<X>(X i) {
+//          ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+//   new Bar<String>();
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:19:7: Error: The class 'Bar' has a constructor that takes no arguments.
+// class Bar<X, Y> {}
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+//   f.bar<double, double>(42.42);
+//     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
 //   foo<String, String>("hello world");
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect b/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
index edcd349..65a098c 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
@@ -1,3 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Warning: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   var x = new ExistingClass.nonExistingConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Warning: Method not found: 'ExistingClass'.
+//   x = new ExistingClass();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Warning: Method not found: 'ExistingClass'.
+//   x = new ExistingClass<String>();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Warning: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String>.nonExistingConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Warning: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String, String>.nonExistingConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Warning: Method not found: 'NonExistingClass'.
+//   x = new NonExistingClass();
+//           ^^^^^^^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.strong.expect b/pkg/front_end/testcases/regress/issue_33452.dart.strong.expect
index 8b82c2c..b93ac6e 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.strong.expect
@@ -1,4 +1,30 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   var x = new ExistingClass.nonExistingConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
+//   x = new ExistingClass();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
+//   x = new ExistingClass<String>();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String>.nonExistingConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String, String>.nonExistingConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
+//   x = new NonExistingClass();
+//           ^^^^^^^^^^^^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
 //   var x = new ExistingClass.nonExistingConstructor();
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_33452.dart.strong.transformed.expect
index 8b82c2c..69ac3ff 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
 //   var x = new ExistingClass.nonExistingConstructor();
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
index 7c48338..e783015 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
@@ -1,4 +1,14 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
 //   static set C(v) {} //# 01: compile-time error
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
index 7c48338..db5adcb 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
 //   static set C(v) {} //# 01: compile-time error
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
index 3625d24..f78eb0b 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
@@ -1,3 +1,13 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
index 90b0ea1..76bcc00 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
@@ -1,4 +1,19 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
+//   c.C = 5;
+//     ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
 //   static set C(v) {} //# 01: compile-time error
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
index 45d4bcd..4b9ee03 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
 //   static set C(v) {} //# 01: compile-time error
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect
index 8d80aa8..b4234d1 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect
index 8d80aa8..98d11ba 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
diff --git a/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.expect b/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.expect
index 8bd0c4b..31e819a 100644
--- a/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.expect
@@ -1,4 +1,10 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
+//            ^^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
diff --git a/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.transformed.expect
index 8bd0c4b..77b3db2 100644
--- a/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index 5f06fd8..09a6b38 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
+// Try changing the type of the parameter, or casting the argument to 'test::C::g1::U'.
+//     this.f<U>(1.5);
+//               ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index 974e021..2eb1e5fa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) → dart.core::num' can't be assigned to a variable of type '(dart.core::int) → dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) → dart.core::int'.
+//   d.value /*@checkReturn=(num) -> num*/ += 1;
+//                                         ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) → dart.core::num' can't be assigned to a variable of type '(dart.core::int) → dart.core::int'.
+// Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) → dart.core::int'.
+//     d.value /*@checkReturn=(num) -> num*/ += 1;
+//                                           ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 6bc4680..6cb51fa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) → void>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) → void>'.
+//   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                 ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) → void>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) → void>'.
+//   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                         ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) → void>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) → void>'.
+//   c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+//                                                  ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) → void>'.
+// Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) → void>'.
+//   var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+//                                                          ^
+
 library test;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index c1ac933..70bdfe0 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -8,12 +8,13 @@
 
 DeltaBlue: Fail
 accessors: Fail
+ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
 argument_mismatch: Fail # Test assumes Dart 1.0 semantics
 async_function: Fail
 await: Fail
 bug21938: TypeCheckError
 bug30695: TypeCheckError
-bug31124: RuntimeError # Test has an intentional error
+bug31124: RuntimeError # Test has no main method (and we shouldn't add one).
 bug32629: Fail # Test has an intentional error
 call: Fail
 cascade: Fail
@@ -23,9 +24,11 @@
 covariant_generic: Fail
 cycles: Fail
 default_values: Fail
+duplicated_declarations: TypeCheckError
 dynamic_and_void: Fail # Test assumes Dart 1.0 semantics
 escape: Fail
 external: Fail
+external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
 fallthrough: Fail
 fibonacci: Fail
 for_in_scope: Fail
@@ -34,41 +37,7 @@
 functions: Fail
 hello: Fail
 implicit_this: Fail
-invocations: Fail
-literals: Fail
-map: Fail
-micro: Fail
-named_parameters: Fail
-null_aware: Fail
-operators: Fail
-optional: Fail
-override_check_accessor_after_inference: TypeCheckError # Issue #31620
-override_check_accessor_basic: TypeCheckError # Issue #31620
-override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
-override_check_after_inference: TypeCheckError # Issue #31620
-override_check_basic: TypeCheckError # Issue #31620
-override_check_with_covariant_modifier: TypeCheckError # Issue #31620
-platform: Fail
-prefer_baseclass: Fail
-redirecting_constructor: Fail
-redirecting_factory: Fail
-redirecting_factory_chain_test: Fail # Missing support for RedirectingFactoryConstructor.
-redirecting_factory_simple_test: Fail # Missing support for RedirectingFactoryConstructor.
-redirecting_factory_typeargs_test: Fail # Missing support for RedirectingFactoryConstructor.
-redirecting_factory_typeparam_test: Fail # Missing support for RedirectingFactoryConstructor.
-redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
-statements: Fail
-stringliteral: Fail
-super_rasta_copy: Fail
-top_level_accessors: Fail
-type_variable_as_super: Fail
-type_variable_prefix: RuntimeError
-typedef: Fail
-uninitialized_fields: Fail
-unused_methods: Fail
-void_methods: Fail
-warn_unresolved_sends: Fail # Test assumes Dart 1.0 semantics
-
+incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
 inference/abstract_class_instantiation: Fail # Issue #30040
 inference/conflicts_can_happen: TypeCheckError
 inference/conflicts_can_happen2: TypeCheckError
@@ -109,10 +78,24 @@
 inference_new/infer_assign_to_index_upwards: TypeCheckError
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
-
 instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
 instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
-
+invocations: Fail
+literals: Fail
+map: Fail
+micro: Fail
+named_parameters: Fail
+null_aware: Fail
+operators: Fail
+optional: Fail
+override_check_accessor_after_inference: TypeCheckError # Issue #31620
+override_check_accessor_basic: TypeCheckError # Issue #31620
+override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
+override_check_after_inference: TypeCheckError # Issue #31620
+override_check_basic: TypeCheckError # Issue #31620
+override_check_with_covariant_modifier: TypeCheckError # Issue #31620
+platform: Fail
+prefer_baseclass: Fail
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
 rasta/bad_continue: Fail
@@ -130,8 +113,11 @@
 rasta/constant_get_and_invoke: Fail
 rasta/deferred_lib: Fail
 rasta/deferred_load: Fail
+rasta/duplicated_mixin: RuntimeError # Expected, this file has no main method.
 rasta/enum: Fail
+rasta/export: RuntimeError # Expected, this file has no main method.
 rasta/external_factory_redirection: Fail
+rasta/foo: RuntimeError # Expected, this file has no main method.
 rasta/for_loop: Fail
 rasta/generic_factory: Fail
 rasta/hello: Fail
@@ -190,18 +176,23 @@
 rasta/unresolved_constructor: Fail
 rasta/unresolved_for_in: Fail
 rasta/unresolved_recovery: Fail
-
+redirecting_constructor: Fail
+redirecting_factory: Fail
+redirecting_factory_chain_test: Fail # Missing support for RedirectingFactoryConstructor.
+redirecting_factory_simple_test: Fail # Missing support for RedirectingFactoryConstructor.
+redirecting_factory_typeargs_test: Fail # Missing support for RedirectingFactoryConstructor.
+redirecting_factory_typeparam_test: Fail # Missing support for RedirectingFactoryConstructor.
+redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
 regress/issue_29975: Fail # Issue 29975.
-regress/issue_29976: TypeCheckError # Issue 29976.
-regress/issue_29982: Fail # Issue 29982.
+regress/issue_29976: RuntimeError # Tests runtime behavior of error recovery.
+regress/issue_29982: RuntimeError # Tests runtime behavior of error recovery.
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_31184: TypeCheckError
 regress/issue_31299: TypeCheckError
+regress/issue_32660: TypeCheckError # Test has an intentional error
 regress/issue_32972: TypeCheckError
 regress/issue_33452: RuntimeError # Test has an intentional error
-regress/issue_32660: TypeCheckError # Test has an intentional error
 regress/issue_34225: RuntimeError
-
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
 runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
 runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
@@ -210,14 +201,14 @@
 runtime_checks_new/stub_from_interface_covariantImpl_from_super: TypeCheckError
 runtime_checks_new/stub_from_interface_covariantInterface_from_class: TypeCheckError
 runtime_checks_new/stub_from_interface_covariant_from_super: TypeCheckError
-
-ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
-rasta/duplicated_mixin: RuntimeError # Expected, this file has no main method.
-rasta/export: RuntimeError # Expected, this file has no main method.
-rasta/foo: RuntimeError # Expected, this file has no main method.
-
-incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
-
-co19_language_metadata_syntax_t04: RuntimeError # Fasta doesn't recover well
-
-external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
+statements: Fail
+stringliteral: Fail
+super_rasta_copy: Fail
+top_level_accessors: Fail
+type_variable_as_super: Fail
+type_variable_prefix: RuntimeError
+typedef: Fail
+uninitialized_fields: Fail
+unused_methods: Fail
+void_methods: Fail
+warn_unresolved_sends: Fail # Test assumes Dart 1.0 semantics
diff --git a/pkg/front_end/testcases/super_call.dart.direct.expect b/pkg/front_end/testcases/super_call.dart.direct.expect
index d97a5e2..e803acb 100644
--- a/pkg/front_end/testcases/super_call.dart.direct.expect
+++ b/pkg/front_end/testcases/super_call.dart.direct.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     return super(5);
+//            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/super_call.dart.strong.expect b/pkg/front_end/testcases/super_call.dart.strong.expect
index be03ad0..c2176cd 100644
--- a/pkg/front_end/testcases/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/super_call.dart.strong.expect
@@ -1,3 +1,10 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     return super(5);
+//            ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect b/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
index 91b673f..aeab753 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
@@ -1,4 +1,226 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:60:11: Warning: Superclass has no getter named 'g'.
+//     super.g;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:61:15: Warning: Superclass has no getter named 'g'.
+//     use(super.g);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:79:11: Warning: Superclass has no setter named 'e'.
+//     super.e++;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:80:15: Warning: Superclass has no setter named 'e'.
+//     use(super.e++);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:81:11: Warning: Superclass has no setter named 'f'.
+//     super.f++;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:82:15: Warning: Superclass has no setter named 'f'.
+//     use(super.f++);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:83:11: Warning: Superclass has no getter named 'g'.
+//     super.g++;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:84:15: Warning: Superclass has no getter named 'g'.
+//     use(super.g++);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:91:11: Warning: Superclass has no setter named 'm'.
+//     super.m++;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:92:15: Warning: Superclass has no setter named 'm'.
+//     use(super.m++);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:102:13: Warning: Superclass has no setter named 'e'.
+//     ++super.e;
+//             ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:103:17: Warning: Superclass has no setter named 'e'.
+//     use(++super.e);
+//                 ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:104:13: Warning: Superclass has no setter named 'f'.
+//     ++super.f;
+//             ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:105:17: Warning: Superclass has no setter named 'f'.
+//     use(++super.f);
+//                 ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:106:13: Warning: Superclass has no getter named 'g'.
+//     ++super.g;
+//             ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:107:17: Warning: Superclass has no getter named 'g'.
+//     use(++super.g);
+//                 ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:114:13: Warning: Superclass has no setter named 'm'.
+//     ++super.m;
+//             ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:115:17: Warning: Superclass has no setter named 'm'.
+//     use(++super.m);
+//                 ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:129:11: Warning: Superclass has no method named 'g'.
+//     super.g();
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:130:15: Warning: Superclass has no method named 'g'.
+//     use(super.g());
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:150:11: Warning: Superclass has no setter named 'e'.
+//     super.e = 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:151:15: Warning: Superclass has no setter named 'e'.
+//     use(super.e = 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:152:11: Warning: Superclass has no setter named 'f'.
+//     super.f = 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:153:15: Warning: Superclass has no setter named 'f'.
+//     use(super.f = 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:162:11: Warning: Superclass has no setter named 'm'.
+//     super.m = 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:163:15: Warning: Superclass has no setter named 'm'.
+//     use(super.m = 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:173:11: Warning: Superclass has no setter named 'e'.
+//     super.e ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:174:15: Warning: Superclass has no setter named 'e'.
+//     use(super.e ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:175:11: Warning: Superclass has no setter named 'f'.
+//     super.f ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:176:15: Warning: Superclass has no setter named 'f'.
+//     use(super.f ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:177:11: Warning: Superclass has no getter named 'g'.
+//     super.g ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:178:15: Warning: Superclass has no getter named 'g'.
+//     use(super.g ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:185:11: Warning: Superclass has no setter named 'm'.
+//     super.m ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:186:15: Warning: Superclass has no setter named 'm'.
+//     use(super.m ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:196:11: Warning: Superclass has no setter named 'e'.
+//     super.e += 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:197:15: Warning: Superclass has no setter named 'e'.
+//     use(super.e += 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:198:11: Warning: Superclass has no setter named 'f'.
+//     super.f += 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:199:15: Warning: Superclass has no setter named 'f'.
+//     use(super.f += 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:200:11: Warning: Superclass has no getter named 'g'.
+//     super.g += 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:201:15: Warning: Superclass has no getter named 'g'.
+//     use(super.g += 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:208:11: Warning: Superclass has no setter named 'm'.
+//     super.m += 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:209:15: Warning: Superclass has no setter named 'm'.
+//     use(super.m += 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:219:11: Warning: Superclass has no setter named 'e'.
+//     super.e -= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:220:15: Warning: Superclass has no setter named 'e'.
+//     use(super.e -= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:221:11: Warning: Superclass has no setter named 'f'.
+//     super.f -= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:222:15: Warning: Superclass has no setter named 'f'.
+//     use(super.f -= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:223:11: Warning: Superclass has no getter named 'g'.
+//     super.g -= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:224:15: Warning: Superclass has no getter named 'g'.
+//     use(super.g -= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:231:11: Warning: Superclass has no setter named 'm'.
+//     super.m -= 42;
+//           ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:232:15: Warning: Superclass has no setter named 'm'.
+//     use(super.m -= 42);
+//               ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:139:12: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     super.m(87);
+//            ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:140:16: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     use(super.m(87));
+//                ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:14:9: Error: Final field 'f' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final f;
+//         ^
+//
+// pkg/front_end/testcases/super_rasta_copy.dart:33:9: Error: Final field 'd' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final d;
+//         ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:14:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.direct.transformed.expect b/pkg/front_end/testcases/super_rasta_copy.dart.direct.transformed.expect
index 91b673f..c327223 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:14:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
index a923b10..f818b59 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.
 //     super.g;
diff --git a/pkg/front_end/testcases/tabs.dart.direct.expect b/pkg/front_end/testcases/tabs.dart.direct.expect
index b542e17..a304f47 100644
--- a/pkg/front_end/testcases/tabs.dart.direct.expect
+++ b/pkg/front_end/testcases/tabs.dart.direct.expect
@@ -1,3 +1,25 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/tabs.dart:9:8: Warning: Getter not found: 'one'.
+// 	print(one);
+// 	      ^^^
+//
+// pkg/front_end/testcases/tabs.dart:10:9: Warning: Getter not found: 'two'.
+// 		print(two);
+// 		      ^^^
+//
+// pkg/front_end/testcases/tabs.dart:11:11: Warning: Getter not found: 'three'.
+// 		  print(three);
+// 		        ^^^^^
+//
+// pkg/front_end/testcases/tabs.dart:12:12: Warning: Getter not found: 'four'.
+// 	   	print(four);
+// 	   	      ^^^^
+//
+// pkg/front_end/testcases/tabs.dart:13:14: Warning: Getter not found: 'five'.
+// 	   	  print(five);
+// 	   	        ^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/tabs.dart.strong.expect b/pkg/front_end/testcases/tabs.dart.strong.expect
index e1519f3..e7be999 100644
--- a/pkg/front_end/testcases/tabs.dart.strong.expect
+++ b/pkg/front_end/testcases/tabs.dart.strong.expect
@@ -1,4 +1,26 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/tabs.dart:9:8: Error: Getter not found: 'one'.
+// 	print(one);
+// 	      ^^^
+//
+// pkg/front_end/testcases/tabs.dart:10:9: Error: Getter not found: 'two'.
+// 		print(two);
+// 		      ^^^
+//
+// pkg/front_end/testcases/tabs.dart:11:11: Error: Getter not found: 'three'.
+// 		  print(three);
+// 		        ^^^^^
+//
+// pkg/front_end/testcases/tabs.dart:12:12: Error: Getter not found: 'four'.
+// 	   	print(four);
+// 	   	      ^^^^
+//
+// pkg/front_end/testcases/tabs.dart:13:14: Error: Getter not found: 'five'.
+// 	   	  print(five);
+// 	   	        ^^^^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/tabs.dart:9:8: Error: Getter not found: 'one'.
 // 	print(one);
diff --git a/pkg/front_end/testcases/tabs.dart.strong.transformed.expect b/pkg/front_end/testcases/tabs.dart.strong.transformed.expect
index e1519f3..47ecc13 100644
--- a/pkg/front_end/testcases/tabs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/tabs.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/tabs.dart:9:8: Error: Getter not found: 'one'.
 // 	print(one);
diff --git a/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect b/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
index 770190e..f794c73 100644
--- a/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
 // abstract class A<T> extends T {}
diff --git a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
index 5df44e4..5c17d4e 100644
--- a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
@@ -1,3 +1,17 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// abstract class A<T> extends T {}
+//                ^
+//
+// pkg/front_end/testcases/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// abstract class B<T> extends T {
+//                ^
+//
+// pkg/front_end/testcases/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// class C<T> extends T {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
index 515d754..c7067eb 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Warning: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+//   T.String method() => "Hello, World!";
+//   ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
index be7fb5e..7e5d61a 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Warning: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+//   T.String method() => "Hello, World!";
+//   ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 837254e..8ff0020 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -1,4 +1,20 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+//   T.String method() => "Hello, World!";
+//   ^
+//
+// pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+// Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
+//   T.String method() => "Hello, World!";
+//                        ^
+//
+// pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+// Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+//   T.String s = new C().method();
+//                        ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
index 9c9e30c..485e406 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.direct.expect b/pkg/front_end/testcases/type_variable_uses.dart.direct.expect
index d9bcae3..0356bbd 100644
--- a/pkg/front_end/testcases/type_variable_uses.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_uses.dart.direct.expect
@@ -1,4 +1,66 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:7:15: Warning: Can only use type variables in instance methods.
+//   static C<T> staticMethod() {
+//               ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Warning: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:9:5: Warning: Type variables can't be used in static members.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:10:7: Warning: Type variables can't be used in static members.
+//     C<T> l;
+//       ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:11:9: Warning: Type variables can't be used in static members.
+//     C<C<T>> ll;
+//         ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Warning: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Warning: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Warning: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Warning: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Warning: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
 //     const C<T>();
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect b/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect
index d9bcae3..ddc705b 100644
--- a/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
 //     const C<T>();
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.outline.expect b/pkg/front_end/testcases/type_variable_uses.dart.outline.expect
index c58ea8f..45094c8 100644
--- a/pkg/front_end/testcases/type_variable_uses.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_uses.dart.outline.expect
@@ -1,3 +1,9 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:7:15: Warning: Can only use type variables in instance methods.
+//   static C<T> staticMethod() {
+//               ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.strong.expect b/pkg/front_end/testcases/type_variable_uses.dart.strong.expect
index 705fe6b..945078a 100644
--- a/pkg/front_end/testcases/type_variable_uses.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_uses.dart.strong.expect
@@ -1,4 +1,66 @@
-// Errors:
+// Formatted problems:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+//   static C<T> staticMethod() {
+//               ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
+//     C<T> l;
+//       ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
+//     C<C<T>> ll;
+//         ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
 //   static C<T> staticMethod() {
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect
index 705fe6b..a14fdb5 100644
--- a/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect
@@ -1,4 +1,4 @@
-// Errors:
+// Unhandled errors:
 //
 // pkg/front_end/testcases/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
 //   static C<T> staticMethod() {
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index 9ccfc9e..06632af 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -1,3 +1,20 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
+//   c. /*@error=UndefinedGetter*/ y;
+//                                 ^
+//
+// pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing method, or defining a method named 'g'.
+//   c. /*@error=UndefinedMethod*/ g();
+//                                 ^
+//
+// pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
+//   c. /*@error=UndefinedSetter*/ y = null;
+//                                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
index 661a043..407c01c 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
@@ -1,3 +1,15 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+//   c. /*@error=UndefinedGetter*/ x += 1;
+//                                 ^
+//
+// pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+//   c. /*@error=UndefinedGetter*/ x ??= 1;
+//                                 ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect b/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
index 5750f13..65c4883 100644
--- a/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
+++ b/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
@@ -1,3 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:49:39: Warning: Getter not found: 'missingField'.
+//     this. /*@warning=GetterNotFound*/ missingField;
+//                                       ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:50:39: Warning: Setter not found: 'missingField'.
+//     this. /*@warning=SetterNotFound*/ missingField = 0;
+//                                       ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:51:39: Warning: Method not found: 'missingMethod'.
+//     this. /*@warning=MethodNotFound*/ missingMethod();
+//                                       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:53:33: Warning: Getter not found: 'missingField'.
+//     /*@warning=GetterNotFound*/ missingField;
+//                                 ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:54:33: Warning: Setter not found: 'missingField'.
+//     /*@warning=SetterNotFound*/ missingField = 0;
+//                                 ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/warn_unresolved_sends.dart:55:33: Warning: Method not found: 'missingMethod'.
+//     /*@warning=MethodNotFound*/ missingMethod();
+//                                 ^^^^^^^^^^^^^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/tool/_fasta/bulk_compile.dart b/pkg/front_end/tool/_fasta/bulk_compile.dart
index 770ad9d..6476b32 100644
--- a/pkg/front_end/tool/_fasta/bulk_compile.dart
+++ b/pkg/front_end/tool/_fasta/bulk_compile.dart
@@ -35,7 +35,7 @@
 
   BulkCompiler(CompilerOptions options)
       : options = new ProcessedOptions(
-            options
+            options: options
               ..packagesFileUri ??= Uri.base.resolve(".packages")
               ..linkedDependencies = <Uri>[
                 computePlatformBinariesLocation().resolve("vm_platform.dill")
@@ -43,7 +43,7 @@
               ..fileSystem = (new FileBackedMemoryFileSystem()
                 ..entities[mainUri.path] =
                     (new MemoryFileSystemEntity(mainUri)..bytes = <int>[])),
-            <Uri>[mainUri]);
+            inputs: <Uri>[mainUri]);
 
   Future<Null> compile(String source) {
     defineSource(mainUri.path, source);
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index f5a391f..2ea3064 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -335,7 +335,7 @@
     }
 
     return new ProcessedOptions(
-        new CompilerOptions()
+        options: new CompilerOptions()
           ..sdkSummary = options["--platform"]
           ..librariesSpecificationUri =
               resolveInputUri(arguments[1], extraSchemes: extraSchemes)
@@ -351,8 +351,8 @@
           ..verbose = verbose
           ..verify = verify
           ..bytecode = bytecode,
-        <Uri>[Uri.parse(arguments[0])],
-        resolveInputUri(arguments[3], extraSchemes: extraSchemes));
+        inputs: <Uri>[Uri.parse(arguments[0])],
+        output: resolveInputUri(arguments[3], extraSchemes: extraSchemes));
   } else if (arguments.isEmpty) {
     return throw new CommandLineProblem.deprecated("No Dart file specified.");
   }
@@ -367,7 +367,8 @@
   final Uri platform = compileSdk
       ? null
       : (options["--platform"] ??
-          computePlatformBinariesLocation().resolve("vm_platform.dill"));
+          computePlatformBinariesLocation().resolve(
+              strongMode ? "vm_platform_strong.dill" : "vm_platform.dill"));
 
   CompilerOptions compilerOptions = new CompilerOptions()
     ..compileSdk = compileSdk
@@ -392,7 +393,8 @@
       inputs.add(resolveInputUri(argument, extraSchemes: extraSchemes));
     }
   }
-  return new ProcessedOptions(compilerOptions, inputs, output);
+  return new ProcessedOptions(
+      options: compilerOptions, inputs: inputs, output: output);
 }
 
 Future<T> withGlobalOptions<T>(
@@ -416,7 +418,7 @@
     options = analyzeCommandLine(
         programName, parsedArguments, areRestArgumentsInputs, verbose);
   } on CommandLineProblem catch (e) {
-    options = new ProcessedOptions(new CompilerOptions());
+    options = new ProcessedOptions();
     problem = e;
   }
 
diff --git a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
index 2f00335..90a9f5f 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
@@ -22,7 +22,6 @@
       Uri platformDill = tmp.resolve("vm_platform.dill");
       Uri outlineDill = tmp.resolve("vm_outline_strong.dill");
       ProcessResult result = await Process.run(dartVm.toFilePath(), <String>[
-        "--no_preview_dart_2",
         compilePlatform.toFilePath(),
         "-v",
         "dart:core",
diff --git a/pkg/front_end/tool/_fasta/compile_platform_test.dart b/pkg/front_end/tool/_fasta/compile_platform_test.dart
index d36b852..b528f4e 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_test.dart
@@ -22,7 +22,6 @@
       Uri platformDill = tmp.resolve("vm_platform.dill");
       Uri outlineDill = tmp.resolve("vm_outline_strong.dill");
       ProcessResult result = await Process.run(dartVm.toFilePath(), <String>[
-        "--no_preview_dart_2",
         compilePlatform.toFilePath(),
         "-v",
         "--strong",
diff --git a/pkg/front_end/tool/_fasta/dump_partial.dart b/pkg/front_end/tool/_fasta/dump_partial.dart
index 9f8bef0..875e62b 100644
--- a/pkg/front_end/tool/_fasta/dump_partial.dart
+++ b/pkg/front_end/tool/_fasta/dump_partial.dart
@@ -4,9 +4,17 @@
 
 /// Utility to dump a truncated .dill file generated by the incremental kernel
 /// generator or by the VM's kernel service.
-import 'dart:io';
-import 'package:kernel/kernel.dart';
-import 'package:front_end/src/fasta/kernel/utils.dart';
+
+import 'dart:io' show File, exitCode;
+
+import 'package:kernel/kernel.dart'
+    show
+        Component,
+        loadComponentFromBinary,
+        loadComponentFromBytes,
+        writeComponentToText;
+
+import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 
 main(List<String> args) {
   if (args.length == 0) {
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index 9eab27d..3c7af38 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -147,7 +147,9 @@
 
   Future<bool> batchCompile(CompilerOptions options, Uri input, Uri output) {
     return CompilerContext.runWithOptions(
-        new ProcessedOptions(options, <Uri>[input], output), batchCompileImpl);
+        new ProcessedOptions(
+            options: options, inputs: <Uri>[input], output: output),
+        batchCompileImpl);
   }
 
   Future<bool> batchCompileImpl(CompilerContext c) async {
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index 32485f4..2567a4e 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -25,18 +25,12 @@
 
 case "${1//_/-}" in
   abcompile) SCRIPT="${TOOL_DIR}/abcompile.dart";;
-  analyzer-compile)
-    stop "'$1' isn't supported anymore, please use 'compile' instead."
-    ;;
   compile) SCRIPT="${TOOL_DIR}/compile.dart";;
   compile-platform) SCRIPT="${TOOL_DIR}/compile_platform.dart";;
   log) SCRIPT="${TOOL_DIR}/log_analyzer.dart";;
   logd) SCRIPT="${TOOL_DIR}/log_collector.dart";;
   outline) SCRIPT="${TOOL_DIR}/outline.dart";;
   parser) SCRIPT="${TOOL_DIR}/parser.dart";;
-  run)
-    stop "'$1' isn't supported anymore, please use 'kernel-service' instead."
-    ;;
   scanner) SCRIPT="${TOOL_DIR}/scanner.dart";;
   dump-partial) SCRIPT="${TOOL_DIR}/dump_partial.dart";;
   dump-ir)
@@ -49,13 +43,6 @@
       stop "Usage: $1 dillfile [output]"
     fi
     ;;
-  kernel-service)
-    shift
-    PATCHED_SDK_DIR=$(
-      ls -d {xcodebuild,out}/${DART_CONFIGURATION} 2>/dev/null \
-        | head -1)
-    exec "${DART_VM}" --preview_dart_2 -DDFE_VERBOSE=true "$@"
-    ;;
   testing)
     SCRIPT="${REPO_DIR}/pkg/testing/bin/testing.dart"
     set -- "$@" "--config=${REPO_DIR}/pkg/front_end/testing.json"
@@ -68,4 +55,4 @@
 
 shift
 
-exec "${DART_VM}" --no_preview_dart_2 -c "${SCRIPT}" "$@"
+exec "${DART_VM}" -c "${SCRIPT}" "$@"
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index 4b9fb26..aa76831 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -98,7 +98,7 @@
     ..compileSdk = true
     ..packagesFileUri = Uri.base.resolve('.packages')
     ..target = createTarget(isFlutter: false, strongMode: strongMode);
-  uriResolver = await new ProcessedOptions(options).getUriTranslator();
+  uriResolver = await new ProcessedOptions(options: options).getUriTranslator();
 }
 
 /// Scan [contents] and return the first token produced by the scanner.
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 0f8f161..8a28dc5 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -127,7 +127,8 @@
   var dir = Directory.systemTemp.createTempSync("ikg-cache");
   compilerOptions.byteStore = createByteStore(cache, dir.path);
 
-  final processedOptions = new ProcessedOptions(compilerOptions, [entryUri]);
+  final processedOptions =
+      new ProcessedOptions(options: compilerOptions, inputs: [entryUri]);
   final UriTranslator uriTranslator = await processedOptions.getUriTranslator();
 
   collector.start("Initial compilation");
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 9aa8b60..97faf8b 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -291,7 +291,7 @@
   FileOffset fileOffset; // Offset of the name of the class.
   FileOffset fileEndOffset;
   Byte flags (levelBit0, levelBit1, isAbstract, isEnum, isAnonymousMixin,
-              isEliminatedMixin); // Where level is index into ClassLevel
+              isEliminatedMixin, isMixinDeclaration); // Where level is index into ClassLevel
   StringReference name;
   List<Expression> annotations;
   List<TypeParameter> typeParameters;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 03a709a..90aa8c7 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -728,6 +728,7 @@
   static const int FlagEnum = 1 << 3;
   static const int FlagAnonymousMixin = 1 << 4;
   static const int FlagEliminatedMixin = 1 << 5;
+  static const int FlagMixinDeclaration = 1 << 6;
 
   int flags = 0;
 
@@ -774,6 +775,38 @@
         value ? (flags | FlagEliminatedMixin) : (flags & ~FlagEliminatedMixin);
   }
 
+  /// True if this class was a mixin declaration in Dart.
+  ///
+  /// Mixins are declared in Dart with the `mixin` keyword.  They are compiled
+  /// to Kernel classes.
+  bool get isMixinDeclaration => flags & FlagMixinDeclaration != 0;
+
+  void set isMixinDeclaration(bool value) {
+    flags = value
+        ? (flags | FlagMixinDeclaration)
+        : (flags & ~FlagMixinDeclaration);
+  }
+
+  List<Supertype> superclassConstraints() {
+    var constraints = <Supertype>[];
+
+    // Not a mixin declaration.
+    if (!isMixinDeclaration) return constraints;
+
+    Class previous = this;
+    Class current = supertype.classNode;
+
+    // Otherwise we have a left-linear binary tree (subtrees are supertype and
+    // mixedInType) of constraints, where all the interior nodes are anonymous
+    // mixin applications.
+    while (current != null && current.isAnonymousMixin) {
+      constraints.add(current.mixedInType);
+      previous = current;
+      current = current.supertype.classNode;
+    }
+    return constraints..add(previous.supertype);
+  }
+
   /// The URI of the source file this class was loaded from.
   Uri fileUri;
 
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 2fae8ce..137b71a3 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -20,6 +20,7 @@
       <LabeledStatement, LabeledStatement>{};
   final Map<SwitchCase, SwitchCase> switchCases = <SwitchCase, SwitchCase>{};
   final Map<TypeParameter, DartType> typeSubstitution;
+  final Map<TypeParameter, TypeParameter> typeParams;
   bool cloneAnnotations;
 
   /// Creates an instance of the cloning visitor for Kernel ASTs.
@@ -29,8 +30,10 @@
   /// annotations in procedure bodies are cloned unconditionally.
   CloneVisitor(
       {Map<TypeParameter, DartType> typeSubstitution,
+      Map<TypeParameter, TypeParameter> typeParams,
       this.cloneAnnotations = true})
-      : this.typeSubstitution = ensureMutable(typeSubstitution);
+      : this.typeSubstitution = ensureMutable(typeSubstitution),
+        this.typeParams = typeParams ?? <TypeParameter, TypeParameter>{};
 
   static Map<TypeParameter, DartType> ensureMutable(
       Map<TypeParameter, DartType> map) {
@@ -460,8 +463,11 @@
   }
 
   visitTypeParameter(TypeParameter node) {
-    var newNode = new TypeParameter(node.name);
-    typeSubstitution[node] = new TypeParameterType(newNode);
+    TypeParameter newNode = typeParams[node];
+    if (newNode == null) {
+      newNode = new TypeParameter(node.name);
+      typeSubstitution[node] = new TypeParameterType(newNode);
+    }
     newNode.bound = visitType(node.bound);
     if (node.defaultType != null) {
       newNode.defaultType = visitType(node.defaultType);
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 7d2f6bd..0346f89 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -127,7 +127,7 @@
 
   /// Whether a library is allowed to import a platform private library.
   ///
-  /// By default only `dart:*` libraries are allowed. May be overriden for
+  /// By default only `dart:*` libraries are allowed. May be overridden for
   /// testing purposes.
   bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) =>
       imported.scheme != "dart" ||
@@ -200,6 +200,9 @@
 
   Class concreteMapLiteralClass(CoreTypes coreTypes) => null;
   Class concreteConstMapLiteralClass(CoreTypes coreTypes) => null;
+
+  Class concreteIntLiteralClass(CoreTypes coreTypes, int value) => null;
+  Class concreteStringLiteralClass(CoreTypes coreTypes, String value) => null;
 }
 
 class NoneTarget extends Target {
diff --git a/pkg/vm/bin/gen_kernel.dart b/pkg/vm/bin/gen_kernel.dart
index 9e1581e..50d244a 100644
--- a/pkg/vm/bin/gen_kernel.dart
+++ b/pkg/vm/bin/gen_kernel.dart
@@ -44,8 +44,6 @@
   ..addFlag('enable-constant-evaluation',
       help: 'Whether kernel constant evaluation will be enabled.',
       defaultsTo: true)
-  ..addMultiOption('entry-points',
-      help: 'Path to JSON file with the list of entry points')
   ..addFlag('gen-bytecode', help: 'Generate bytecode', defaultsTo: false)
   ..addFlag('drop-ast',
       help: 'Drop AST for members with bytecode', defaultsTo: false);
@@ -95,14 +93,6 @@
     return _badUsageExitCode;
   }
 
-  final List<String> entryPoints = options['entry-points'] ?? <String>[];
-  if (entryPoints.isEmpty) {
-    entryPoints.addAll([
-      'pkg/vm/lib/transformations/type_flow/entry_points.json',
-      'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
-    ]);
-  }
-
   final errorPrinter = new ErrorPrinter();
   final errorDetector = new ErrorDetector(previousErrorHandler: errorPrinter);
 
@@ -124,7 +114,6 @@
       Uri.base.resolveUri(inputUri), compilerOptions,
       aot: aot,
       useGlobalTypeFlowAnalysis: tfa,
-      entryPoints: entryPoints,
       environmentDefines: environmentDefines,
       genBytecode: genBytecode,
       dropAST: dropAST,
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 7de7ecd..24b30f5 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -81,6 +81,8 @@
   List<Label> yieldPoints;
   Map<TreeNode, int> contextLevels;
   List<ClosureBytecode> closures;
+  Set<Field> initializedFields;
+  List<Reference> nullableFields;
   ConstantPool cp;
   ConstantEmitter constantEmitter;
   BytecodeAssembler asm;
@@ -263,20 +265,35 @@
       libraryIndex.getTopLevelMember('dart:_internal', 'unsafeCast');
 
   void _genConstructorInitializers(Constructor node) {
-    bool isRedirecting =
+    final bool isRedirecting =
         node.initializers.any((init) => init is RedirectingInitializer);
+
     if (!isRedirecting) {
+      initializedFields = new Set<Field>();
       for (var field in node.enclosingClass.fields) {
         if (!field.isStatic && field.initializer != null) {
           _genFieldInitializer(field, field.initializer);
         }
       }
     }
+
     visitList(node.initializers, this);
+
+    if (!isRedirecting) {
+      nullableFields = <Reference>[];
+      for (var field in node.enclosingClass.fields) {
+        if (!field.isStatic && !initializedFields.contains(field)) {
+          nullableFields.add(field.reference);
+        }
+      }
+      initializedFields = null; // No more initialized fields, please.
+    }
   }
 
   void _genFieldInitializer(Field field, Expression initializer) {
-    if (initializer is NullLiteral) {
+    assert(!field.isStatic);
+
+    if (initializer is NullLiteral && !initializedFields.contains(field)) {
       return;
     }
 
@@ -285,6 +302,8 @@
 
     final int cpIndex = cp.add(new ConstantInstanceField(field));
     asm.emitStoreFieldTOS(cpIndex);
+
+    initializedFields.add(field);
   }
 
   void _genArguments(Expression receiver, Arguments arguments) {
@@ -677,6 +696,8 @@
     yieldPoints = null; // Initialized when entering sync-yielding closure.
     contextLevels = <TreeNode, int>{};
     closures = <ClosureBytecode>[];
+    initializedFields = null; // Tracked for constructors only.
+    nullableFields = const <Reference>[];
     cp = new ConstantPool();
     constantEmitter = new ConstantEmitter(cp);
     asm = new BytecodeAssembler();
@@ -716,8 +737,8 @@
 
   void end(Member node) {
     if (!hasErrors) {
-      metadata.mapping[node] =
-          new BytecodeMetadata(cp, asm.bytecode, asm.exceptionsTable, closures);
+      metadata.mapping[node] = new BytecodeMetadata(
+          cp, asm.bytecode, asm.exceptionsTable, nullableFields, closures);
     }
 
     enclosingClass = null;
@@ -737,6 +758,8 @@
     yieldPoints = null;
     contextLevels = null;
     closures = null;
+    initializedFields = null;
+    nullableFields = null;
     cp = null;
     constantEmitter = null;
     asm = null;
diff --git a/pkg/vm/lib/frontend_server.dart b/pkg/vm/lib/frontend_server.dart
index f8ea33f..00cfb12 100644
--- a/pkg/vm/lib/frontend_server.dart
+++ b/pkg/vm/lib/frontend_server.dart
@@ -56,8 +56,6 @@
       help:
           'Enable global type flow analysis and related transformations in AOT mode.',
       defaultsTo: false)
-  ..addMultiOption('entry-points',
-      help: 'Path to JSON file with the list of entry points')
   ..addFlag('link-platform',
       help:
           'When in batch mode, link platform kernel file into result kernel file.'
@@ -103,7 +101,15 @@
       help: 'Includes sources into generated dill file. Having sources'
           ' allows to effectively use observatory to debug produced'
           ' application, produces better stack traces on exceptions.',
-      defaultsTo: true);
+      defaultsTo: true)
+  ..addFlag('unsafe-package-serialization',
+      help: 'Potentially unsafe: Does not allow for invalidating packages, '
+          'additionally the output dill file might include more libraries than '
+          'needed. The use case is test-runs, where invalidation is not really '
+          'used, and where dill filesize does not matter, and the gain is '
+          'improved speed.',
+      defaultsTo: false,
+      hide: true);
 
 String usage = '''
 Usage: server [options] [input.dart]
@@ -203,7 +209,7 @@
 /// Class that for test mocking purposes encapsulates creation of [BinaryPrinter].
 class BinaryPrinterFactory {
   /// Creates new [BinaryPrinter] to write to [targetSink].
-  BinaryPrinter newBinaryPrinter(IOSink targetSink) {
+  BinaryPrinter newBinaryPrinter(Sink<List<int>> targetSink) {
     return new LimitedBinaryPrinter(targetSink, (_) => true /* predicate */,
         false /* excludeUriToSource */);
   }
@@ -211,13 +217,16 @@
 
 class FrontendCompiler implements CompilerInterface {
   FrontendCompiler(this._outputStream,
-      {this.printerFactory, this.transformer}) {
+      {this.printerFactory,
+      this.transformer,
+      this.unsafePackageSerialization}) {
     _outputStream ??= stdout;
     printerFactory ??= new BinaryPrinterFactory();
   }
 
   StringSink _outputStream;
   BinaryPrinterFactory printerFactory;
+  bool unsafePackageSerialization;
 
   CompilerOptions _compilerOptions;
   Uri _mainSource;
@@ -349,7 +358,6 @@
           _mainSource, compilerOptions,
           aot: options['aot'],
           useGlobalTypeFlowAnalysis: options['tfa'],
-          entryPoints: options['entry-points'],
           environmentDefines: environmentDefines));
     }
     if (component != null) {
@@ -391,6 +399,9 @@
         return "${r1.canonicalName}".compareTo("${r2.canonicalName}");
       });
     }
+    if (unsafePackageSerialization == true) {
+      writePackagesToSinkAndTrimComponent(component, sink);
+    }
 
     printer.writeComponentFile(component);
     await sink.close();
@@ -498,6 +509,63 @@
     _outputStream.writeln(boundaryKey);
   }
 
+  /// Map of already serialized dill data. All uris in a serialized component
+  /// maps to the same blob of data. Used by
+  /// [writePackagesToSinkAndTrimComponent].
+  Map<Uri, List<int>> cachedPackageLibraries = new Map<Uri, List<int>>();
+
+  writePackagesToSinkAndTrimComponent(
+      Component deltaProgram, Sink<List<int>> ioSink) {
+    if (deltaProgram == null) return;
+
+    List<Library> packageLibraries = new List<Library>();
+    List<Library> libraries = new List<Library>();
+    deltaProgram.computeCanonicalNames();
+
+    for (var lib in deltaProgram.libraries) {
+      Uri uri = lib.importUri;
+      if (uri.scheme == "package") {
+        packageLibraries.add(lib);
+      } else {
+        libraries.add(lib);
+      }
+    }
+    deltaProgram.libraries
+      ..clear()
+      ..addAll(libraries);
+
+    Map<String, List<Library>> newPackages = new Map<String, List<Library>>();
+    Set<List<int>> alreadyAdded = new Set<List<int>>();
+    for (Library lib in packageLibraries) {
+      List<int> data = cachedPackageLibraries[lib.fileUri];
+      if (data != null) {
+        if (alreadyAdded.add(data)) {
+          ioSink.add(data);
+        }
+      } else {
+        String package = lib.importUri.pathSegments.first;
+        newPackages[package] ??= <Library>[];
+        newPackages[package].add(lib);
+      }
+    }
+
+    for (String package in newPackages.keys) {
+      List<Library> libraries = newPackages[package];
+      Component singleLibrary = new Component(
+          libraries: libraries,
+          uriToSource: deltaProgram.uriToSource,
+          nameRoot: deltaProgram.root);
+      ByteSink byteSink = new ByteSink();
+      final BinaryPrinter printer = printerFactory.newBinaryPrinter(byteSink);
+      printer.writeComponentFile(singleLibrary);
+      List<int> data = byteSink.builder.takeBytes();
+      for (Library lib in libraries) {
+        cachedPackageLibraries[lib.fileUri] = data;
+      }
+      ioSink.add(data);
+    }
+  }
+
   @override
   void acceptLastDelta() {
     _generator.accept();
@@ -561,6 +629,17 @@
   }
 }
 
+/// A [Sink] that directly writes data into a byte builder.
+class ByteSink implements Sink<List<int>> {
+  final BytesBuilder builder = new BytesBuilder();
+
+  void add(List<int> data) {
+    builder.add(data);
+  }
+
+  void close() {}
+}
+
 String _escapePath(String path) {
   return path.replaceAll(r'\', r'\\').replaceAll(r' ', r'\ ');
 }
@@ -761,10 +840,9 @@
     }
   }
 
-  compiler ??= new FrontendCompiler(
-    output,
-    printerFactory: binaryPrinterFactory,
-  );
+  compiler ??= new FrontendCompiler(output,
+      printerFactory: binaryPrinterFactory,
+      unsafePackageSerialization: options["unsafe-package-serialization"]);
 
   if (options.rest.isNotEmpty) {
     return await compiler.compile(options.rest[0], options,
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 3b86390..941890e 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -45,7 +45,6 @@
 Future<Component> compileToKernel(Uri source, CompilerOptions options,
     {bool aot: false,
     bool useGlobalTypeFlowAnalysis: false,
-    List<String> entryPoints,
     Map<String, String> environmentDefines,
     bool genBytecode: false,
     bool dropAST: false,
@@ -66,7 +65,6 @@
         component,
         options.strongMode,
         useGlobalTypeFlowAnalysis,
-        entryPoints,
         environmentDefines,
         enableAsserts,
         enableConstantEvaluation,
@@ -94,7 +92,6 @@
     Component component,
     bool strongMode,
     bool useGlobalTypeFlowAnalysis,
-    List<String> entryPoints,
     Map<String, String> environmentDefines,
     bool enableAsserts,
     bool enableConstantEvaluation,
@@ -122,7 +119,7 @@
 
     if (useGlobalTypeFlowAnalysis) {
       globalTypeFlow.transformComponent(
-          compilerOptions.target, coreTypes, component, entryPoints);
+          compilerOptions.target, coreTypes, component);
     } else {
       devirtualization.transformComponent(coreTypes, component);
     }
@@ -135,7 +132,8 @@
 /// be able to report compile-time errors.
 Future<T> runWithFrontEndCompilerContext<T>(Uri source,
     CompilerOptions compilerOptions, Component component, T action()) async {
-  final processedOptions = new ProcessedOptions(compilerOptions, [source]);
+  final processedOptions =
+      new ProcessedOptions(options: compilerOptions, inputs: [source]);
 
   // Run within the context, so we have uri source tokens...
   return await CompilerContext.runWithOptions(processedOptions,
diff --git a/pkg/vm/lib/metadata/bytecode.dart b/pkg/vm/lib/metadata/bytecode.dart
index aae9218..40c664c 100644
--- a/pkg/vm/lib/metadata/bytecode.dart
+++ b/pkg/vm/lib/metadata/bytecode.dart
@@ -14,9 +14,18 @@
 /// In kernel binary, bytecode metadata is encoded as following:
 ///
 /// type BytecodeMetadata {
+///   UInt flags (HasExceptionsTable, HasNullableFields, HasClosures)
+///
 ///   ConstantPool constantPool
 ///   List<Byte> bytecodes
+///
+///   (optional, present if HasExceptionsTable)
 ///   ExceptionsTable exceptionsTable
+///
+///   (optional, present if HasNullableFields)
+///   List<CanonicalName> nullableFields
+///
+///   (optional, present if HasClosures)
 ///   List<ClosureBytecode> closures
 /// }
 ///
@@ -33,13 +42,27 @@
 /// pkg/vm/lib/bytecode/constant_pool.dart.
 ///
 class BytecodeMetadata {
+  static const hasExceptionsTableFlag = 1 << 0;
+  static const hasNullableFieldsFlag = 1 << 1;
+  static const hasClosuresFlag = 1 << 2;
+
   final ConstantPool constantPool;
   final List<int> bytecodes;
   final ExceptionsTable exceptionsTable;
+  final List<Reference> nullableFields;
   final List<ClosureBytecode> closures;
 
-  BytecodeMetadata(
-      this.constantPool, this.bytecodes, this.exceptionsTable, this.closures);
+  bool get hasExceptionsTable => exceptionsTable.blocks.isNotEmpty;
+  bool get hasNullableFields => nullableFields.isNotEmpty;
+  bool get hasClosures => closures.isNotEmpty;
+
+  int get flags =>
+      (hasExceptionsTable ? hasExceptionsTableFlag : 0) |
+      (hasNullableFields ? hasNullableFieldsFlag : 0) |
+      (hasClosures ? hasClosuresFlag : 0);
+
+  BytecodeMetadata(this.constantPool, this.bytecodes, this.exceptionsTable,
+      this.nullableFields, this.closures);
 
   // TODO(alexmarkov): Consider printing constant pool before bytecode.
   @override
@@ -47,6 +70,7 @@
       "Bytecode {\n"
       "${new BytecodeDisassembler().disassemble(bytecodes, exceptionsTable)}}\n"
       "$exceptionsTable"
+      "${nullableFields.isEmpty ? '' : 'Nullable fields: ${nullableFields.map((ref) => ref.asField).toList()}\n'}"
       "$constantPool"
       "${closures.join('\n')}";
 }
@@ -97,22 +121,44 @@
 
   @override
   void writeToBinary(BytecodeMetadata metadata, Node node, BinarySink sink) {
+    sink.writeUInt30(metadata.flags);
     metadata.constantPool.writeToBinary(node, sink);
     sink.writeByteList(metadata.bytecodes);
-    metadata.exceptionsTable.writeToBinary(sink);
-    sink.writeUInt30(metadata.closures.length);
-    metadata.closures.forEach((c) => c.writeToBinary(sink));
+    if (metadata.hasExceptionsTable) {
+      metadata.exceptionsTable.writeToBinary(sink);
+    }
+    if (metadata.hasNullableFields) {
+      sink.writeUInt30(metadata.nullableFields.length);
+      metadata.nullableFields.forEach((ref) => sink
+          .writeCanonicalNameReference(getCanonicalNameOfMember(ref.asField)));
+    }
+    if (metadata.hasClosures) {
+      sink.writeUInt30(metadata.closures.length);
+      metadata.closures.forEach((c) => c.writeToBinary(sink));
+    }
   }
 
   @override
   BytecodeMetadata readFromBinary(Node node, BinarySource source) {
+    int flags = source.readUInt();
     final ConstantPool constantPool =
         new ConstantPool.readFromBinary(node, source);
     final List<int> bytecodes = source.readByteList();
-    final exceptionsTable = new ExceptionsTable.readFromBinary(source);
-    final List<ClosureBytecode> closures = new List<ClosureBytecode>.generate(
-        source.readUInt(), (_) => new ClosureBytecode.readFromBinary(source));
+    final exceptionsTable =
+        ((flags & BytecodeMetadata.hasExceptionsTableFlag) != 0)
+            ? new ExceptionsTable.readFromBinary(source)
+            : new ExceptionsTable();
+    final List<Reference> nullableFields =
+        ((flags & BytecodeMetadata.hasNullableFieldsFlag) != 0)
+            ? new List<Reference>.generate(source.readUInt(),
+                (_) => source.readCanonicalNameReference().getReference())
+            : const <Reference>[];
+    final List<ClosureBytecode> closures =
+        ((flags & BytecodeMetadata.hasClosuresFlag) != 0)
+            ? new List<ClosureBytecode>.generate(source.readUInt(),
+                (_) => new ClosureBytecode.readFromBinary(source))
+            : const <ClosureBytecode>[];
     return new BytecodeMetadata(
-        constantPool, bytecodes, exceptionsTable, closures);
+        constantPool, bytecodes, exceptionsTable, nullableFields, closures);
   }
 }
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 8b75174..6dd942a 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -15,6 +15,8 @@
     show transformLibraries, transformProcedure;
 
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
+import '../transformations/list_factory_specializer.dart'
+    as listFactorySpecializer;
 
 /// Specializes the kernel IR to the Dart VM.
 class VmTarget extends Target {
@@ -24,6 +26,9 @@
   Class _immutableList;
   Class _internalLinkedHashMap;
   Class _immutableMap;
+  Class _oneByteString;
+  Class _twoByteString;
+  Class _smi;
 
   VmTarget(this.flags);
 
@@ -74,6 +79,8 @@
     transformAsync.transformLibraries(coreTypes, libraries, flags.syncAsync);
     logger?.call("Transformed async methods");
 
+    listFactorySpecializer.transformLibraries(libraries, coreTypes);
+
     callSiteAnnotator.transformLibraries(
         component, libraries, coreTypes, hierarchy);
     logger?.call("Annotated call sites");
@@ -321,4 +328,31 @@
     return _immutableMap ??=
         coreTypes.index.getClass('dart:core', '_ImmutableMap');
   }
+
+  @override
+  Class concreteIntLiteralClass(CoreTypes coreTypes, int value) {
+    const int bitsPerInt32 = 32;
+    const int smiBits32 = bitsPerInt32 - 2;
+    const int smiMin32 = -(1 << smiBits32);
+    const int smiMax32 = (1 << smiBits32) - 1;
+    if ((smiMin32 <= value) && (value <= smiMax32)) {
+      // Value fits into Smi on all platforms.
+      return _smi ??= coreTypes.index.getClass('dart:core', '_Smi');
+    }
+    // Otherwise, class could be either _Smi or _Mint depending on a platform.
+    return null;
+  }
+
+  @override
+  Class concreteStringLiteralClass(CoreTypes coreTypes, String value) {
+    const int maxLatin1 = 0xff;
+    for (int i = 0; i < value.length; ++i) {
+      if (value.codeUnitAt(i) > maxLatin1) {
+        return _twoByteString ??=
+            coreTypes.index.getClass('dart:core', '_TwoByteString');
+      }
+    }
+    return _oneByteString ??=
+        coreTypes.index.getClass('dart:core', '_OneByteString');
+  }
 }
diff --git a/pkg/vm/lib/transformations/list_factory_specializer.dart b/pkg/vm/lib/transformations/list_factory_specializer.dart
new file mode 100644
index 0000000..ca9df25
--- /dev/null
+++ b/pkg/vm/lib/transformations/list_factory_specializer.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library vm.transformations.list_factory_specializer;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/core_types.dart' show CoreTypes;
+
+/// Replaces new List() and new List(n) with VM-specific
+/// new _GrowableList(0) and new _List(n).
+void transformLibraries(List<Library> libraries, CoreTypes coreTypes) {
+  final transformer = new _ListFactorySpecializer(coreTypes);
+  libraries.forEach(transformer.visitLibrary);
+}
+
+class _ListFactorySpecializer extends Transformer {
+  final Procedure _listFactory;
+  final Procedure _growableListFactory;
+  final Procedure _fixedListFactory;
+
+  _ListFactorySpecializer(CoreTypes coreTypes)
+      : _listFactory = coreTypes.index.getMember('dart:core', 'List', ''),
+        _growableListFactory =
+            coreTypes.index.getMember('dart:core', '_GrowableList', ''),
+        _fixedListFactory =
+            coreTypes.index.getMember('dart:core', '_List', '') {
+    assert(_listFactory.isFactory);
+    assert(_growableListFactory.isFactory);
+    assert(_fixedListFactory.isFactory);
+  }
+
+  @override
+  visitStaticInvocation(StaticInvocation node) {
+    super.visitStaticInvocation(node);
+
+    if (node.target == _listFactory) {
+      if (node.arguments.positional.isEmpty) {
+        return new StaticInvocation(_growableListFactory,
+            new Arguments([new IntLiteral(0)], types: node.arguments.types))
+          ..parent = node.parent
+          ..fileOffset = node.fileOffset;
+      } else {
+        return new StaticInvocation(_fixedListFactory, node.arguments)
+          ..parent = node.parent
+          ..fileOffset = node.fileOffset;
+      }
+    }
+
+    return node;
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index d11f83c..ee93bf3 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -1191,7 +1191,7 @@
 
   TypeFlowAnalysis(this.target, Component component, CoreTypes coreTypes,
       ClosedWorldClassHierarchy hierarchy, this.environment, this.libraryIndex,
-      {List<String> entryPointsJSONFiles, PragmaAnnotationParser matcher})
+      {PragmaAnnotationParser matcher})
       : annotationMatcher =
             matcher ?? new ConstantPragmaAnnotationParser(coreTypes) {
     nativeCodeOracle = new NativeCodeOracle(libraryIndex, annotationMatcher);
@@ -1201,10 +1201,6 @@
     _invocationsCache = new _InvocationsCache(this);
     workList = new _WorkList(this);
 
-    if (entryPointsJSONFiles != null) {
-      nativeCodeOracle.processEntryPointsJSONFiles(entryPointsJSONFiles, this);
-    }
-
     component.accept(new PragmaEntryPointsVisitor(
         this, nativeCodeOracle, annotationMatcher));
   }
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index 2c38d28..6d6fe93 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -5,9 +5,7 @@
 /// Handling of native code and entry points.
 library vm.transformations.type_flow.native_code;
 
-import 'dart:convert' show json;
 import 'dart:core' hide Type;
-import 'dart:io' show File;
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart' show CoreTypes;
@@ -281,20 +279,4 @@
       return new Type.fromStatic(member.function.returnType);
     }
   }
-
-  /// Reads JSON files [jsonFiles] describing entry points and native methods.
-  /// Currently just checks that JSON file is empty as it is deprecated.
-  void processEntryPointsJSONFiles(
-      List<String> jsonFiles, EntryPointsListener entryPointsListener) {
-    for (var file in jsonFiles) {
-      String jsonString = new File(file).readAsStringSync();
-      final jsonObject = json.decode(jsonString);
-
-      final roots = jsonObject['roots'];
-      if (roots != null && roots.isNotEmpty) {
-        throw "Error: Found non-empty entry points JSON file $file."
-            " Use the @pragma('vm:entry-point') annotation instead.";
-      }
-    }
-  }
 }
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 984521d..c4a8931 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -554,6 +554,22 @@
 
   Class get _superclass => _environment.thisType.classNode.superclass;
 
+  Type _intLiteralType(int value) {
+    Class concreteClass =
+        target.concreteIntLiteralClass(_environment.coreTypes, value);
+    return concreteClass != null
+        ? _entryPointsListener.addAllocatedClass(concreteClass)
+        : _intType;
+  }
+
+  Type _stringLiteralType(String value) {
+    Class concreteClass =
+        target.concreteStringLiteralClass(_environment.coreTypes, value);
+    return concreteClass != null
+        ? _entryPointsListener.addAllocatedClass(concreteClass)
+        : _stringType;
+  }
+
   void _handleNestedFunctionNode(FunctionNode node) {
     var oldReturn = _returnValue;
     var oldVariables = _variables;
@@ -589,7 +605,7 @@
 
   @override
   TypeExpr visitIntLiteral(IntLiteral node) {
-    return _intType;
+    return _intLiteralType(node.value);
   }
 
   @override
@@ -892,7 +908,7 @@
 
   @override
   TypeExpr visitStringLiteral(StringLiteral node) {
-    return _stringType;
+    return _stringLiteralType(node.value);
   }
 
   @override
@@ -1234,7 +1250,7 @@
 
   @override
   Type visitIntConstant(IntConstant constant) {
-    return summaryCollector._intType;
+    return summaryCollector._intLiteralType(constant.value);
   }
 
   @override
@@ -1244,7 +1260,7 @@
 
   @override
   Type visitStringConstant(StringConstant constant) {
-    return summaryCollector._stringType;
+    return summaryCollector._stringLiteralType(constant.value);
   }
 
   @override
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index fcfd575..6233e44 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -32,8 +32,8 @@
 
 /// Whole-program type flow analysis and transformation.
 /// Assumes strong mode and closed world.
-Component transformComponent(Target target, CoreTypes coreTypes,
-    Component component, List<String> entryPoints,
+Component transformComponent(
+    Target target, CoreTypes coreTypes, Component component,
     [PragmaAnnotationParser matcher]) {
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
   final hierarchy = new ClassHierarchy(component,
@@ -52,7 +52,7 @@
 
   final typeFlowAnalysis = new TypeFlowAnalysis(
       target, component, coreTypes, hierarchy, types, libraryIndex,
-      entryPointsJSONFiles: entryPoints, matcher: matcher);
+      matcher: matcher);
 
   Procedure main = component.mainMethod;
   final Selector mainSelector = new DirectSelector(main);
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 5011141..fead08b 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -57,6 +57,31 @@
               '\n'
               'static method main() → dynamic {}\n'));
     });
+
+    test('compile exclude sources', () async {
+      var systemTempDir = Directory.systemTemp;
+      var file = new File('${systemTempDir.path}/foo.dart')..createSync();
+      file.writeAsStringSync("main() {}\n");
+
+      CompilerOptions optionsExcludeSources = options..embedSourceText = false;
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(optionsExcludeSources, file.uri);
+      Component component = await compiler.compile();
+
+      for (Source source in component.uriToSource.values) {
+        expect(source.source.length, equals(0));
+      }
+
+      final StringBuffer buffer = new StringBuffer();
+      new Printer(buffer, showExternal: false, showMetadata: true)
+          .writeLibraryFile(component.mainMethod.enclosingLibrary);
+      expect(
+          buffer.toString(),
+          equals('library;\n'
+              'import self as self;\n'
+              '\n'
+              'static method main() → dynamic {}\n'));
+    });
   });
 
   group('multiple kernels', () {
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index 3f8da8d..ccd5956 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -24,7 +24,7 @@
 
   final coreTypes = new CoreTypes(component);
 
-  component = transformComponent(target, coreTypes, component, [],
+  component = transformComponent(target, coreTypes, component,
       new ExpressionPragmaAnnotationParser(coreTypes));
 
   final actual = kernelLibraryToString(component.mainMethod.enclosingLibrary);
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 10f84a5..af62c71 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -496,6 +496,7 @@
   PushNull
   ReturnTOS
 }
+Nullable fields: [#lib::B::foo]
 ConstantPool {
   [0] = ArgDesc num-args 1, num-type-args 0, names []
   [1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
diff --git a/pkg/vm/testcases/bytecode/field_initializers.dart.expect b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
index 5268d47..16ddfcb 100644
--- a/pkg/vm/testcases/bytecode/field_initializers.dart.expect
+++ b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
@@ -31,6 +31,7 @@
   PushNull
   ReturnTOS
 }
+Nullable fields: [#lib::A::foo1, #lib::A::foo2]
 ConstantPool {
   [0] = InstanceField #lib::A::foo3
   [1] = Reserved
@@ -69,6 +70,7 @@
   PushNull
   ReturnTOS
 }
+Nullable fields: [#lib::A::foo2, #lib::A::foo4]
 ConstantPool {
   [0] = InstanceField #lib::A::foo3
   [1] = Reserved
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart b/pkg/vm/testcases/bytecode/instance_creation.dart
index 05a745b..8bfa5d7 100644
--- a/pkg/vm/testcases/bytecode/instance_creation.dart
+++ b/pkg/vm/testcases/bytecode/instance_creation.dart
@@ -79,6 +79,10 @@
 
 class TestTypeArgReuse<P, Q> extends Base<P, Q> implements K<P, Q> {}
 
+foo6() => new List<String>();
+
+foo7(int n) => new List<int>(n);
+
 main() {
   foo1();
   foo2();
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart.expect b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
index 127251d..e0d510a 100644
--- a/pkg/vm/testcases/bytecode/instance_creation.dart.expect
+++ b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
@@ -48,6 +48,7 @@
   PushNull
   ReturnTOS
 }
+Nullable fields: [#lib::Base::t1, #lib::Base::t2]
 ConstantPool {
   [0] = ArgDesc num-args 1, num-type-args 0, names []
   [1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
@@ -563,6 +564,44 @@
 Bytecode {
   Entry                0
   CheckStack
+  PushConstant         CP#0
+  PushInt              0
+  PushConstant         CP#2
+  IndirectStaticCall   2, CP#1
+  ReturnTOS
+  PushNull
+  ReturnTOS
+}
+ConstantPool {
+  [0] = TypeArgumentsForInstanceAllocation dart.core::_GrowableList [dart.core::String]
+  [1] = ArgDesc num-args 2, num-type-args 0, names []
+  [2] = StaticICData target 'dart.core::_GrowableList::', arg-desc CP#1
+}
+]static method foo6() → dynamic
+  return core::_GrowableList::•<core::String>(0);
+[@vm.bytecode=
+Bytecode {
+  Entry                0
+  CheckStack
+  PushConstant         CP#0
+  Push                 FP[-5]
+  PushConstant         CP#2
+  IndirectStaticCall   2, CP#1
+  ReturnTOS
+  PushNull
+  ReturnTOS
+}
+ConstantPool {
+  [0] = TypeArgumentsForInstanceAllocation dart.core::_List [dart.core::int]
+  [1] = ArgDesc num-args 2, num-type-args 0, names []
+  [2] = StaticICData target 'dart.core::_List::', arg-desc CP#1
+}
+]static method foo7(core::int n) → dynamic
+  return core::_List::•<core::int>(n);
+[@vm.bytecode=
+Bytecode {
+  Entry                0
+  CheckStack
   PushConstant         CP#1
   IndirectStaticCall   0, CP#0
   Drop1
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
index b36ef8c..d4deb68 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
@@ -7,9 +7,9 @@
 ------------ #lib::bool_expressions ------------
 t0* = _Call direct [#lib::foo] ()
 t1* = _Call direct [#lib::bar] ()
-t2* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::int)+)
-i = _Join [dart.core::int] (_T (dart.core::int)+, t2)
-t4* = _Call [dart.core::num::<] (i, _T (dart.core::int)+)
+t2* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi))
+i = _Join [dart.core::int] (_T (dart.core::_Smi), t2)
+t4* = _Call [dart.core::num::<] (i, _T (dart.core::_Smi))
 t5* = _Call direct [#lib::bar] ()
 x = _Join [dart.core::bool] (t5, _T (dart.core::bool)+)
 t7* = _Call direct [#lib::foo] ()
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/hello.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/hello.dart.expect
index 35081b4..770e1df 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/hello.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/hello.dart.expect
@@ -1,4 +1,4 @@
 ------------ #lib::main ------------
 %args = _Parameter #0 [_T (dart.core::List<dynamic>)+?]
-t1 = _Call direct [dart.core::print] (_T (dart.core::String)+)
+t1 = _Call direct [dart.core::print] (_T (dart.core::_OneByteString))
 RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect
index 1f8da63..9a3e510 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect
@@ -19,7 +19,7 @@
 RESULT: _T (#lib::T)
 ------------ #lib::return2 ------------
 %i = _Parameter #0 [_T (dart.core::int)+?]
-t1* = _Call [dart.core::num::-] (%i, _T (dart.core::int)+)
+t1* = _Call [dart.core::num::-] (%i, _T (dart.core::_Smi))
 t2* = _Call direct [#lib::return2] (t1)
 RESULT: t2
 ------------ #lib::return3 ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index 2cad426..8fa3835 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -12,7 +12,7 @@
 t2* = _Call direct get [#lib::someStatic] ()
 t3 = _Call direct [#lib::A::] (_T (#lib::A))
 a1 = _Join [dart.core::Object] (%a1, _T (#lib::A), _T (#lib::B))
-t5 = _Call direct [#lib::bar] (a1, _T (dart.core::int)+)
+t5 = _Call direct [#lib::bar] (a1, _T (dart.core::_Smi))
 t6 = _Call direct [#lib::B::] (_T (#lib::B))
 t7* = _Call [dart.core::Object::==] (a1, %a2)
 t8 = _Join [dart.core::Object] (a1, %a2)
@@ -23,8 +23,8 @@
 %a2 = _Parameter #1 [_T (dart.core::int)+?]
 t2 = _Narrow (%a1 to _T (dart.core::int)+)
 t3* = _Call [dart.core::num::+] (t2, %a2)
-t4* = _Call [dart.core::num::*] (t3, _T (dart.core::int)+)
-t5* = _Call [dart.core::int::unary-] (_T (dart.core::int)+)
+t4* = _Call [dart.core::num::*] (t3, _T (dart.core::_Smi))
+t5* = _Call [dart.core::int::unary-] (_T (dart.core::_Smi))
 %result = _Join [dart.core::int] (t4, t5)
 RESULT: %result
 ------------ #lib::loop1 ------------
@@ -35,10 +35,10 @@
 RESULT: x
 ------------ #lib::loop2 ------------
 %x = _Parameter #0 [_T (dart.core::int)+?]
-t1* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::int)+)
-i = _Join [dart.core::int] (_T (dart.core::int)+, t1)
-t3* = _Call [dart.core::num::<] (i, _T (dart.core::int)+)
-t4* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::int)+)
+t1* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi))
+i = _Join [dart.core::int] (_T (dart.core::_Smi), t1)
+t3* = _Call [dart.core::num::<] (i, _T (dart.core::_Smi))
+t4* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi))
 x = _Join [dart.core::int] (%x, t4)
 RESULT: x
 ------------ #lib::main ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index 46769b4..8347032 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -11,7 +11,7 @@
   }
   return true;
 }
-static method nThPrimeNumber([@vm.inferred-type.metadata=int] core::int n) → core::int {
+static method nThPrimeNumber([@vm.inferred-type.metadata=dart.core::_Smi] core::int n) → core::int {
   core::int counter = 0;
   for (core::int i = 1; ; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int?] i.{core::num::+}(1)) {
     if([@vm.inferred-type.metadata=dart.core::bool] self::isPrime(i))
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index e158e50..5831363 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -4,20 +4,20 @@
 import "dart:typed_data" as typ;
 
 class _Vector extends core::Object {
-[@vm.inferred-type.metadata=int]  final field core::int _offset;
-[@vm.inferred-type.metadata=int]  final field core::int _length;
+[@vm.inferred-type.metadata=dart.core::_Smi]  final field core::int _offset;
+[@vm.inferred-type.metadata=dart.core::_Smi]  final field core::int _length;
 [@vm.inferred-type.metadata=dart.typed_data::_Float64List]  final field core::List<core::double> _elements;
-  constructor •([@vm.inferred-type.metadata=int] core::int size) → void
+  constructor •([@vm.inferred-type.metadata=dart.core::_Smi] core::int size) → void
     : self::_Vector::_offset = 0, self::_Vector::_length = size, self::_Vector::_elements = [@vm.inferred-type.metadata=dart.typed_data::_Float64List] typ::Float64List::•(size), super core::Object::•()
     ;
   operator [](core::int i) → core::double
-    return [@vm.direct-call.metadata=dart.typed_data::_Float64List::[]] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int?] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=int] this.{self::_Vector::_offset}));
-  operator []=([@vm.inferred-type.metadata=!] core::int i, core::double value) → void {
-    let dynamic #t1 = [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements} in let dynamic #t2 = i in let dynamic #t3 = [@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=int] this.{self::_Vector::_offset} in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
+    return [@vm.direct-call.metadata=dart.typed_data::_Float64List::[]] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int?] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=dart.core::_Smi] this.{self::_Vector::_offset}));
+  operator []=([@vm.inferred-type.metadata=dart.core::_OneByteString] core::int i, core::double value) → void {
+    let dynamic #t1 = [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements} in let dynamic #t2 = i in let dynamic #t3 = [@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=dart.core::_Smi] this.{self::_Vector::_offset} in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
   }
   operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector a) → core::double {
     core::double result = 0.0;
-    for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<??] [@vm.inferred-type.metadata=dart.core::bool] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector::_length] [@vm.inferred-type.metadata=int] this.{self::_Vector::_length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int?] i.{core::num::+}(1))
+    for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<??] [@vm.inferred-type.metadata=dart.core::bool] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector::_length] [@vm.inferred-type.metadata=dart.core::_Smi] this.{self::_Vector::_length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int?] i.{core::num::+}(1))
       result = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double::*] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::[]] [@vm.inferred-type.metadata=dart.core::_Double] this.{self::_Vector::[]}(i).{core::double::*}([@vm.direct-call.metadata=#lib::_Vector::[]??] [@vm.inferred-type.metadata=dart.core::_Double] a.{self::_Vector::[]}(i)));
     return result;
   }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
index 0e43e97..aebe06c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
@@ -48,7 +48,7 @@
 static method callerA4([@vm.inferred-type.metadata=#lib::D?] self::A aa) → void {
   [@vm.direct-call.metadata=#lib::C::foo??] aa.{self::A::foo}();
 }
-static method callerE1([@vm.inferred-type.metadata=!] dynamic x) → void {
+static method callerE1([@vm.inferred-type.metadata=dart.core::_OneByteString] dynamic x) → void {
   [@vm.direct-call.metadata=dart.core::_StringBase::toString] x.{core::Object::toString}();
 }
 static method callerE2([@vm.inferred-type.metadata=#lib::E?] dynamic x) → void {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 64585aa..d265afa 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -51,7 +51,7 @@
     return [@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("get:bar", const <core::Type>[], const <dynamic>[], [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
   no-such-method-forwarder method foo() → dynamic
     return [@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
-  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=int] dynamic a1, [@vm.inferred-type.metadata=int] dynamic a2, [@vm.inferred-type.metadata=int] dynamic a3, [[@vm.inferred-type.metadata=int] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::Null?] dynamic a5 = null]) → dynamic
+  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::Null?] dynamic a5 = null]) → dynamic
     return [@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("bazz", const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
 }
 abstract class C extends core::Object {
@@ -70,7 +70,7 @@
     return [@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("get:bar", const <core::Type>[], const <dynamic>[], [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
   no-such-method-forwarder method foo() → dynamic
     return [@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
-  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=int] dynamic a1, [@vm.inferred-type.metadata=int] dynamic a2, [@vm.inferred-type.metadata=int] dynamic a3, [[@vm.inferred-type.metadata=int] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::Null?] dynamic a5 = null]) → dynamic
+  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::Null?] dynamic a5 = null]) → dynamic
     return [@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("bazz", const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
 }
 class E extends core::Object implements self::A {
@@ -103,7 +103,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method foo({[@vm.inferred-type.metadata=int] dynamic left = null, [@vm.inferred-type.metadata=int] dynamic right = null}) → dynamic
+  method foo({[@vm.inferred-type.metadata=dart.core::_Smi] dynamic left = null, [@vm.inferred-type.metadata=dart.core::_Smi] dynamic right = null}) → dynamic
     return new self::T6::•();
   method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T7::•();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index 8ef426f..6c49846 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -16,7 +16,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=int?] dynamic a4 = null, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = null]) → void {
+  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = null]) → void {
     [@vm.direct-call.metadata=#lib::A1::foo] this.{self::A1::foo} = a5 as{TypeError} self::T1;
   }
 }
@@ -39,7 +39,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=int?] dynamic a4 = null, [@vm.inferred-type.metadata=int?] dynamic a5 = null, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = null]) → void {
+  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = null]) → void {
     [@vm.direct-call.metadata=#lib::A2::foo] this.{self::A2::foo} = a6;
   }
 }
@@ -72,7 +72,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=int?] dynamic a4 = null, [@vm.inferred-type.metadata=int?] dynamic a5 = null, [@vm.inferred-type.metadata=int?] dynamic a6 = null, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = null]) → void {
+  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = null, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = null]) → void {
     [@vm.direct-call.metadata=#lib::A3::foo] this.{self::A3::foo} = a7;
   }
 }
@@ -95,7 +95,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=int?] dynamic a4 = null, [@vm.inferred-type.metadata=int?] dynamic a5 = null, [@vm.inferred-type.metadata=int?] dynamic a6 = null, [@vm.inferred-type.metadata=int?] dynamic a7 = null, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = null]) → void {
+  method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = null, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = null]) → void {
     [@vm.direct-call.metadata=#lib::A4::foo] this.{self::A4::foo} = a8;
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
index 4cf2073..1b2f0e8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
@@ -13,7 +13,7 @@
     : super self::A::•()
     ;
   method foo() → core::int
-    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int?] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::bar] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar() as{TypeError} core::num) as{TypeError} core::int;
+    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int?] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::bar] [@vm.inferred-type.metadata=dart.core::_Smi] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar() as{TypeError} core::num) as{TypeError} core::int;
   method bar() → core::int
     return 3;
 }
diff --git a/pkg/vm/tool/precompiler2 b/pkg/vm/tool/precompiler2
index 9dae451..2339405 100755
--- a/pkg/vm/tool/precompiler2
+++ b/pkg/vm/tool/precompiler2
@@ -89,9 +89,6 @@
 export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
 BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"
 
-ENTRY_POINTS="--entry-points ${BIN_DIR}/gen/runtime/bin/precompiler_entry_points.json \
-              --entry-points ${SDK_DIR}/pkg/vm/lib/transformations/type_flow/entry_points_extra.json"
-
 # Step 1: Generate Kernel binary from the input Dart source.
 "$BIN_DIR"/dart                                                                \
      "${SDK_DIR}/pkg/vm/bin/gen_kernel.dart"                                   \
@@ -99,7 +96,6 @@
      --aot                                                                     \
      "${GEN_KERNEL_OPTIONS[@]}"                                                \
      $PACKAGES                                                                 \
-     $ENTRY_POINTS                                                             \
      -o "$SNAPSHOT_FILE.dill"                                                  \
      "$SOURCE_FILE"
 
diff --git a/pkg/vm/tool/test_bytecode b/pkg/vm/tool/test_bytecode
index b939757..9f800ab 100755
--- a/pkg/vm/tool/test_bytecode
+++ b/pkg/vm/tool/test_bytecode
@@ -11,9 +11,9 @@
 
 set -e
 
-# Pick the architecture and mode to build and test.
-BUILD_FLAGS="-m debug -a x64 --bytecode"
-BUILD_SUBDIR="DebugX64KBC"
+# Pick the architecture and mode to test.
+BUILD_FLAGS="-m release -a x64"
+BUILD_SUBDIR="ReleaseX64"
 
 function follow_links() {
   file="$1"
@@ -33,23 +33,9 @@
 SDK_DIR="$CUR_DIR/../../.."
 BUILD_DIR="$SDK_DIR/out/$BUILD_SUBDIR"
 
-# Verify that the VM supports the interpreter, if not, rebuild it.
-REBUILD=0
-if [ -f $BUILD_DIR/dart ]
-then
-  $BUILD_DIR/dart --trace-interpreter-after=-1 \
-    $SDK_DIR/runtime/tests/vm/dart/hello_world_test.dart > /dev/null 2>&1 \
-    || REBUILD=1
-else
-  REBUILD=1
-fi
-if [ $REBUILD -ne 0 ]
-then
-  echo "Rebuilding VM to support interpreter"
-  rm -rf $BUILD_DIR
-  $SDK_DIR/tools/gn.py $BUILD_FLAGS
-  $SDK_DIR/tools/build.py $BUILD_FLAGS runtime
-fi
+# Regenerate vm_platform_strong.dill to contain bytecode if needed:
+# $SDK_DIR/tools/gn.py $BUILD_FLAGS --bytecode
+# $SDK_DIR/tools/build.py $BUILD_FLAGS runtime
 
 # Generate dill file containing bytecode for input dart source.
 $CUR_DIR/gen_kernel --platform $BUILD_DIR/vm_platform_strong.dill \
@@ -63,10 +49,11 @@
 # $BUILD_DIR/dart $SDK_DIR/pkg/vm/bin/dump_kernel.dart \
 #   $BUILD_DIR/test_bytecode.dill $BUILD_DIR/test_bytecode.txt
 
-# Required flags.
-DART_VM_FLAGS="--optimization-counter-threshold=-1 $DART_VM_FLAGS"
+# Required flag.
+DART_VM_FLAGS="--enable-interpreter $DART_VM_FLAGS"
 
 # Optional flags examples. Uncomment as needed.
+# DART_VM_FLAGS="--compilation-counter-threshold=-1 $DART_VM_FLAGS"
 # DART_VM_FLAGS="--force-log-flush --isolate-log-filter=\"\" $DART_VM_FLAGS"
 # DART_VM_FLAGS="--dump-kernel-bytecode $DART_VM_FLAGS"
 # DART_VM_FLAGS="--trace-interpreter-after=0 $DART_VM_FLAGS"
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 242e976..856dcae 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -6,7 +6,6 @@
 import("../../sdk/lib/_http/http_sources.gni")
 import("../../sdk/lib/io/io_sources.gni")
 import("../../sdk/lib/cli/cli_sources.gni")
-import("../../utils/generate_entry_points_json.gni")
 import("../runtime_args.gni")
 import("../vm/heap/heap_sources.gni")
 import("../vm/compiler/compiler_sources.gni")
@@ -661,13 +660,6 @@
   ]
   args = [
     "--deterministic",
-
-    # TODO(asiva) remove these flags once the core snapshot is switched to
-    # dart 2.
-    "--no-strong",
-    "--no-sync-async",
-    "--reify-generic-functions",
-
     "--snapshot_kind=" + dart_core_snapshot_kind,
     "--vm_snapshot_data=" + rebase_path(vm_snapshot_data, root_build_dir),
     "--vm_snapshot_instructions=" +
@@ -1122,6 +1114,42 @@
   ]
 }
 
+prebuilt_dart_action("gen_kernel_bytecode_dill") {
+  if (target_os == "fuchsia") {
+    testonly = true
+  }
+
+  deps = [
+    "../vm:vm_platform",
+  ]
+  platform_dill = "$root_out_dir/vm_platform_strong.dill"
+
+  output = "$root_out_dir/gen_kernel_bytecode.dill"
+  outputs = [
+    output,
+  ]
+
+  script = "../../pkg/vm/bin/gen_kernel.dart"
+
+  depfile = "$target_gen_dir/gen_kernel_bytecode.dill.d"
+  abs_depfile = rebase_path(depfile)
+  rebased_output = rebase_path(output, root_out_dir)
+  vm_args = [
+    "--depfile=$abs_depfile",
+    "--depfile_output_filename=$rebased_output",
+  ]
+
+  args = [
+    "--gen-bytecode",
+    "--no-embed-sources",
+    "--platform",
+    rebase_path(platform_dill),
+    "--output",
+    rebase_path(output),
+    rebase_path(script),
+  ]
+}
+
 executable("run_vm_tests") {
   if (target_os == "fuchsia") {
     testonly = true
@@ -1140,6 +1168,7 @@
   deps = [
     ":dart_kernel_platform_cc",
     ":dart_snapshot_cc",
+    ":gen_kernel_bytecode_dill",
     ":generate_snapshot_test_dat_file",
     ":libdart_builtin",
     ":standalone_dart_io",
@@ -1239,11 +1268,3 @@
     ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
   }
 }
-
-generate_entry_points_json_with_dart_bootstrap(
-    "precompiler_entry_points_json") {
-  # Dart script to precompile (any valid script would suffice).
-  input = "../tests/vm/dart/hello_world_test.dart"
-
-  output = "$target_gen_dir/precompiler_entry_points.json"
-}
diff --git a/runtime/bin/dart_io_entries.txt b/runtime/bin/dart_io_entries.txt
deleted file mode 100644
index b0f5fe4..0000000
--- a/runtime/bin/dart_io_entries.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 1a93dd0..690cf4d 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -81,10 +81,6 @@
 // of a generic snapshot that contains only the corelibs).
 static char* app_script_name = NULL;
 
-// Global state that captures the entry point manifest files specified on the
-// command line.
-static CommandLineOptions* entry_points_files = NULL;
-
 // The environment provided through the command line using -D options.
 static dart::SimpleHashMap* environment = NULL;
 
@@ -138,8 +134,12 @@
 #undef BOOL_OPTION_DEFINITION
 
 DEFINE_ENUM_OPTION(snapshot_kind, SnapshotKind, snapshot_kind);
-DEFINE_STRING_OPTION_CB(embedder_entry_points_manifest,
-                        { entry_points_files->AddArgument(value); });
+DEFINE_STRING_OPTION_CB(embedder_entry_points_manifest, {
+  Log::PrintErr(
+      "Option --embedder_entry_points_manifest is no longer supported."
+      " Use @pragma(\'vm:entry-point\') instead.\n");
+  exit(kErrorExitCode);
+});
 DEFINE_STRING_OPTION_CB(url_mapping,
                         { DartUtils::url_mapping->AddArgument(value); });
 DEFINE_CB_OPTION(ProcessEnvironmentOption);
@@ -203,7 +203,6 @@
 "--vm_snapshot_instructions=<output-file>                                    \n"
 "--isolate_snapshot_data=<output-file>                                       \n"
 "--isolate_snapshot_instructions=<output-file>                               \n"
-"{--embedder_entry_points_manifest=<input-file>}                             \n"
 "[--obfuscate]                                                               \n"
 "[--save-obfuscation-map=<map-filename>]                                     \n"
 " <dart-script-file>                                                         \n"
@@ -212,22 +211,10 @@
 "as a static or dynamic library:                                             \n"
 "--snapshot_kind=app-aot-assembly                                            \n"
 "--assembly=<output-file>                                                    \n"
-"{--embedder_entry_points_manifest=<input-file>}                             \n"
 "[--obfuscate]                                                               \n"
 "[--save-obfuscation-map=<map-filename>]                                     \n"
 "<dart-script-file>                                                          \n"
 "                                                                            \n"
-"AOT snapshots require entry points manifest files, which list the places    \n"
-"in the Dart program the embedder calls from the C API (Dart_Invoke, etc).   \n"
-"Not specifying these may cause the tree shaker to remove them from the      \n"
-"program. The format of this manifest is as follows. Each line in the        \n"
-"manifest is a comma separated list of three elements. The first entry is    \n"
-"the library URI, the second entry is the class name and the final entry     \n"
-"the function name. The file must be terminated with a newline character.    \n"
-"                                                                            \n"
-"Example:                                                                    \n"
-"    dart:something,SomeClass,doSomething                                    \n"
-"                                                                            \n"
 "AOT snapshots can be obfuscated: that is all identifiers will be renamed    \n"
 "during compilation. This mode is enabled with --obfuscate flag. Mapping     \n"
 "between original and obfuscated names can be serialized as a JSON array     \n"
@@ -776,300 +763,6 @@
   return lib;
 }
 
-static void LoadEntryPoint(size_t lib_index,
-                           const Dart_QualifiedFunctionName* entry) {
-  if (strcmp(entry->library_uri, "::") == 0) {
-    return;  // Root library always loaded; can't `import '::';`.
-  }
-
-  Dart_Handle library_string = Dart_NewStringFromCString(entry->library_uri);
-  DART_CHECK_VALID(library_string);
-  Dart_Handle library = Dart_LookupLibrary(library_string);
-  // Embedder entry points may be setup in libraries that have not been
-  // explicitly loaded by the application script. In such cases, library lookup
-  // will fail. Manually load those libraries.
-  if (Dart_IsError(library)) {
-    static const uint32_t kLoadBufferMaxSize = 128;
-    char* load_buffer =
-        reinterpret_cast<char*>(calloc(kLoadBufferMaxSize, sizeof(char)));
-    snprintf(load_buffer, kLoadBufferMaxSize, "import '%s';",
-             DartUtils::GetStringValue(library_string));
-    Dart_Handle script_handle = Dart_NewStringFromCString(load_buffer);
-    memset(load_buffer, 0, kLoadBufferMaxSize);
-    snprintf(load_buffer, kLoadBufferMaxSize, "dart:_snapshot_%zu", lib_index);
-    Dart_Handle script_url = Dart_NewStringFromCString(load_buffer);
-    free(load_buffer);
-    Dart_Handle loaded =
-        Dart_LoadLibrary(script_url, Dart_Null(), script_handle, 0, 0);
-    DART_CHECK_VALID(loaded);
-
-    // Do a fresh lookup
-    library = Dart_LookupLibrary(library_string);
-  }
-
-  DART_CHECK_VALID(library);
-}
-
-static void ImportNativeEntryPointLibrariesIntoRoot(
-    const Dart_QualifiedFunctionName* entries) {
-  if (entries == NULL) {
-    return;
-  }
-
-  size_t index = 0;
-  while (true) {
-    Dart_QualifiedFunctionName entry = entries[index++];
-    if (entry.library_uri == NULL) {
-      // The termination sentinel has null members.
-      break;
-    }
-    if (strcmp(entry.library_uri, "::") != 0) {
-      Dart_Handle entry_library =
-          Dart_LookupLibrary(Dart_NewStringFromCString(entry.library_uri));
-      DART_CHECK_VALID(entry_library);
-      Dart_Handle import_result = Dart_LibraryImportLibrary(
-          entry_library, Dart_RootLibrary(), Dart_EmptyString());
-      DART_CHECK_VALID(import_result);
-    }
-  }
-}
-
-static void LoadEntryPoints(const Dart_QualifiedFunctionName* entries) {
-  if (entries == NULL) {
-    return;
-  }
-
-  // Setup native resolvers for all libraries found in the manifest.
-  size_t index = 0;
-  while (true) {
-    Dart_QualifiedFunctionName entry = entries[index++];
-    if (entry.library_uri == NULL) {
-      // The termination sentinel has null members.
-      break;
-    }
-    // Ensure library named in entry point is loaded.
-    LoadEntryPoint(index, &entry);
-  }
-}
-
-static void CleanupEntryPointItem(const Dart_QualifiedFunctionName* entry) {
-  if (entry == NULL) {
-    return;
-  }
-  // The allocation used for these entries is zero'ed. So even in error cases,
-  // references to some entries will be null. Calling this on an already cleaned
-  // up entry is programmer error.
-  free(const_cast<char*>(entry->library_uri));
-  free(const_cast<char*>(entry->class_name));
-  free(const_cast<char*>(entry->function_name));
-}
-
-static void CleanupEntryPointsCollection(Dart_QualifiedFunctionName* entries) {
-  if (entries == NULL) {
-    return;
-  }
-
-  size_t index = 0;
-  while (true) {
-    Dart_QualifiedFunctionName entry = entries[index++];
-    if (entry.library_uri == NULL) {
-      break;
-    }
-    CleanupEntryPointItem(&entry);
-  }
-  free(entries);
-}
-
-char* ParserErrorStringCreate(const char* format, ...) {
-  static const size_t kErrorBufferSize = 256;
-
-  char* error_buffer =
-      reinterpret_cast<char*>(calloc(kErrorBufferSize, sizeof(char)));
-  va_list args;
-  va_start(args, format);
-  vsnprintf(error_buffer, kErrorBufferSize, format, args);
-  va_end(args);
-
-  // In case of error, the buffer is released by the caller
-  return error_buffer;
-}
-
-const char* ParseEntryNameForIndex(uint8_t index) {
-  switch (index) {
-    case 0:
-      return "Library";
-    case 1:
-      return "Class";
-    case 2:
-      return "Function";
-    default:
-      return "Unknown";
-  }
-  return NULL;
-}
-
-static bool ParseEntryPointsManifestSingleLine(
-    const char* line,
-    Dart_QualifiedFunctionName* entry,
-    char** error) {
-  bool success = true;
-  size_t offset = 0;
-  for (uint8_t i = 0; i < 3; i++) {
-    const char* component = strchr(line + offset, i == 2 ? '\n' : ',');
-    if (component == NULL) {
-      success = false;
-      *error = ParserErrorStringCreate(
-          "Manifest entries must be comma separated and newline terminated. "
-          "Could not parse '%s' on line '%s'",
-          ParseEntryNameForIndex(i), line);
-      break;
-    }
-
-    int64_t chars_read = component - (line + offset);
-    if (chars_read <= 0) {
-      success = false;
-      *error =
-          ParserErrorStringCreate("There is no '%s' specified on line '%s'",
-                                  ParseEntryNameForIndex(i), line);
-      break;
-    }
-
-    if (entry != NULL) {
-      // These allocations are collected in |CleanupEntryPointsCollection|.
-      char* entry_item =
-          reinterpret_cast<char*>(calloc(chars_read + 1, sizeof(char)));
-      memmove(entry_item, line + offset, chars_read);
-
-      switch (i) {
-        case 0:  // library
-          entry->library_uri = entry_item;
-          break;
-        case 1:  // class
-          entry->class_name = entry_item;
-          break;
-        case 2:  // function
-          entry->function_name = entry_item;
-          break;
-        default:
-          free(entry_item);
-          success = false;
-          *error = ParserErrorStringCreate("Internal parser error\n");
-          break;
-      }
-    }
-
-    offset += chars_read + 1;
-  }
-  return success;
-}
-
-int64_t ParseEntryPointsManifestLines(FILE* file,
-                                      Dart_QualifiedFunctionName* collection) {
-  int64_t entries = 0;
-
-  static const int kManifestMaxLineLength = 1024;
-  char* line = reinterpret_cast<char*>(malloc(kManifestMaxLineLength));
-  size_t line_number = 0;
-  while (true) {
-    line_number++;
-    char* read_line = fgets(line, kManifestMaxLineLength, file);
-
-    if (read_line == NULL) {
-      if ((feof(file) != 0) && (ferror(file) != 0)) {
-        Log::PrintErr(
-            "Error while reading line number %zu. The manifest must be "
-            "terminated by a newline\n",
-            line_number);
-        entries = -1;
-      }
-      break;
-    }
-
-    if ((read_line[0] == '\n') || (read_line[0] == '#')) {
-      // Blank or comment line.
-      continue;
-    }
-
-    Dart_QualifiedFunctionName* entry =
-        collection != NULL ? collection + entries : NULL;
-
-    char* error_buffer = NULL;
-    if (!ParseEntryPointsManifestSingleLine(read_line, entry, &error_buffer)) {
-      CleanupEntryPointItem(entry);
-      Log::PrintErr("Parser error on line %zu: %s\n", line_number,
-                    error_buffer);
-      free(error_buffer);
-      entries = -1;
-      break;
-    }
-
-    entries++;
-  }
-
-  free(line);
-
-  return entries;
-}
-
-static Dart_QualifiedFunctionName* ParseEntryPointsManifestFiles() {
-  // Total number of entries across all manifest files.
-  int64_t entry_count = 0;
-
-  // Parse the files once but don't store the results. This is done to first
-  // determine the number of entries in the manifest
-  for (intptr_t i = 0; i < entry_points_files->count(); i++) {
-    const char* path = entry_points_files->GetArgument(i);
-
-    FILE* file = fopen(path, "r");
-
-    if (file == NULL) {
-      Log::PrintErr("Could not open entry points manifest file `%s`\n", path);
-      return NULL;
-    }
-
-    int64_t entries = ParseEntryPointsManifestLines(file, NULL);
-    fclose(file);
-
-    if (entries < 0) {
-      Log::PrintErr("Manifest file `%s` specified is invalid\n", path);
-      return NULL;
-    }
-
-    entry_count += entries;
-  }
-
-  // Allocate enough storage for the entries in the file plus a termination
-  // sentinel and parse it again to populate the allocation
-  Dart_QualifiedFunctionName* entries =
-      reinterpret_cast<Dart_QualifiedFunctionName*>(
-          calloc(entry_count + 1, sizeof(Dart_QualifiedFunctionName)));
-
-  int64_t parsed_entry_count = 0;
-  for (intptr_t i = 0; i < entry_points_files->count(); i++) {
-    const char* path = entry_points_files->GetArgument(i);
-    FILE* file = fopen(path, "r");
-    parsed_entry_count +=
-        ParseEntryPointsManifestLines(file, &entries[parsed_entry_count]);
-    fclose(file);
-  }
-
-  ASSERT(parsed_entry_count == entry_count);
-
-  // The entries allocation must be explicitly cleaned up via
-  // |CleanupEntryPointsCollection|
-  return entries;
-}
-
-static Dart_QualifiedFunctionName* ParseEntryPointsManifestIfPresent() {
-  Dart_QualifiedFunctionName* entries = ParseEntryPointsManifestFiles();
-  if ((entries == NULL) && IsSnapshottingForPrecompilation()) {
-    Log::PrintErr(
-        "Could not find native embedder entry points during precompilation\n");
-    exit(kErrorExitCode);
-  }
-  return entries;
-}
-
 static void LoadCompilationTrace() {
   if ((load_compilation_trace_filename != NULL) &&
       (snapshot_kind == kCoreJIT)) {
@@ -1201,13 +894,12 @@
   return std::unique_ptr<MappedMemory>(mapping);
 }
 
-static void CreateAndWritePrecompiledSnapshot(
-    Dart_QualifiedFunctionName* standalone_entry_points) {
+static void CreateAndWritePrecompiledSnapshot() {
   ASSERT(IsSnapshottingForPrecompilation());
   Dart_Handle result;
 
   // Precompile with specified embedder entry points
-  result = Dart_Precompile(standalone_entry_points);
+  result = Dart_Precompile();
   CHECK_RESULT(result);
 
   // Create a precompiled snapshot.
@@ -1352,6 +1044,10 @@
   return isolate;
 }
 
+static Dart_QualifiedFunctionName no_entry_points[] = {
+    {NULL, NULL, NULL}  // Must be terminated with NULL entries.
+};
+
 static int GenerateSnapshotFromKernel(const uint8_t* kernel_buffer,
                                       intptr_t kernel_buffer_size) {
   ASSERT(SnapshotKindAllowedFromKernel());
@@ -1366,11 +1062,9 @@
   Dart_IsolateFlags isolate_flags;
   Dart_IsolateFlagsInitialize(&isolate_flags);
 
-  Dart_QualifiedFunctionName* entry_points = NULL;
   if (IsSnapshottingForPrecompilation()) {
-    entry_points = ParseEntryPointsManifestIfPresent();
     isolate_flags.obfuscate = obfuscate;
-    isolate_flags.entry_points = entry_points;
+    isolate_flags.entry_points = no_entry_points;
   }
 
   // We need to capture the vmservice library in the core snapshot, so load it
@@ -1418,12 +1112,10 @@
         return kErrorExitCode;
       }
 
-      CreateAndWritePrecompiledSnapshot(entry_points);
+      CreateAndWritePrecompiledSnapshot();
 
       CreateAndWriteDependenciesFile();
 
-      CleanupEntryPointsCollection(entry_points);
-
       break;
     }
     case kCore:
@@ -1456,10 +1148,6 @@
   CommandLineOptions cmdline_url_mapping(argc);
   DartUtils::url_mapping = &cmdline_url_mapping;
 
-  // Initialize the entrypoints array.
-  CommandLineOptions entry_points_files_array(argc);
-  entry_points_files = &entry_points_files_array;
-
   // When running from the command line we assume that we are optimizing for
   // throughput, and therefore use a larger new gen semi space size and a faster
   // new gen growth factor unless others have been specified.
@@ -1594,9 +1282,6 @@
   Dart_IsolateFlags flags;
   Dart_IsolateFlagsInitialize(&flags);
 
-  Dart_QualifiedFunctionName* entry_points =
-      ParseEntryPointsManifestIfPresent();
-
   IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root,
                                               commandline_packages_file, NULL);
   Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data,
@@ -1662,7 +1347,7 @@
 
     if (IsSnapshottingForPrecompilation()) {
       flags.obfuscate = obfuscate;
-      flags.entry_points = entry_points;
+      flags.entry_points = no_entry_points;
     }
 
     Dart_Isolate isolate = NULL;
@@ -1689,17 +1374,10 @@
 
     ASSERT(kernel_buffer == NULL);
 
-    // Load any libraries named in the entry points. Do this before loading the
-    // user's script to ensure conditional imports see the embedder-specific
-    // dart: libraries.
-    LoadEntryPoints(entry_points);
-
     // Load the specified script.
     library = LoadSnapshotCreationScript(app_script_name);
     CHECK_RESULT(library);
 
-    ImportNativeEntryPointLibrariesIntoRoot(entry_points);
-
     // Ensure that we mark all libraries as loaded.
     result = Dart_FinalizeLoading(false);
     CHECK_RESULT(result);
@@ -1718,7 +1396,7 @@
         break;
       case kAppAOTBlobs:
       case kAppAOTAssembly:
-        CreateAndWritePrecompiledSnapshot(entry_points);
+        CreateAndWritePrecompiledSnapshot();
         break;
       default:
         UNREACHABLE();
@@ -1729,8 +1407,6 @@
     Dart_ExitScope();
     Dart_ShutdownIsolate();
 
-    CleanupEntryPointsCollection(entry_points);
-
     Dart_EnterIsolate(UriResolverIsolateScope::isolate);
     Dart_ShutdownIsolate();
   } else {
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 992dd7f..133b9c7 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -165,18 +165,16 @@
     success &= file->Print("%s ", dep);
     free(dep);
   }
-  if (Options::preview_dart_2()) {
-    if (kernel_isolate_is_running) {
-      Dart_KernelCompilationResult result = Dart_KernelListDependencies();
-      if (result.status != Dart_KernelCompilationStatus_Ok) {
-        ErrorExit(
-            kErrorExitCode,
-            "Error: Failed to fetch dependencies from kernel service: %s\n\n",
-            result.error);
-      }
-      success &= file->WriteFully(result.kernel, result.kernel_size);
-      free(result.kernel);
+  if (kernel_isolate_is_running) {
+    Dart_KernelCompilationResult result = Dart_KernelListDependencies();
+    if (result.status != Dart_KernelCompilationStatus_Ok) {
+      ErrorExit(
+          kErrorExitCode,
+          "Error: Failed to fetch dependencies from kernel service: %s\n\n",
+          result.error);
     }
+    success &= file->WriteFully(result.kernel, result.kernel_size);
+    free(result.kernel);
   }
   success &= file->Print("\n");
   if (!success) {
@@ -300,8 +298,8 @@
   CHECK_RESULT(result);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  if (Options::preview_dart_2() && !isolate_run_app_snapshot &&
-      kernel_buffer == NULL && !Dart_IsKernelIsolate(isolate)) {
+  if (!isolate_run_app_snapshot && kernel_buffer == NULL &&
+      !Dart_IsKernelIsolate(isolate)) {
     if (!dfe.CanUseDartFrontend()) {
       const char* format = "Dart frontend unavailable to compile script %s.";
       intptr_t len = snprintf(NULL, 0, format, script_uri) + 1;
@@ -520,9 +518,6 @@
 #else
   // JIT: Service isolate uses the core libraries snapshot.
   bool skip_library_load = false;
-  const uint8_t* isolate_snapshot_data = core_isolate_snapshot_data;
-  const uint8_t* isolate_snapshot_instructions =
-      core_isolate_snapshot_instructions;
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
   Dart_Isolate isolate = NULL;
@@ -540,36 +535,28 @@
   ASSERT(flags != NULL);
   flags->load_vmservice_library = true;
 
-  if (Options::preview_dart_2()) {
-    // If there is intention to use DFE, then we create the isolate
-    // from kernel only if we can.
-    const uint8_t* kernel_buffer = NULL;
-    intptr_t kernel_buffer_size = 0;
-    dfe.LoadPlatform(&kernel_buffer, &kernel_buffer_size);
-    if (kernel_buffer == NULL) {
-      dfe.application_kernel_buffer(&kernel_buffer, &kernel_buffer_size);
-    }
-
-    // TODO(sivachandra): When the platform program is unavailable, check if
-    // application kernel binary is self contained or an incremental binary.
-    // Isolate should be created only if it is a self contained kernel binary.
-    if (kernel_buffer != NULL) {
-      isolate = Dart_CreateIsolateFromKernel(script_uri, NULL, kernel_buffer,
-                                             kernel_buffer_size, flags,
-                                             isolate_data, error);
-    } else {
-      *error =
-          strdup("Platform kernel not available to create service isolate.");
-      delete isolate_data;
-      return NULL;
-    }
-    skip_library_load = true;
-  } else {
-    isolate = Dart_CreateIsolate(
-        script_uri, main, isolate_snapshot_data, isolate_snapshot_instructions,
-        app_isolate_shared_data, app_isolate_shared_instructions, flags,
-        isolate_data, error);
+  // If there is intention to use DFE, then we create the isolate
+  // from kernel only if we can.
+  const uint8_t* kernel_buffer = NULL;
+  intptr_t kernel_buffer_size = 0;
+  dfe.LoadPlatform(&kernel_buffer, &kernel_buffer_size);
+  if (kernel_buffer == NULL) {
+    dfe.application_kernel_buffer(&kernel_buffer, &kernel_buffer_size);
   }
+
+  // TODO(sivachandra): When the platform program is unavailable, check if
+  // application kernel binary is self contained or an incremental binary.
+  // Isolate should be created only if it is a self contained kernel binary.
+  if (kernel_buffer != NULL) {
+    isolate = Dart_CreateIsolateFromKernel(script_uri, NULL, kernel_buffer,
+                                           kernel_buffer_size, flags,
+                                           isolate_data, error);
+  } else {
+    *error = strdup("Platform kernel not available to create service isolate.");
+    delete isolate_data;
+    return NULL;
+  }
+  skip_library_load = true;
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   if (isolate == NULL) {
     delete isolate_data;
@@ -663,7 +650,7 @@
   Dart_Isolate isolate = NULL;
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  if (Options::preview_dart_2() && !isolate_run_app_snapshot) {
+  if (!isolate_run_app_snapshot) {
     const uint8_t* platform_kernel_buffer = NULL;
     intptr_t platform_kernel_buffer_size = 0;
     dfe.LoadPlatform(&platform_kernel_buffer, &platform_kernel_buffer_size);
@@ -891,7 +878,7 @@
   }
 
   Dart_Isolate isolate = NULL;
-  if (Options::preview_dart_2() && Options::gen_snapshot_kind() == kAppAOT) {
+  if (Options::gen_snapshot_kind() == kAppAOT) {
     isolate = IsolateSetupHelperAotCompilationDart2(
         script_name, "main", Options::package_root(), Options::packages_file(),
         &flags, &error, &exit_code);
@@ -935,12 +922,8 @@
       // the core snapshot.
       Platform::Exit(kErrorExitCode);
     }
-    if (Options::preview_dart_2()) {
-      Snapshot::GenerateKernel(Options::snapshot_filename(), script_name,
-                               isolate_data->resolved_packages_config());
-    } else {
-      Snapshot::GenerateScript(Options::snapshot_filename());
-    }
+    Snapshot::GenerateKernel(Options::snapshot_filename(), script_name,
+                             isolate_data->resolved_packages_config());
   } else {
     // Lookup the library of the root script.
     Dart_Handle root_lib = Dart_RootLibrary();
@@ -974,7 +957,7 @@
     }
 
     if (Options::gen_snapshot_kind() == kAppAOT) {
-      result = Dart_Precompile(standalone_entry_points);
+      result = Dart_Precompile();
       CHECK_RESULT(result);
 
       if (Options::obfuscate() &&
@@ -1234,14 +1217,6 @@
     // Since we loaded the script anyway, save it.
     dfe.set_application_kernel_buffer(application_kernel_buffer,
                                       application_kernel_buffer_size);
-    // Since we saw a dill file, it means we have to turn on all the
-    // preview_dart_2 options.
-    if (Options::no_preview_dart_2()) {
-      Log::PrintErr(
-          "A kernel file is specified as the input, "
-          "--no-preview-dart-2 option is incompatible with it\n");
-      Platform::Exit(kErrorExitCode);
-    }
     Options::dfe()->set_use_dfe();
   }
 #endif
@@ -1262,9 +1237,8 @@
   init_params.entropy_source = DartUtils::EntropySource;
   init_params.get_service_assets = GetVMServiceAssetsArchiveCallback;
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  init_params.start_kernel_isolate = Options::preview_dart_2() &&
-                                     dfe.UseDartFrontend() &&
-                                     dfe.CanUseDartFrontend();
+  init_params.start_kernel_isolate =
+      dfe.UseDartFrontend() && dfe.CanUseDartFrontend();
 #else
   init_params.start_kernel_isolate = false;
 #endif
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index faf5a26..38e7fa6 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -63,17 +63,9 @@
 CB_OPTIONS_LIST(CB_OPTION_DEFINITION)
 #undef CB_OPTION_DEFINITION
 
-void Options::SetDart1Options(CommandLineOptions* vm_options) {
-  vm_options->AddArgument("--no-strong");
-  vm_options->AddArgument("--no-reify-generic-functions");
-  vm_options->AddArgument("--no-sync-async");
-}
-
 #if !defined(DART_PRECOMPILED_RUNTIME)
 DFE* Options::dfe_ = NULL;
 
-// TODO(sivachandra): Make it an error to specify --dfe without
-// specifying --preview_dart_2.
 DEFINE_STRING_OPTION_CB(dfe, { Options::dfe()->set_frontend_filename(value); });
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
@@ -384,13 +376,9 @@
     }
   }
 
-  if (Options::no_preview_dart_2()) {
-    Options::SetDart1Options(vm_options);
-  } else {
 #if !defined(DART_PRECOMPILED_RUNTIME)
-    Options::dfe()->set_use_dfe();
+  Options::dfe()->set_use_dfe();
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
-  }
   if (Options::deterministic()) {
     // Both an embedder and VM flag.
     vm_options->AddArgument("--deterministic");
@@ -469,9 +457,6 @@
   }
   if (checked_set) {
     vm_options->AddArgument("--enable-asserts");
-    if (Options::no_preview_dart_2()) {
-      vm_options->AddArgument("--enable-type-checks");
-    }
   }
 
   // If --snapshot is given without --snapshot-kind, default to script snapshot.
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index f5672eb..11681ae 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -45,7 +45,6 @@
   V(short_socket_read, short_socket_read)                                      \
   V(short_socket_write, short_socket_write)                                    \
   V(disable_exit, exit_disabled)                                               \
-  V(no_preview_dart_2, no_preview_dart_2)                                      \
   V(preview_dart_2, nop_option)
 
 // Boolean flags that have a short form.
@@ -111,8 +110,7 @@
   CB_OPTIONS_LIST(CB_OPTIONS_DECL)
 #undef CB_OPTIONS_DECL
 
-  static bool preview_dart_2() { return !no_preview_dart_2(); }
-  static void SetDart1Options(CommandLineOptions* vm_options);
+  static bool preview_dart_2() { return true; }
 
   static dart::SimpleHashMap* environment() { return environment_; }
 
diff --git a/runtime/bin/vmservice/vmservice_io.dart b/runtime/bin/vmservice/vmservice_io.dart
index 10da851..64d602d 100644
--- a/runtime/bin/vmservice/vmservice_io.dart
+++ b/runtime/bin/vmservice/vmservice_io.dart
@@ -94,6 +94,9 @@
     var file = new File.fromUri(uri);
     var parent_directory = file.parent;
     await parent_directory.create(recursive: true);
+    if (await file.exists()) {
+      await file.delete();
+    }
     var result = await file.writeAsBytes(bytes);
     completer.complete(null);
     WriteLimiter._writeCompleted();
@@ -143,6 +146,9 @@
   var file = new File.fromUri(path);
   var parent_directory = file.parent;
   await parent_directory.create(recursive: true);
+  if (await file.exists()) {
+    await file.delete();
+  }
   IOSink sink = await file.openWrite();
   await sink.addStream(bytes);
   await sink.close();
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index c1c02df..a8df732 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3368,17 +3368,16 @@
  */
 
 /**
- * Compiles all functions reachable from the provided entry points and marks
+ * Compiles all functions reachable from entry points and marks
  * the isolate to disallow future compilation.
  *
- * \param entry_points A list of functions that may be invoked through the
- * embedding API, e.g. Dart_Invoke/GetField/SetField/New/InvokeClosure.
+ * Entry points should be specified using `@pragma("vm:entry-point")`
+ * annotation.
  *
  * \return An error handle if a compilation error or runtime error running const
  * constructors was encountered.
  */
-DART_EXPORT Dart_Handle
-Dart_Precompile(Dart_QualifiedFunctionName entry_points[]);
+DART_EXPORT Dart_Handle Dart_Precompile();
 
 typedef void (*Dart_StreamingWriteCallback)(void* callback_data,
                                             const uint8_t* buffer,
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index b401d37..9959ef4 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -169,6 +169,8 @@
  */
 DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_CompileAll();
 
+DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_ReadAllBytecode();
+
 /**
  * Parses all loaded functions in the current isolate..
  *
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index edb8d93..c2927d9 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -137,6 +137,10 @@
     // hence do not have a token position, and therefore cannot be reparsed.
     has_extra_parameter_info = false;
   }
+  if (func.HasBytecode() && (func.kernel_offset() == 0)) {
+    // Anonymous closures in bytecode cannot be reparsed.
+    has_extra_parameter_info = false;
+  }
 
   Array& param_descriptor = Array::Handle();
   if (has_extra_parameter_info) {
diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart
index 81ed77a..053bab8 100644
--- a/runtime/observatory/lib/src/elements/debugger.dart
+++ b/runtime/observatory/lib/src/elements/debugger.dart
@@ -2691,25 +2691,25 @@
 
   S.Script get script => _frame.location.script;
 
-  int _varsTop(varsDiv) {
+  int _varsTop(DivElement varsDiv) {
     const minTop = 0;
     if (varsDiv == null) {
       return minTop;
     }
-    final paddingTop = document.body.contentEdge.top;
-    final parent = varsDiv.parent.getBoundingClientRect();
-    final varsHeight = varsDiv.clientHeight;
-    final maxTop = parent.height - varsHeight;
-    final adjustedTop = paddingTop - parent.top;
-    return (max(minTop, min(maxTop, adjustedTop)));
+    final num paddingTop = document.body.contentEdge.top;
+    final Rectangle parent = varsDiv.parent.getBoundingClientRect();
+    final int varsHeight = varsDiv.clientHeight;
+    final int maxTop = (parent.height - varsHeight).toInt();
+    final int adjustedTop = (paddingTop - parent.top).toInt();
+    return max(minTop, min(maxTop, adjustedTop));
   }
 
   void _onScroll(event) {
     if (!_expanded || _varsDiv == null) {
       return;
     }
-    var currentTop = _varsDiv.style.top;
-    var newTop = _varsTop(_varsDiv);
+    String currentTop = _varsDiv.style.top;
+    int newTop = _varsTop(_varsDiv);
     if (currentTop != newTop) {
       _varsDiv.style.top = '${newTop}px';
     }
diff --git a/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart b/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
index 998f4bb..9648807 100644
--- a/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
+++ b/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
@@ -28,11 +28,16 @@
   foo<T>() {
     debugger();
   }
+
+  bar<T>(T t) {
+    debugger();
+  }
 }
 
 void testMain() {
   topLevel<String>();
   (new A()).foo<int>();
+  (new A()).bar<dynamic>(42);
 }
 
 var tests = <IsolateTest>[
@@ -95,6 +100,22 @@
     print(result);
     expect(result.valueAsString, equals("int"));
   },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    // Make sure we are in the right place.
+    var stack = await isolate.getStack();
+    var topFrame = 0;
+    expect(stack.type, equals('Stack'));
+    expect(await stack['frames'][topFrame].location.getLine(), 34);
+
+    Instance result = await isolate.evalFrame(topFrame, "T.toString()");
+    print(result);
+    expect(result.valueAsString, equals("dynamic"));
+    result = await isolate.evalFrame(topFrame, "t");
+    print(result);
+    expect(result.valueAsString, equals("42"));
+  },
 ];
 
 main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain);
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 0370264..ddff9c6 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -79,6 +79,9 @@
 [ $mode == debug && ($arch == simarm || $arch == simarm64) ]
 *: SkipSlow
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 [ !$strong && ($compiler == dartk || $compiler == dartkp) ]
 *: Skip
 
diff --git a/runtime/tests/vm/dart/byte_array_optimized_test.dart b/runtime/tests/vm/dart/byte_array_optimized_test.dart
index 827b93c..ca3b432 100644
--- a/runtime/tests/vm/dart/byte_array_optimized_test.dart
+++ b/runtime/tests/vm/dart/byte_array_optimized_test.dart
@@ -899,9 +899,9 @@
     Expect.isTrue(copy is Uint64List);
     Expect.equals(4, region.length);
     Expect.listEquals([3, 4, 5, 6], region);
-    array.setRange(3, 7, [-0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF]);
     Expect.listEquals(
-        [0, 1, 2, -0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
         array);
   }
 
diff --git a/runtime/tests/vm/dart/byte_array_test.dart b/runtime/tests/vm/dart/byte_array_test.dart
index d3dc4b2..a476301 100644
--- a/runtime/tests/vm/dart/byte_array_test.dart
+++ b/runtime/tests/vm/dart/byte_array_test.dart
@@ -1022,9 +1022,9 @@
     Expect.isTrue(copy is Uint64List);
     Expect.equals(4, region.length);
     Expect.listEquals([3, 4, 5, 6], region);
-    array.setRange(3, 7, [-0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF]);
     Expect.listEquals(
-        [0, 1, 2, -0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
         array);
   }
 
diff --git a/runtime/tests/vm/dart/redirection_type_shuffling_test.dart b/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
index c1db64c..b177334 100644
--- a/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
+++ b/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
@@ -7,7 +7,7 @@
 
 class G<A extends int, B extends String> {
   G();
-  factory G.swap() = G<B,A>;  /// 00: static type warning
+  factory G.swap() = G<B,A>;  /// 00: compile-time error
   factory G.retain() = G<A,B>;
 }
 
diff --git a/runtime/tests/vm/dart/snapshot_version_test.dart b/runtime/tests/vm/dart/snapshot_version_test.dart
index 7034458..2dcde10 100644
--- a/runtime/tests/vm/dart/snapshot_version_test.dart
+++ b/runtime/tests/vm/dart/snapshot_version_test.dart
@@ -6,10 +6,8 @@
 import "package:expect/expect.dart";
 
 main() {
-  var result = Process.runSync(Platform.executable, [
-    '--no-preview-dart-2',
-    Platform.script.resolve('./bad_snapshot').toFilePath()
-  ]);
+  var result = Process.runSync(Platform.executable,
+      [Platform.script.resolve('./bad_snapshot').toFilePath()]);
   print("=== stdout ===\n ${result.stdout}");
   print("=== stderr ===\n ${result.stderr}");
   Expect.equals(253, result.exitCode);
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 400420b..6730986 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -1,6 +1,7 @@
 # Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
+
 cc/AllocGeneric_Overflow: Crash, Fail # These tests are expected to crash on all platforms.
 cc/ArrayNew_Overflow_Crash: Crash, Fail # These tests are expected to crash on all platforms.
 cc/CodeImmutability: Crash, Fail # These tests are expected to crash on all platforms.
@@ -20,6 +21,7 @@
 cc/SNPrint_BadArgs: Crash, Fail # These tests are expected to crash on all platforms.
 dart/data_uri_import_test/none: SkipByDesign
 dart/entrypoints/*: Skip  # Only supported in Dart 2 JIT (hot-reload -> issue 34199).
+dart/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
 
 [ $builder_tag == asan ]
 cc/CodeImmutability: Fail, OK # Address Sanitizer turns a crash into a failure.
@@ -27,20 +29,11 @@
 [ $builder_tag == optimization_counter_threshold ]
 dart/appjit*: SkipByDesign # Test needs to a particular opt-counter value
 
-[ $compiler == app_jit ]
-dart/snapshot_version_test: Fail, OK # Expects to find script snapshot relative to Dart source.
-
 [ $compiler == app_jitk ]
 dart/data_uri_import_test/utf16: MissingRuntimeError
-dart/redirection_type_shuffling_test/00: RuntimeError
 dart/redirection_type_shuffling_test/none: RuntimeError
 dart/snapshot_version_test: RuntimeError
 
-[ $compiler == dart2analyzer ]
-dart/byte_array_optimized_test: CompileTimeError # int64
-dart/byte_array_test: CompileTimeError # int64
-dart/redirection_type_shuffling_test/00: CompileTimeError
-
 [ $compiler == dart2js ]
 dart/byte_array_optimized_test: Skip # compilers not aware of byte arrays
 dart/byte_array_test: Skip # compilers not aware of byte arrays
@@ -106,10 +99,15 @@
 cc/CorelibCompilerStats: Skip
 cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Service_Profile: Skip
+cc/GenKernelKernelLoadKernel: Skip  # Issue 34542.
+cc/GenKernelKernelReadAllBytecode: Skip  # Issue 34393.
 
 [ !$strong ]
 dart/callee_side_type_checks_test: SkipByDesign
 
+[ !$checked && !$strong && $runtime == vm ]
+dart/redirection_type_shuffling_test/00: MissingCompileTimeError
+
 # Following tests are failing in a weird way on macos/ia32/debug builds
 # need to investigate.
 [ $runtime == vm && $system == macos ]
@@ -365,5 +363,5 @@
 dart/spawn_shutdown_test: Skip # We can shutdown an isolate before it reloads.
 dart/stack_overflow_shared_test: SkipSlow # Too slow with --slow-path-triggers-gc flag and not relevant outside precompiled.
 
-[ $arch == simdbc64 && $mode == debug && $no_preview_dart_2 ]
-cc/CustomIsolates: Crash  # http://dartbug.com/34424
+[ ($runtime == vm || $runtime == dart_precompiled) && !$preview_dart_2 ]
+*:SkipByDesign # Deprecating all Dart1 modes of execution
diff --git a/runtime/tools/create_snapshot_bin.py b/runtime/tools/create_snapshot_bin.py
index 87c3a7d..599d17c 100755
--- a/runtime/tools/create_snapshot_bin.py
+++ b/runtime/tools/create_snapshot_bin.py
@@ -45,9 +45,6 @@
       action="store", type="string",
       help="output file name into which isolate snapshot in binary form " +
            "is generated")
-  result.add_option("--embedder_entry_points_manifest",
-      action="store", type="string",
-      help="input manifest with the vm entry points in a precompiled snapshot")
   result.add_option("--script",
       action="store", type="string",
       help="Dart script for which snapshot is to be generated")
@@ -146,11 +143,6 @@
     script_args.append(''.join([ "--isolate_snapshot_instructions=",
                                  options.isolate_instructions_output_bin ]))
 
-  # Specify the embedder entry points snapshot
-  if options.embedder_entry_points_manifest:
-    script_args.append(''.join([ "--embedder_entry_points_manifest=",
-                                 options.embedder_entry_points_manifest ]))
-
   # Next setup all url mapping options specified.
   for url_arg in options.url_mapping:
     url_mapping_argument = ''.join(["--url_mapping=", url_arg ])
diff --git a/runtime/tools/dartfuzz/README.md b/runtime/tools/dartfuzz/README.md
index 9ee5e38..ba2ce55 100644
--- a/runtime/tools/dartfuzz/README.md
+++ b/runtime/tools/dartfuzz/README.md
@@ -10,15 +10,15 @@
 
 How to run DartFuzz
 ===================
+To generate a single random Dart program, run
 
-    dart dartfuzz.dart [--help] [--seed SEED] [FILENAME]
+    dart dartfuzz.dart [--help] [--seed SEED] FILENAME
 
 where
 
     --help : prints help and exits
     --seed : defines random seed (system-set by default)
 
-If no FILENAME is given, DartFuzz sends all output to stdout.
 The tool provides a runnable main isolate. A typical single
 test run looks as:
 
@@ -27,6 +27,9 @@
 
 How to start DartFuzz testing
 =============================
+To start a fuzz testing session, run
+
+    dart dartfuzz_test.dart
 
     run_dartfuzz_test.py  [--help]
                           [--repeat REPEAT]
@@ -38,21 +41,26 @@
 
     --help            : prints help and exits
     --repeat          : number of tests to run (1000 by default)
-    --true_divergence : only report true divergences
+    --show-stats      : show session statistics (true by default)
+    --true-divergence : only report true divergences (true by default)
+    --dart-top        : sets DART_TOP explicitly through command line
     --mode1           : m1
     --mode2           : m2, and values one of
-        jit-ia32  = Dart JIT (ia32)
-        jit-x64   = Dart JIT (x64)
-        jit-arm32 = Dart JIT (simarm)
-        jit-arm64 = Dart JIT (simarm64)
-        aot-x64   = Dart AOT (x64)
-        aot-arm64 = Dart AOT (simarm64)
-        js        = dart2js + JS
+        jit-[debug-]ia32  = Dart JIT (ia32)
+        jit-[debug-]x64   = Dart JIT (x64)
+        jit-[debug-]arm32 = Dart JIT (simarm)
+        jit-[debug-]arm64 = Dart JIT (simarm64)
+        aot-[debug-]x64   = Dart AOT (x64)
+        aot-[debug-]arm64 = Dart AOT (simarm64)
+        js                = dart2js + JS
 
-This fuzzer tool assumes the environment variable 'DART_TOP' points to
-the top of the Dart SDK development tree in which all proper binaries
-have been built already (e.g. testing jit-ia32 will invoke the binary
-${DART_TOP}/out/ReleaseIA32/dart to start the Dart VM).
+This fuzz testing tool must have access to the top of a Dart SDK
+development tree (DART_TOP) in which all proper binaries have been
+built already (for example, testing jit-ia32 will invoke the binary
+${DART_TOP}/out/ReleaseIA32/dart to start the Dart VM). The DART_TOP
+can be provided through the --dart-top option, as an environment
+variable, or, by default, as the current directory by invoking the
+fuzz testing tool from the Dart SDK top.
 
 Background
 ==========
@@ -73,9 +81,9 @@
 based fuzz testing constructs random, but properly formatted input data.
 Mutation-based fuzz testing applies small random changes to existing inputs
 in order to detect shortcomings in a system. Profile-guided or coverage-guided
-fuzzing adds a direction to the way these random changes are applied. Multi-
-layered approaches generate random inputs that are subsequently mutated at
-various stages of execution.
+fuzz testing adds a direction to the way these random changes are applied.
+Multi-layered approaches generate random inputs that are subsequently mutated
+at various stages of execution.
 
 The randomness of fuzz testing implies that the size and scope of testing is
 no longer bounded. Every new run can potentially discover bugs and crashes
diff --git a/runtime/tools/dartfuzz/dartfuzz.dart b/runtime/tools/dartfuzz/dartfuzz.dart
index d32766f..06790d0 100644
--- a/runtime/tools/dartfuzz/dartfuzz.dart
+++ b/runtime/tools/dartfuzz/dartfuzz.dart
@@ -92,9 +92,9 @@
 const fieldName = 'fld';
 const methodName = 'foo';
 
-// Class that generates a random, but runnable Dart program for fuzz testing.
+/// Class that generates a random, but runnable Dart program for fuzz testing.
 class DartFuzz {
-  DartFuzz(this.seed, this.sink);
+  DartFuzz(this.seed, this.file);
 
   void run() {
     // Initialize program variables.
@@ -842,23 +842,23 @@
 
   // Emits indented line to append to program.
   void emitLn(String line, {bool newline = true}) {
-    sink.write(' ' * indent);
+    file.writeStringSync(' ' * indent);
     emit(line, newline: newline);
   }
 
   // Emits text to append to program.
   void emit(String txt, {bool newline = false}) {
-    sink.write(txt);
+    file.writeStringSync(txt);
     if (newline) {
-      sink.write('\n');
+      file.writeStringSync('\n');
     }
   }
 
   // Random seed used to generate program.
   final int seed;
 
-  // Sink used for output.
-  final IOSink sink;
+  // File used for output.
+  final RandomAccessFile file;
 
   // Program variables.
   Random rand;
@@ -896,22 +896,19 @@
   return seed;
 }
 
-// Main driver when dartfuzz.dart is run stand-alone.
+/// Main driver when dartfuzz.dart is run stand-alone.
 main(List<String> arguments) {
   final parser = new ArgParser()
     ..addOption('seed',
-        abbr: 's',
-        help: 'random seed (0 forces time-based seed)',
-        defaultsTo: '0');
+        help: 'random seed (0 forces time-based seed)', defaultsTo: '0');
   try {
     final results = parser.parse(arguments);
     final seed = getSeed(results['seed']);
-    final sink = results.rest.isEmpty
-        ? stdout
-        : new File(results.rest.single).openWrite();
-    new DartFuzz(seed, sink).run();
+    final file = new File(results.rest.single).openSync(mode: FileMode.write);
+    new DartFuzz(seed, file).run();
+    file.closeSync();
   } catch (e) {
-    print('Usage: dart dartfuzz.dart [OPTIONS] [FILENAME]');
+    print('Usage: dart dartfuzz.dart [OPTIONS] FILENAME');
     print(parser.usage);
   }
 }
diff --git a/runtime/tools/dartfuzz/dartfuzz_test.dart b/runtime/tools/dartfuzz/dartfuzz_test.dart
new file mode 100644
index 0000000..b6da502
--- /dev/null
+++ b/runtime/tools/dartfuzz/dartfuzz_test.dart
@@ -0,0 +1,321 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+import 'dart:math';
+
+import 'package:args/args.dart';
+
+import 'dartfuzz.dart';
+
+const debug = false;
+const sigkill = 9;
+const timeout = 30; // in seconds
+
+// Exit code of running a test.
+enum ResultCode { success, timeout, error }
+
+/// Result of running a test.
+class TestResult {
+  TestResult(this.code, this.output);
+  ResultCode code;
+  String output;
+}
+
+/// Command runner.
+TestResult runCommand(List<String> cmd, Map<String, String> env) {
+  // TODO: use Dart API for some of the modes?
+  ProcessResult res = Process.runSync(
+      'timeout', ['-s', '$sigkill', '$timeout'] + cmd,
+      environment: env);
+  if (debug) {
+    print('\nrunning $cmd yields:\n'
+        '${res.exitCode}\n${res.stdout}\n${res.stderr}\n');
+  }
+  if (res.exitCode == -sigkill) {
+    return new TestResult(ResultCode.timeout, res.stdout);
+  } else if (res.exitCode != 0) {
+    return new TestResult(ResultCode.error, res.stdout);
+  }
+  return new TestResult(ResultCode.success, res.stdout);
+}
+
+/// Abstraction for running one test in a particular mode.
+abstract class TestRunner {
+  String description();
+  TestResult run(String fileName);
+
+  // Factory.
+  static TestRunner getTestRunner(
+      Map<String, String> env, String top, String mode) {
+    if (mode.startsWith('jit')) return new TestRunnerJIT(env, top, mode);
+    if (mode.startsWith('aot')) return new TestRunnerAOT(env, top, mode);
+    if (mode.startsWith('js')) return new TestRunnerJS(env, top, mode);
+    throw ('unknown mode: $mode');
+  }
+
+  // Convert mode to tag.
+  static String getTag(String mode) {
+    if (mode.endsWith('debug-ia32')) return 'DebugIA32';
+    if (mode.endsWith('debug-x64')) return 'DebugX64';
+    if (mode.endsWith('debug-arm32')) return 'DebugSIMARM';
+    if (mode.endsWith('debug-arm64')) return 'DebugSIMARM64';
+    if (mode.endsWith('ia32')) return 'ReleaseIA32';
+    if (mode.endsWith('x64')) return 'ReleaseX64';
+    if (mode.endsWith('arm32')) return 'ReleaseSIMARM';
+    if (mode.endsWith('arm64')) return 'ReleaseSIMARM64';
+    throw ('unknown tag in mode: $mode');
+  }
+}
+
+/// Concrete test runner of Dart JIT.
+class TestRunnerJIT implements TestRunner {
+  TestRunnerJIT(Map<String, String> e, String top, String mode) {
+    tag = TestRunner.getTag(mode);
+    env = Map<String, String>.from(e);
+    env['PATH'] = "$top/out/$tag:${env['PATH']}";
+  }
+  String description() {
+    return "JIT-${tag}";
+  }
+
+  TestResult run(String fileName) {
+    return runCommand(['dart', fileName], env);
+  }
+
+  String tag;
+  Map<String, String> env;
+}
+
+/// Concrete test runner of Dart AOT.
+class TestRunnerAOT implements TestRunner {
+  TestRunnerAOT(Map<String, String> e, String top, String mode) {
+    tag = TestRunner.getTag(mode);
+    env = Map<String, String>.from(e);
+    env['PATH'] = "$top/pkg/vm/tool:${env['PATH']}";
+    env['DART_CONFIGURATION'] = tag;
+  }
+  String description() {
+    return "AOT-${tag}";
+  }
+
+  TestResult run(String fileName) {
+    TestResult result = runCommand(['precompiler2', fileName, 'snapshot'], env);
+    if (result.code != ResultCode.success) {
+      return result;
+    }
+    return runCommand(['dart_precompiled_runtime2', 'snapshot'], env);
+  }
+
+  String tag;
+  Map<String, String> env;
+}
+
+/// Concrete test runner of Dart2JS.
+class TestRunnerJS implements TestRunner {
+  TestRunnerJS(Map<String, String> e, String top, String mode) {
+    env = Map<String, String>.from(e);
+    env['PATH'] = "$top/out/ReleaseX64/dart-sdk/bin:${env['PATH']}";
+  }
+  String description() {
+    return "Dart2JS";
+  }
+
+  TestResult run(String fileName) {
+    TestResult result = runCommand(['dart2js', fileName], env);
+    if (result.code != ResultCode.success) {
+      return result;
+    }
+    return runCommand(['nodejs', 'out.js'], env);
+  }
+
+  Map<String, String> env;
+}
+
+/// Class to run a fuzz testing session.
+class DartFuzzTest {
+  DartFuzzTest(this.env, this.repeat, this.trueDivergence, this.showStats,
+      this.top, this.mode1, this.mode2);
+
+  bool runSession() {
+    setupSession();
+
+    print('\n**\n**** Dart Fuzz Testing\n**\n');
+    print('Fuzz Version : ${version}');
+    print('#Tests       : ${repeat}');
+    print('Exec-Mode 1  : ${runner1.description()}');
+    print('Exec-Mode 2  : ${runner2.description()}');
+    print('Dart Dev     : ${top}');
+    print('Orig Dir     : ${orgDir.path}');
+    print('Temp Dir     : ${tmpDir.path}\n');
+
+    showStatistics();
+    for (int i = 0; i < repeat; i++) {
+      numTests++;
+      seed = rand.nextInt(1 << 32);
+      generateTest();
+      runTest();
+      showStatistics();
+    }
+
+    cleanupSession();
+    if (numDivergences != 0) {
+      print('\n\nfailure\n');
+      return false;
+    }
+    print('\n\nsuccess\n');
+    return true;
+  }
+
+  void setupSession() {
+    rand = new Random();
+    orgDir = Directory.current;
+    tmpDir = Directory.systemTemp.createTempSync('dart_fuzz');
+    Directory.current = tmpDir;
+    fileName = 'fuzz.dart';
+    runner1 = TestRunner.getTestRunner(env, top, mode1);
+    runner2 = TestRunner.getTestRunner(env, top, mode2);
+    numTests = 0;
+    numSuccess = 0;
+    numNotRun = 0;
+    numTimeOut = 0;
+    numDivergences = 0;
+  }
+
+  void cleanupSession() {
+    Directory.current = orgDir;
+    tmpDir.delete(recursive: true);
+  }
+
+  void showStatistics() {
+    if (showStats) {
+      stdout.write('\rTests: $numTests Success: $numSuccess Not-Run: '
+          '$numNotRun: Time-Out: $numTimeOut Divergences: $numDivergences');
+    }
+  }
+
+  void generateTest() {
+    final file = new File(fileName).openSync(mode: FileMode.write);
+    new DartFuzz(seed, file).run();
+    file.closeSync();
+  }
+
+  void runTest() {
+    TestResult result1 = runner1.run(fileName);
+    TestResult result2 = runner2.run(fileName);
+    checkDivergence(result1, result2);
+  }
+
+  void checkDivergence(TestResult result1, TestResult result2) {
+    if (result1.code == result2.code) {
+      // No divergence in result code.
+      switch (result1.code) {
+        case ResultCode.success:
+          // Both were successful, inspect output.
+          if (result1.output == result2.output) {
+            numSuccess++;
+          } else {
+            reportDivergence(result1, result2, true);
+          }
+          break;
+        case ResultCode.timeout:
+          // Both had a time out.
+          numTimeOut++;
+          break;
+        case ResultCode.error:
+          // Both had an error.
+          numNotRun++;
+          break;
+      }
+    } else {
+      // Divergence in result code.
+      if (trueDivergence) {
+        // When only true divergences are requested, any divergence
+        // with at least one time out is treated as a regular time out.
+        if (result1.code == ResultCode.timeout ||
+            result2.code == ResultCode.timeout) {
+          numTimeOut++;
+          return;
+        }
+      }
+      reportDivergence(result1, result2, false);
+    }
+  }
+
+  void reportDivergence(
+      TestResult result1, TestResult result2, bool outputDivergence) {
+    numDivergences++;
+    print('\n\nDIVERGENCE on generated program $version:$seed\n');
+    if (outputDivergence) {
+      print('out1:\n${result1.output}\n\nout2:\n${result2.output}\n');
+    }
+  }
+
+  // Context.
+  final Map<String, String> env;
+  final int repeat;
+  final bool trueDivergence;
+  final bool showStats;
+  final String top;
+  final String mode1;
+  final String mode2;
+
+  // Session.
+  Random rand;
+  Directory orgDir;
+  Directory tmpDir;
+  String fileName;
+  TestRunner runner1;
+  TestRunner runner2;
+  int seed;
+
+  // Stats.
+  int numTests;
+  int numSuccess;
+  int numNotRun;
+  int numTimeOut;
+  int numDivergences;
+}
+
+/// Main driver for a fuzz testing session.
+main(List<String> arguments) {
+  // Set up argument parser.
+  final parser = new ArgParser()
+    ..addOption('repeat', help: 'number of tests to run', defaultsTo: '1000')
+    ..addFlag('true-divergence',
+        negatable: true, help: 'only report true divergences', defaultsTo: true)
+    ..addFlag('show-stats',
+        negatable: true, help: 'show session statistics', defaultsTo: true)
+    ..addOption('dart-top',
+        help: 'explicit value for \$DART_TOP', defaultsTo: '')
+    ..addOption('mode1', help: 'execution mode 1', defaultsTo: 'jit-x64')
+    ..addOption('mode2', help: 'execution mode 2', defaultsTo: 'aot-x64');
+
+  // Start fuzz testing session.
+  try {
+    final env = Platform.environment;
+    final results = parser.parse(arguments);
+    final repeat = int.parse(results['repeat']);
+    final trueDivergence = results['true-divergence'];
+    final showStats = results['show-stats'];
+    final mode1 = results['mode1'];
+    final mode2 = results['mode2'];
+    var top = results['dart-top'];
+    if (top == null || top == '') {
+      top = env['DART_TOP'];
+    }
+    if (top == null || top == '') {
+      top = Directory.current.path;
+    }
+    final session = new DartFuzzTest(
+        env, repeat, trueDivergence, showStats, top, mode1, mode2);
+    if (!session.runSession()) {
+      exitCode = 1;
+    }
+  } catch (e) {
+    print('Usage: dart dartfuzz_test.dart [OPTIONS]\n${parser.usage}\n$e');
+    exitCode = 255;
+  }
+}
diff --git a/runtime/tools/dartfuzz/run_dartfuzz_test.py b/runtime/tools/dartfuzz/run_dartfuzz_test.py
deleted file mode 100755
index 8d33b49..0000000
--- a/runtime/tools/dartfuzz/run_dartfuzz_test.py
+++ /dev/null
@@ -1,423 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code == governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import abc
-import argparse
-import os
-import shutil
-import signal
-import subprocess
-import sys
-
-from enum import Enum
-from enum import unique
-
-from subprocess import DEVNULL
-from subprocess import PIPE
-from subprocess import Popen
-from subprocess import STDOUT
-from subprocess import TimeoutExpired
-
-from tempfile import mkdtemp
-
-#
-# Helper methods to run commands.
-#
-
-@unique
-class RetCode(Enum):
-  """Enum representing return codes."""
-  SUCCESS = 0
-  TIMEOUT = 1
-  ERROR = 2
-
-class FatalError(Exception):
-  """Fatal error in script."""
-
-def RunCommandWithOutput(cmd, env, stdout, stderr, timeout=30):
-  """Runs command piping output to files, stderr, or stdout.
-
-  Args:
-    cmd: list of strings, command to run.
-    env: shell environment for command.
-    stdout: file handle for stdout.
-    stderr: file handle for stderr.
-    timeout: int, timeout in seconds.
-
-  Returns:
-    tuple (string, string, RetCode) out, err, return code.
-  """
-  proc = Popen(cmd, stdout=stdout, stderr=stderr, env=env,
-               universal_newlines=True, start_new_session=True)
-  try:
-    (out, err) = proc.communicate(timeout=timeout)
-    if proc.returncode == 0:
-      retcode = RetCode.SUCCESS
-    else:
-      retcode = RetCode.ERROR
-  except TimeoutExpired:
-    os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
-    (out, err) = proc.communicate()
-    retcode = RetCode.TIMEOUT
-  return (out, err, retcode)
-
-def RunCommand(cmd, out=None, err=None, timeout=30):
-  """Executes a command, and returns its return code.
-
-  Args:
-    cmd: list of strings, a command to execute.
-    out: string, file name to open for stdout (or None).
-    err: string, file name to open for stderr (or None).
-    timeout: int, time out in seconds.
-  Returns:
-    RetCode, return code of running command.
-  """
-  if out is not None:
-    outf = open(out, mode='w')
-  else:
-    outf = DEVNULL
-  if err is not None:
-    errf = open(err, mode='w')
-  else:
-    errf = DEVNULL
-  (_, _, retcode) = RunCommandWithOutput(cmd, None, outf, errf, timeout)
-  if outf != DEVNULL:
-    outf.close()
-  if errf != DEVNULL:
-    errf.close()
-  return retcode
-
-#
-# Execution modes.
-#
-
-class TestRunner(object):
-  """Abstraction for running a test in a particular execution mode."""
-  __meta_class__ = abc.ABCMeta
-
-  @abc.abstractproperty
-  def description(self):
-    """Returns a description string of the execution mode."""
-
-  @abc.abstractmethod
-  def RunTest(self):
-    """Run the generated test.
-
-    Ensures that the current fuzz.dart in the temporary directory is executed
-    under the current execution mode.
-
-    Most nonzero return codes are assumed non-divergent, since systems may
-    exit in different ways. This is enforced by normalizing return codes.
-
-    Returns:
-      tuple (string, string, RetCode) stdout-output, stderr-output, return code.
-    """
-
-class TestRunnerDartJIT(TestRunner):
-  """Concrete test runner of Dart JIT."""
-
-  def  __init__(self, mode):
-    self._mode = mode
-    if mode == 'jit-ia32':
-      self.AddPathAndTimeout('ReleaseIA32')
-    elif mode == 'jit-x64':
-      self.AddPathAndTimeout('ReleaseX64')
-    elif mode == 'jit-arm32':
-      self.AddPathAndTimeout('ReleaseSIMARM')
-    elif mode == 'jit-arm64':
-      self.AddPathAndTimeout('ReleaseSIMARM64')
-    else:
-      raise FatalError('Unknown JIT execution mode: ' + mode)
-
-  @property
-  def description(self):
-    return 'Dart ' + self._mode
-
-  def AddPathAndTimeout(self, tag, timeout=30):
-    self._env = os.environ.copy()
-    self._env['PATH'] = self._env['DART_TOP'] + '/out/' + tag + ':' + self._env['PATH']
-    self._timeout = timeout
-
-  def RunTest(self):
-    return RunCommandWithOutput(
-        ['dart', 'fuzz.dart'], self._env, PIPE, STDOUT, self._timeout)
-
-class TestRunnerDartAOT(TestRunner):
-  """Concrete test runner of Dart AOT."""
-
-  def  __init__(self, mode):
-    self._mode = mode
-    if mode == 'aot-x64':
-      self.AddPathConfigAndTimeout('ReleaseX64')
-    elif mode == 'aot-arm64':
-      self.AddPathConfigAndTimeout('ReleaseSIMARM64', 30 * 60)
-    else:
-      raise FatalError('Unknown AOT execution mode: ' + mode)
-
-  @property
-  def description(self):
-    return 'Dart ' + self._mode
-
-  def AddPathConfigAndTimeout(self, tag, timeout=30):
-    self._env = os.environ.copy()
-    self._env['PATH'] = self._env['DART_TOP'] + '/pkg/vm/tool:' + self._env['PATH']
-    self._env['DART_CONFIGURATION'] = tag
-    self._timeout = timeout
-
-  def RunTest(self):
-    (out, err, retcode) = RunCommandWithOutput(
-        ['precompiler2', 'fuzz.dart', 'snap'],
-        self._env, PIPE, STDOUT, self._timeout)
-    if retcode != RetCode.SUCCESS:
-      return (out, err, retcode)
-    return RunCommandWithOutput(
-        ['dart_precompiled_runtime2', 'snap'],
-        self._env, PIPE, STDOUT, self._timeout)
-
-class TestRunnerDart2JS(TestRunner):
-  """Concrete test runner of Dart through dart2js and JS."""
-
-  def  __init__(self):
-    self.AddPath()
-
-  @property
-  def description(self):
-    return 'Dart as JS'
-
-  def AddPath(self):
-    self._env = os.environ.copy()
-    self._env['PATH'] = self._env['DART_TOP'] + '/ReleaseX64/dart-sdk/bin:' + self._env['PATH']
-
-  def RunTest(self):
-    (out, err, retcode) = RunCommandWithOutput(
-        ['dart2js', 'fuzz.dart'], self._env, PIPE, STDOUT)
-    if retcode != RetCode.SUCCESS:
-      return (out, err, retcode)
-    return RunCommandWithOutput(
-        ['nodejs', 'out.js'], self._env, PIPE, STDOUT)
-
-def GetExecutionModeRunner(mode):
-  """Returns a runner for the given execution mode.
-
-  Args:
-    mode: string, execution mode
-  Returns:
-    TestRunner with given execution mode
-  Raises:
-    FatalError: error for unknown execution mode
-  """
-  if mode.startswith('jit'):
-    return TestRunnerDartJIT(mode)
-  if mode.startswith('aot'):
-    return TestRunnerDartAOT(mode)
-  if mode == 'js':
-    return TestRunnerDart2JS()
-  raise FatalError('Unknown execution mode: ' + mode)
-
-#
-# DartFuzzTester class.
-#
-
-class DartFuzzTester(object):
-  """Tester that runs DartFuzz many times and report divergences."""
-
-  def  __init__(self, repeat, true_divergence, mode1, mode2):
-    """Constructor for the tester.
-
-    Args:
-      repeat: int, number of tests to run.
-      true_divergence: boolean, report true divergences only.
-      mode1: string, execution mode for first runner.
-      mode2: string, execution mode for second runner.
-    """
-    self._repeat = repeat
-    self._true_divergence = true_divergence
-    self._runner1 = GetExecutionModeRunner(mode1)
-    self._runner2 = GetExecutionModeRunner(mode2)
-
-  def __enter__(self):
-    """On entry, enters new temp directory after saving current directory.
-
-    Raises:
-      FatalError: error when temp directory cannot be constructed.
-    """
-    self._save_dir = os.getcwd()
-    self._tmp_dir = mkdtemp(dir='/tmp/')
-    if self._tmp_dir == None:
-      raise FatalError('Cannot obtain temp directory')
-    os.chdir(self._tmp_dir)
-    return self
-
-  def __exit__(self, etype, evalue, etraceback):
-    """On exit, re-enters previously saved current directory and cleans up."""
-    os.chdir(self._save_dir)
-    if self._num_divergences == 0:
-      shutil.rmtree(self._tmp_dir)
-      print('\n\nsuccess (no divergences)\n')
-    else:
-      print('\n\nfailure (divergences):', self._tmp_dir, '\n')
-
-  def Run(self):
-    """Runs DartFuzz many times and report divergences."""
-    self.Setup()
-    print()
-    print('**\n**** Dart Fuzz Testing\n**')
-    print()
-    print('#Tests      :', self._repeat)
-    print('Exec-Mode 1 :', self._runner1.description)
-    print('Exec-Mode 2 :', self._runner2.description)
-    print('Dart Dev    :', os.environ.get('DART_TOP'))
-    print('Orig Dir    :', self._save_dir)
-    print('Temp Dir    :', self._tmp_dir)
-    print()
-    self.ShowStats()  # show all zeros on start
-    for self._test in range(1, self._repeat + 1):
-      self.RunTest()
-      self.ShowStats()
-
-  def Setup(self):
-    """Initial setup of the testing environment."""
-    # Fuzzer command.
-    self._dartfuzz = self._save_dir + '/dartfuzz.dart'
-    # Statistics.
-    self._test = 0
-    self._num_success = 0
-    self._num_not_run = 0
-    self._num_timed_out = 0
-    self._num_divergences = 0
-
-  def ShowStats(self):
-    """Shows current statistics (on same line) while tester is running."""
-    print('\rTests:', self._test,
-          'Success:', self._num_success,
-          'Not-run:', self._num_not_run,
-          'Timed-out:', self._num_timed_out,
-          'Divergences:', self._num_divergences,
-          end='')
-    sys.stdout.flush()
-
-  def RunTest(self):
-    """Runs a single fuzz test, comparing two execution modes."""
-    self.ConstructTest()
-    (out1, _, retcode1) = self._runner1.RunTest()
-    (out2, _, retcode2) = self._runner2.RunTest()
-    self.CheckForDivergence(out1, retcode1, out2, retcode2)
-    self.CleanupTest()
-
-  def ConstructTest(self):
-    """Use DartFuzz to generate next fuzz.dart test.
-
-    Raises:
-      FatalError: error when DartFuzz fails.
-    """
-    # Invoke dartfuzz script on command line rather than calling py code.
-    if (RunCommand(['dart', self._dartfuzz], out='fuzz.dart') != RetCode.SUCCESS):
-      raise FatalError('Unexpected error while running DartFuzz')
-
-  def CheckForDivergence(self, out1, retcode1, out2, retcode2):
-    """Checks for divergences and updates statistics.
-
-    Args:
-      out1: string, output for first runner.
-      retcode1: int, normalized return code of first runner.
-      out2: string, output for second runner.
-      retcode2: int, normalized return code of second runner.
-    """
-    if retcode1 == retcode2:
-      # No divergence in return code.
-      if retcode1 == RetCode.SUCCESS:
-        # Both compilations and runs were successful, inspect generated output.
-        if out1 == out2:
-          # No divergence in output.
-          self._num_success += 1
-        else:
-          # Divergence in output.
-          self.ReportDivergence(out1, retcode1, out2, retcode2, True)
-      elif retcode1 == RetCode.ERROR:
-        # Both did not run.
-        self._num_not_run += 1
-      elif retcode1 == RetCode.TIMEOUT:
-        # Both timed out.
-        self._num_timed_out += 1
-      else:
-       raise FatalError('Unknown return code')
-    else:
-      # Divergence in return code.
-      if self._true_divergence:
-        # When only true divergences are requested, any divergence in return
-        # code where one is a time out is treated as a regular time out.
-        if RetCode.TIMEOUT in (retcode1, retcode2):
-          self._num_timed_out += 1
-          return
-      self.ReportDivergence(out1, retcode1, out2, retcode2, False)
-
-  def ReportDivergence(self, out1, retcode1, out2, retcode2, is_output_divergence):
-    """Reports and saves a divergence.
-
-    Args:
-      out1: string, output for first runner.
-      retcode1: int, normalized return code of first runner.
-      out2: string, output for second runner.
-      retcode2: int, normalized return code of second runner.
-      is_output_divergence, boolean, denotes output divergence.
-      """
-    self._num_divergences += 1
-    print('\n#' + str(self._num_divergences), end='')
-    if is_output_divergence:
-      print(' divergence in output')
-    else:
-      print(' divergence in return code: '
-            + retcode1.name + ' vs. ' + retcode2.name)
-    print('->')
-    print(out1, end='')
-    print('<-')
-    print(out2, end='')
-    print('--')
-    # Save.
-    ddir = self._tmp_dir + '/divergence' + str(self._num_divergences)
-    os.mkdir(ddir)
-    shutil.copy('fuzz.dart', ddir)
-    # TODO: file bug report
-
-  def CleanupTest(self):
-    """Cleans up after a single test run."""
-    for file_name in os.listdir(self._tmp_dir):
-      file_path = os.path.join(self._tmp_dir, file_name)
-      if os.path.isfile(file_path):
-        os.unlink(file_path)
-      elif os.path.isdir(file_path):
-        pass  # keep the divergences directories
-
-#
-# Main driver.
-#
-
-def main():
-  # Handle arguments.
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--repeat', default=1000, type=int,
-                      help='number of tests to run (default: 1000)')
-  parser.add_argument('--true_divergence', default=False, action='store_true',
-                      help='only report true divergences')
-  parser.add_argument('--mode1', default='jit-x64',
-                      help='execution mode 1 (default: jit-x64)')
-  parser.add_argument('--mode2', default='aot-x64',
-                      help='execution mode 2 (default: aot-x64)')
-  args = parser.parse_args()
-
-  # Verify DART_TOP.
-  if os.environ.get('DART_TOP') == None:
-    raise FatalError('DART_TOP needs to point to the Dart SDK tree')
-
-  # Run DartFuzz tester.
-  with DartFuzzTester(args.repeat,
-                      args.true_divergence,
-                      args.mode1,
-                      args.mode2) as fuzzer:
-    fuzzer.Run()
-
-if __name__ == '__main__':
-  main()
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 3d5bf6f..e699f47 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -8,6 +8,7 @@
 #include "bin/file.h"
 #include "bin/isolate_data.h"
 #include "bin/process.h"
+#include "bin/reference_counting.h"
 
 #include "platform/assert.h"
 #include "platform/globals.h"
@@ -179,6 +180,100 @@
 
 #endif  // !PRODUCT
 
+// This file is created by the target //runtime/bin:gen_kernel_bytecode_dill
+// which is depended on by run_vm_tests.
+static char* ComputeGenKernelKernelPath(const char* arg) {
+  char buffer[2048];
+  char* gen_kernel_path = strdup(File::GetCanonicalPath(NULL, arg));
+  EXPECT(gen_kernel_path != NULL);
+  const char* compiler_path = "%s%sgen_kernel_bytecode.dill";
+  const char* path_separator = File::PathSeparator();
+  ASSERT(path_separator != NULL && strlen(path_separator) == 1);
+  char* ptr = strrchr(gen_kernel_path, *path_separator);
+  while (ptr != NULL) {
+    *ptr = '\0';
+    Utils::SNPrint(buffer, ARRAY_SIZE(buffer), compiler_path, gen_kernel_path,
+                   path_separator);
+    if (File::Exists(NULL, buffer)) {
+      break;
+    }
+    ptr = strrchr(gen_kernel_path, *path_separator);
+  }
+  free(gen_kernel_path);
+  if (ptr == NULL) {
+    return NULL;
+  }
+  return strdup(buffer);
+}
+
+BENCHMARK(GenKernelKernelLoadKernel) {
+  char* dill_path = ComputeGenKernelKernelPath(Benchmark::Executable());
+  File* file = File::Open(NULL, dill_path, File::kRead);
+  EXPECT(file != NULL);
+  bin::RefCntReleaseScope<File> rs(file);
+  intptr_t kernel_buffer_size = file->Length();
+  uint8_t* kernel_buffer =
+      reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
+  EXPECT(kernel_buffer != NULL);
+  bool read_fully = file->ReadFully(kernel_buffer, kernel_buffer_size);
+  EXPECT(read_fully);
+
+  Timer timer(true, "GenKernelKernelLoadKernel benchmark");
+  timer.Start();
+
+  Dart_Handle result =
+      Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
+  EXPECT_VALID(result);
+
+  result = Dart_FinalizeLoading(false);
+  EXPECT_VALID(result);
+
+  timer.Stop();
+  int64_t elapsed_time = timer.TotalElapsedTime();
+  benchmark->set_score(elapsed_time);
+  free(dill_path);
+  free(kernel_buffer);
+}
+
+BENCHMARK(GenKernelKernelReadAllBytecode) {
+  bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
+  bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
+  bin::Builtin::SetNativeResolver(bin::Builtin::kCLILibrary);
+  char* dill_path = ComputeGenKernelKernelPath(Benchmark::Executable());
+  File* file = File::Open(NULL, dill_path, File::kRead);
+  EXPECT(file != NULL);
+  bin::RefCntReleaseScope<File> rs(file);
+  intptr_t kernel_buffer_size = file->Length();
+  uint8_t* kernel_buffer =
+      reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
+  EXPECT(kernel_buffer != NULL);
+  bool read_fully = file->ReadFully(kernel_buffer, kernel_buffer_size);
+  EXPECT(read_fully);
+
+  bool enable_interpreter_orig = FLAG_enable_interpreter;
+  FLAG_enable_interpreter = true;
+
+  Dart_Handle result =
+      Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
+  EXPECT_VALID(result);
+
+  result = Dart_FinalizeLoading(false);
+  EXPECT_VALID(result);
+
+  Timer timer(true, "GenKernelKernelLoadKernel benchmark");
+  timer.Start();
+
+  result = Dart_ReadAllBytecode();
+  EXPECT_VALID(result);
+
+  timer.Stop();
+  int64_t elapsed_time = timer.TotalElapsedTime();
+  benchmark->set_score(elapsed_time);
+  FLAG_enable_interpreter = enable_interpreter_orig;
+  free(dill_path);
+  free(kernel_buffer);
+}
+
 //
 // Measure creation of core isolate from a snapshot.
 //
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index f0434a3..21ea84d 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -126,6 +126,14 @@
     if (top_ == capacity_) {
       // Grow the capacity of the class table.
       // TODO(koda): Add ClassTable::Grow to share code.
+
+#ifndef PRODUCT
+      // Wait for any marking tasks to complete. Allocation stats in the
+      // marker rely on the class table size not changing.
+      Thread* thread = Thread::Current();
+      thread->heap()->WaitForMarkerTasks(thread);
+#endif
+
       intptr_t new_capacity = capacity_ + capacity_increment_;
       ClassAndSize* new_table = reinterpret_cast<ClassAndSize*>(
           malloc(new_capacity * sizeof(ClassAndSize)));  // NOLINT
@@ -159,6 +167,14 @@
   if (index >= capacity_) {
     // Grow the capacity of the class table.
     // TODO(koda): Add ClassTable::Grow to share code.
+
+#ifndef PRODUCT
+    // Wait for any marking tasks to complete. Allocation stats in the
+    // marker rely on the class table size not changing.
+    Thread* thread = Thread::Current();
+    thread->heap()->WaitForMarkerTasks(thread);
+#endif
+
     intptr_t new_capacity = index + capacity_increment_;
     if (!Class::is_valid_id(index) || new_capacity < capacity_) {
       FATAL1("Fatal error in ClassTable::Register: invalid index %" Pd "\n",
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 560e686..b87d242 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -214,6 +214,7 @@
   }
 
   intptr_t NumCids() const { return top_; }
+  intptr_t Capacity() const { return capacity_; }
 
   // Used to drop recently added classes.
   void SetNumCids(intptr_t num_cids) {
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 84bc363..ba822e0 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -1675,15 +1675,12 @@
       s->Push(code->ptr()->inlined_id_to_function_);
       s->Push(code->ptr()->code_source_map_);
     }
-    if (s->kind() != Snapshot::kFullAOT) {
-      s->Push(code->ptr()->await_token_positions_);
-    }
-
     if (s->kind() == Snapshot::kFullJIT) {
       s->Push(code->ptr()->deopt_info_array_);
       s->Push(code->ptr()->static_calls_target_table_);
-      NOT_IN_PRODUCT(s->Push(code->ptr()->return_address_metadata_));
     }
+    NOT_IN_PRODUCT(s->Push(code->ptr()->await_token_positions_));
+    NOT_IN_PRODUCT(s->Push(code->ptr()->return_address_metadata_));
   }
 
   void WriteAlloc(Serializer* s) {
@@ -1739,14 +1736,12 @@
         s->WriteRef(code->ptr()->inlined_id_to_function_);
         s->WriteRef(code->ptr()->code_source_map_);
       }
-      if (s->kind() != Snapshot::kFullAOT) {
-        s->WriteRef(code->ptr()->await_token_positions_);
-      }
       if (s->kind() == Snapshot::kFullJIT) {
         s->WriteRef(code->ptr()->deopt_info_array_);
         s->WriteRef(code->ptr()->static_calls_target_table_);
-        NOT_IN_PRODUCT(s->WriteRef(code->ptr()->return_address_metadata_));
       }
+      NOT_IN_PRODUCT(s->WriteRef(code->ptr()->await_token_positions_));
+      NOT_IN_PRODUCT(s->WriteRef(code->ptr()->return_address_metadata_));
 
       s->Write<int32_t>(code->ptr()->state_bits_);
     }
@@ -1823,30 +1818,22 @@
           reinterpret_cast<RawCodeSourceMap*>(d->ReadRef());
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      code->ptr()->await_token_positions_ =
-          reinterpret_cast<RawArray*>(d->ReadRef());
-
       if (d->kind() == Snapshot::kFullJIT) {
         code->ptr()->deopt_info_array_ =
             reinterpret_cast<RawArray*>(d->ReadRef());
         code->ptr()->static_calls_target_table_ =
             reinterpret_cast<RawArray*>(d->ReadRef());
-#if defined(PRODUCT)
-        code->ptr()->return_address_metadata_ = Object::null();
-#else
-        code->ptr()->return_address_metadata_ = d->ReadRef();
-#endif
-      } else {
-        code->ptr()->deopt_info_array_ = Array::null();
-        code->ptr()->static_calls_target_table_ = Array::null();
-        code->ptr()->return_address_metadata_ = Object::null();
       }
+#endif  // !DART_PRECOMPILED_RUNTIME
 
+#if !defined(PRODUCT)
+      code->ptr()->await_token_positions_ =
+          reinterpret_cast<RawArray*>(d->ReadRef());
+      code->ptr()->return_address_metadata_ = d->ReadRef();
       code->ptr()->var_descriptors_ = LocalVarDescriptors::null();
       code->ptr()->comments_ = Array::null();
-
       code->ptr()->compile_timestamp_ = 0;
-#endif  // !DART_PRECOMPILED_RUNTIME
+#endif
 
       code->ptr()->state_bits_ = d->Read<int32_t>();
     }
diff --git a/runtime/vm/code_patcher.cc b/runtime/vm/code_patcher.cc
index ca7cd0e..dfa7d1e 100644
--- a/runtime/vm/code_patcher.cc
+++ b/runtime/vm/code_patcher.cc
@@ -10,7 +10,7 @@
 
 namespace dart {
 
-DEFINE_FLAG(bool, write_protect_code, true, "Write protect jitted code");
+DEFINE_FLAG(bool, write_protect_code, false, "Write protect jitted code");
 
 WritableInstructionsScope::WritableInstructionsScope(uword address,
                                                      intptr_t size)
diff --git a/runtime/vm/compilation_trace.cc b/runtime/vm/compilation_trace.cc
index 22be20e..3d978a3 100644
--- a/runtime/vm/compilation_trace.cc
+++ b/runtime/vm/compilation_trace.cc
@@ -4,6 +4,8 @@
 
 #include "vm/compilation_trace.h"
 
+#include "vm/globals.h"
+#include "vm/log.h"
 #include "vm/longjump.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
@@ -11,6 +13,10 @@
 
 namespace dart {
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+DEFINE_FLAG(bool, trace_compilation_trace, false, "Trace compilation trace.");
+
 CompilationTraceSaver::CompilationTraceSaver(Zone* zone)
     : buf_(zone, 4 * KB),
       func_name_(String::Handle(zone)),
@@ -152,17 +158,27 @@
   if (function_name_.Equals("_getMainClosure")) {
     // The scheme for invoking main relies on compiling _getMainClosure after
     // synthetically importing the root library.
+    if (FLAG_trace_compilation_trace) {
+      THR_Print("Compilation trace: skip %s,%s,%s\n", uri_.ToCString(),
+                class_name_.ToCString(), function_name_.ToCString());
+    }
     return Object::null();
   }
 
   lib_ = Library::LookupLibrary(thread_, uri_);
   if (lib_.IsNull()) {
     // Missing library.
+    if (FLAG_trace_compilation_trace) {
+      THR_Print("Compilation trace: missing library %s,%s,%s\n",
+                uri_.ToCString(), class_name_.ToCString(),
+                function_name_.ToCString());
+    }
     return Object::null();
   }
 
   bool is_getter = Field::IsGetterName(function_name_);
   bool add_closure = false;
+  bool processed = false;
 
   if (class_name_.Equals(Symbols::TopLevel())) {
     function_ = lib_.LookupFunctionAllowPrivate(function_name_);
@@ -178,11 +194,23 @@
     cls_ = lib_.SlowLookupClassAllowMultiPartPrivate(class_name_);
     if (cls_.IsNull()) {
       // Missing class.
+      if (FLAG_trace_compilation_trace) {
+        THR_Print("Compilation trace: missing class %s,%s,%s\n",
+                  uri_.ToCString(), class_name_.ToCString(),
+                  function_name_.ToCString());
+      }
       return Object::null();
     }
 
     error_ = cls_.EnsureIsFinalized(thread_);
     if (error_.IsError()) {
+      // Non-finalized class.
+      if (FLAG_trace_compilation_trace) {
+        THR_Print("Compilation trace: non-finalized class %s,%s,%s (%s)\n",
+                  uri_.ToCString(), class_name_.ToCString(),
+                  function_name_.ToCString(),
+                  Error::Cast(error_).ToErrorCString());
+      }
       return error_.raw();
     }
 
@@ -201,6 +229,14 @@
         if (!function2_.IsNull()) {
           error_ = CompileFunction(function2_);
           if (error_.IsError()) {
+            if (FLAG_trace_compilation_trace) {
+              THR_Print(
+                  "Compilation trace: error compiling extractor %s for "
+                  "%s,%s,%s (%s)\n",
+                  function2_.ToCString(), uri_.ToCString(),
+                  class_name_.ToCString(), function_name_.ToCString(),
+                  Error::Cast(error_).ToErrorCString());
+            }
             return error_.raw();
           }
         }
@@ -210,26 +246,53 @@
 
   if (!field_.IsNull() && field_.is_const() && field_.is_static() &&
       (field_.StaticValue() == Object::sentinel().raw())) {
+    processed = true;
     error_ = EvaluateInitializer(field_);
     if (error_.IsError()) {
+      if (FLAG_trace_compilation_trace) {
+        THR_Print(
+            "Compilation trace: error initializing field %s for %s,%s,%s "
+            "(%s)\n",
+            field_.ToCString(), uri_.ToCString(), class_name_.ToCString(),
+            function_name_.ToCString(), Error::Cast(error_).ToErrorCString());
+      }
       return error_.raw();
     }
   }
 
   if (!function_.IsNull()) {
+    processed = true;
     error_ = CompileFunction(function_);
     if (error_.IsError()) {
+      if (FLAG_trace_compilation_trace) {
+        THR_Print("Compilation trace: error compiling %s,%s,%s (%s)\n",
+                  uri_.ToCString(), class_name_.ToCString(),
+                  function_name_.ToCString(),
+                  Error::Cast(error_).ToErrorCString());
+      }
       return error_.raw();
     }
     if (add_closure) {
       function_ = function_.ImplicitClosureFunction();
       error_ = CompileFunction(function_);
       if (error_.IsError()) {
+        if (FLAG_trace_compilation_trace) {
+          THR_Print(
+              "Compilation trace: error compiling closure %s,%s,%s (%s)\n",
+              uri_.ToCString(), class_name_.ToCString(),
+              function_name_.ToCString(), Error::Cast(error_).ToErrorCString());
+        }
         return error_.raw();
       }
     }
   }
 
+  if (FLAG_trace_compilation_trace) {
+    if (!processed) {
+      THR_Print("Compilation trace: ignored %s,%s,%s\n", uri_.ToCString(),
+                class_name_.ToCString(), function_name_.ToCString());
+    }
+  }
   return Object::null();
 }
 
@@ -253,4 +316,6 @@
   return Object::null();
 }
 
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
 }  // namespace dart
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 5395c71..3607520 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -30,7 +30,6 @@
 #include "vm/flags.h"
 #include "vm/hash_table.h"
 #include "vm/isolate.h"
-#include "vm/json_writer.h"
 #include "vm/kernel_loader.h"  // For kernel::ParseStaticFieldInitializer.
 #include "vm/log.h"
 #include "vm/longjump.h"
@@ -93,11 +92,17 @@
  public:
   explicit DartPrecompilationPipeline(Zone* zone,
                                       FieldTypeMap* field_map = NULL)
-      : zone_(zone), result_type_(CompileType::None()), field_map_(field_map) {}
+      : zone_(zone),
+        result_type_(CompileType::None()),
+        field_map_(field_map),
+        class_(Class::Handle(zone)),
+        fields_(Array::Handle(zone)),
+        field_(Field::Handle(zone)) {}
 
   virtual void FinalizeCompilation(FlowGraph* flow_graph) {
     if ((field_map_ != NULL) &&
         flow_graph->function().IsGenerativeConstructor()) {
+      const Function& constructor = flow_graph->function();
       for (BlockIterator block_it = flow_graph->reverse_postorder_iterator();
            !block_it.Done(); block_it.Advance()) {
         ForwardInstructionIterator it(block_it.Current());
@@ -112,36 +117,34 @@
                           store->value()->Type()->ToCString());
               }
 #endif  // !PRODUCT
-              FieldTypePair* entry = field_map_->Lookup(&store->field());
-              if (entry == NULL) {
-                field_map_->Insert(FieldTypePair(
-                    &Field::Handle(zone_, store->field().raw()),  // Re-wrap.
-                    store->value()->Type()->ToCid()));
-#ifndef PRODUCT
-                if (FLAG_trace_precompiler && FLAG_support_il_printer) {
-                  THR_Print(" initial type = %s\n",
-                            store->value()->Type()->ToCString());
-                }
-#endif  // !PRODUCT
-                continue;
-              }
-              CompileType type = CompileType::FromCid(entry->cid_);
-#ifndef PRODUCT
-              if (FLAG_trace_precompiler && FLAG_support_il_printer) {
-                THR_Print(" old type = %s\n", type.ToCString());
-              }
-#endif  // !PRODUCT
-              type.Union(store->value()->Type());
-#ifndef PRODUCT
-              if (FLAG_trace_precompiler && FLAG_support_il_printer) {
-                THR_Print(" new type = %s\n", type.ToCString());
-              }
-#endif  // !PRODUCT
-              entry->cid_ = type.ToCid();
+              RecordFieldStore(constructor, store->field(),
+                               store->value()->Type());
             }
           }
         }
       }
+
+      // Final fields which were not initialized in this constructor are
+      // implicitly initialized with null.
+      class_ = flow_graph->function().Owner();
+      fields_ = class_.fields();
+      for (intptr_t i = 0; i < fields_.Length(); ++i) {
+        field_ ^= fields_.At(i);
+        if (!field_.is_static() && field_.is_final()) {
+          FieldTypePair* entry = field_map_->Lookup(&field_);
+          if ((entry == nullptr) ||
+              (entry->field_info.constructor != constructor.raw())) {
+#ifndef PRODUCT
+              if (FLAG_trace_precompiler && FLAG_support_il_printer) {
+                THR_Print("Implicit initialization %s <- null\n",
+                          field_.ToCString());
+              }
+#endif  // !PRODUCT
+              CompileType null_type = CompileType::Null();
+              RecordFieldStore(constructor, field_, &null_type);
+          }
+        }
+      }
     }
 
     CompileType result_type = CompileType::None();
@@ -158,12 +161,46 @@
     result_type_ = result_type;
   }
 
+  void RecordFieldStore(const Function& constructor,
+                        const Field& field,
+                        CompileType* value_type) {
+    FieldTypePair* entry = field_map_->Lookup(&field);
+    if (entry == NULL) {
+      field_map_->Insert(
+          FieldTypePair(&Field::Handle(zone_, field.raw()),  // Re-wrap.
+                        value_type->ToCid(), constructor.raw()));
+#ifndef PRODUCT
+      if (FLAG_trace_precompiler && FLAG_support_il_printer) {
+        THR_Print(" initial type = %s\n", value_type->ToCString());
+      }
+#endif  // !PRODUCT
+      return;
+    }
+    CompileType type = CompileType::FromCid(entry->field_info.cid);
+#ifndef PRODUCT
+    if (FLAG_trace_precompiler && FLAG_support_il_printer) {
+      THR_Print(" old type = %s\n", type.ToCString());
+    }
+#endif  // !PRODUCT
+    type.Union(value_type);
+#ifndef PRODUCT
+    if (FLAG_trace_precompiler && FLAG_support_il_printer) {
+      THR_Print(" new type = %s\n", type.ToCString());
+    }
+#endif  // !PRODUCT
+    entry->field_info.cid = type.ToCid();
+    entry->field_info.constructor = constructor.raw();
+  }
+
   CompileType result_type() { return result_type_; }
 
  private:
   Zone* zone_;
   CompileType result_type_;
   FieldTypeMap* field_map_;
+  Class& class_;
+  Array& fields_;
+  Field& field_;
 };
 
 class PrecompileParsedFunctionHelper : public ValueObject {
@@ -214,12 +251,11 @@
   }
 }
 
-RawError* Precompiler::CompileAll(
-    Dart_QualifiedFunctionName embedder_entry_points[]) {
+RawError* Precompiler::CompileAll() {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     Precompiler precompiler(Thread::Current());
-    precompiler.DoCompileAll(embedder_entry_points);
+    precompiler.DoCompileAll();
     return Error::null();
   } else {
     Thread* thread = Thread::Current();
@@ -259,8 +295,7 @@
       error_(Error::Handle()),
       get_runtime_type_is_unique_(false) {}
 
-void Precompiler::DoCompileAll(
-    Dart_QualifiedFunctionName embedder_entry_points[]) {
+void Precompiler::DoCompileAll() {
   ASSERT(I->compilation_allowed());
 
   {
@@ -315,7 +350,7 @@
         CollectDynamicFunctionNames();
 
         // Start with the allocations and invocations that happen from C++.
-        AddRoots(embedder_entry_points);
+        AddRoots();
         AddAnnotatedRoots();
 
         // Compile newly found targets and add their callees until we reach a
@@ -481,187 +516,21 @@
   FieldTypeMap::Iterator it(field_type_map_.GetIterator());
   for (FieldTypePair* current = it.Next(); current != NULL;
        current = it.Next()) {
-    const intptr_t cid = current->cid_;
-    current->field_->set_guarded_cid(cid);
-    current->field_->set_is_nullable(cid == kNullCid || cid == kDynamicCid);
+    const intptr_t cid = current->field_info.cid;
+    current->field->set_guarded_cid(cid);
+    current->field->set_is_nullable(cid == kNullCid || cid == kDynamicCid);
     // TODO(vegorov) we can actually compute the length in the same way we
     // compute cids.
-    current->field_->set_guarded_list_length(Field::kNoFixedLength);
+    current->field->set_guarded_list_length(Field::kNoFixedLength);
     if (FLAG_trace_precompiler) {
       THR_Print(
-          "Field %s <- Type %s\n", current->field_->ToCString(),
+          "Field %s <- Type %s\n", current->field->ToCString(),
           Class::Handle(T->isolate()->class_table()->At(cid)).ToCString());
     }
   }
 }
 
-static Dart_QualifiedFunctionName vm_entry_points[] = {
-    // Fields
-    {NULL, NULL, NULL}  // Must be terminated with NULL entries.
-};
-
-class PrecompilerEntryPointsPrinter : public ValueObject {
- public:
-  explicit PrecompilerEntryPointsPrinter(Zone* zone);
-
-  void AddInstantiatedClass(const Class& cls);
-  void AddEntryPoint(const Object& entry_point);
-
-  void Print();
-
- private:
-  Zone* zone() const { return zone_; }
-
-  void DescribeClass(JSONWriter* writer, const Class& cls);
-
-  Zone* zone_;
-  const GrowableObjectArray& instantiated_classes_;
-  const GrowableObjectArray& entry_points_;
-};
-
-PrecompilerEntryPointsPrinter::PrecompilerEntryPointsPrinter(Zone* zone)
-    : zone_(zone),
-      instantiated_classes_(GrowableObjectArray::Handle(
-          zone,
-          FLAG_print_precompiler_entry_points ? GrowableObjectArray::New()
-                                              : GrowableObjectArray::null())),
-      entry_points_(GrowableObjectArray::Handle(
-          zone,
-          FLAG_print_precompiler_entry_points ? GrowableObjectArray::New()
-                                              : GrowableObjectArray::null())) {}
-
-void PrecompilerEntryPointsPrinter::AddInstantiatedClass(const Class& cls) {
-  if (!FLAG_print_precompiler_entry_points) {
-    return;
-  }
-
-  if (!cls.is_abstract()) {
-    instantiated_classes_.Add(cls);
-  }
-}
-
-void PrecompilerEntryPointsPrinter::AddEntryPoint(const Object& entry_point) {
-  ASSERT(entry_point.IsFunction() || entry_point.IsField());
-
-  if (!FLAG_print_precompiler_entry_points) {
-    return;
-  }
-  entry_points_.Add(entry_point);
-}
-
-// Prints precompiler entry points as JSON.
-// The format is described in [entry_points_json.md].
-void PrecompilerEntryPointsPrinter::Print() {
-  if (!FLAG_print_precompiler_entry_points) {
-    return;
-  }
-
-  JSONWriter writer;
-
-  writer.OpenObject();
-
-  writer.OpenArray("roots");
-
-  for (intptr_t i = 0; i < instantiated_classes_.Length(); ++i) {
-    const Class& cls = Class::CheckedHandle(Z, instantiated_classes_.At(i));
-
-    writer.OpenObject();
-    DescribeClass(&writer, cls);
-    writer.PrintProperty("action", "create-instance");
-    writer.CloseObject();
-  }
-
-  for (intptr_t i = 0; i < entry_points_.Length(); ++i) {
-    const Object& entry_point = Object::Handle(Z, entry_points_.At(i));
-
-    if (entry_point.IsFunction()) {
-      const Function& func = Function::Cast(entry_point);
-
-      writer.OpenObject();
-      DescribeClass(&writer, Class::Handle(Z, func.Owner()));
-
-      String& name = String::Handle(Z);
-      if (func.IsGetterFunction() || func.IsImplicitGetterFunction() ||
-          (func.kind() == RawFunction::kImplicitStaticFinalGetter)) {
-        name = func.name();
-        name = Field::NameFromGetter(name);
-        name = String::ScrubName(name);
-        writer.PrintPropertyStr("name", name);
-        writer.PrintProperty("action", "get");
-      } else if (func.IsSetterFunction() || func.IsImplicitSetterFunction()) {
-        name = func.name();
-        name = Field::NameFromSetter(name);
-        name = String::ScrubName(name);
-        writer.PrintPropertyStr("name", name);
-        writer.PrintProperty("action", "set");
-      } else {
-        name = func.UserVisibleName();
-        writer.PrintPropertyStr("name", name);
-        writer.PrintProperty("action", "call");
-      }
-      writer.CloseObject();
-    } else {
-      const Field& field = Field::Cast(entry_point);
-      const Class& owner = Class::Handle(Z, field.Owner());
-      const String& name = String::Handle(Z, field.UserVisibleName());
-
-      {
-        writer.OpenObject();
-        DescribeClass(&writer, owner);
-        writer.PrintPropertyStr("name", name);
-        writer.PrintProperty("action", "get");
-        writer.CloseObject();
-      }
-
-      {
-        writer.OpenObject();
-        DescribeClass(&writer, owner);
-        writer.PrintPropertyStr("name", name);
-        writer.PrintProperty("action", "set");
-        writer.CloseObject();
-      }
-    }
-  }
-
-  writer.CloseArray();  // roots
-  writer.CloseObject();  // top-level
-
-  const char* contents = writer.ToCString();
-
-  Dart_FileOpenCallback file_open = Dart::file_open_callback();
-  Dart_FileWriteCallback file_write = Dart::file_write_callback();
-  Dart_FileCloseCallback file_close = Dart::file_close_callback();
-  if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) {
-    FATAL(
-        "Unable to print precompiler entry points:"
-        " file callbacks are not provided by embedder");
-  }
-
-  void* out_stream =
-      file_open(FLAG_print_precompiler_entry_points, /* write = */ true);
-  if (out_stream == NULL) {
-    FATAL1(
-        "Unable to print precompiler entry points:"
-        " failed to open file \"%s\" for writing",
-        FLAG_print_precompiler_entry_points);
-  }
-  file_write(contents, strlen(contents), out_stream);
-  file_close(out_stream);
-}
-
-void PrecompilerEntryPointsPrinter::DescribeClass(JSONWriter* writer,
-                                                  const Class& cls) {
-  const Library& library = Library::Handle(Z, cls.library());
-  writer->PrintPropertyStr("library", String::Handle(Z, library.url()));
-
-  if (!cls.IsTopLevel()) {
-    writer->PrintPropertyStr("class", String::Handle(Z, cls.ScrubbedName()));
-  }
-}
-
-void Precompiler::AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]) {
-  PrecompilerEntryPointsPrinter entry_points_printer(zone());
-
+void Precompiler::AddRoots() {
   // Note that <rootlibrary>.main is not a root. The appropriate main will be
   // discovered through _getMainClosure.
 
@@ -669,11 +538,6 @@
 
   AddSelector(Symbols::Call());  // For speed, not correctness.
 
-  AddEntryPoints(vm_entry_points, &entry_points_printer);
-  AddEntryPoints(embedder_entry_points, &entry_points_printer);
-
-  entry_points_printer.Print();
-
   const Library& lib = Library::Handle(I->object_store()->root_library());
   if (lib.IsNull()) {
     const String& msg = String::Handle(
@@ -704,90 +568,6 @@
   }
 }
 
-void Precompiler::AddEntryPoints(
-    Dart_QualifiedFunctionName entry_points[],
-    PrecompilerEntryPointsPrinter* entry_points_printer) {
-  Library& lib = Library::Handle(Z);
-  Class& cls = Class::Handle(Z);
-  Function& func = Function::Handle(Z);
-  Field& field = Field::Handle(Z);
-  String& library_uri = String::Handle(Z);
-  String& class_name = String::Handle(Z);
-  String& function_name = String::Handle(Z);
-
-  for (intptr_t i = 0; entry_points[i].library_uri != NULL; i++) {
-    library_uri = Symbols::New(thread(), entry_points[i].library_uri);
-    class_name = Symbols::New(thread(), entry_points[i].class_name);
-    function_name = Symbols::New(thread(), entry_points[i].function_name);
-
-    if (library_uri.raw() == Symbols::TopLevel().raw()) {
-      lib = I->object_store()->root_library();
-    } else {
-      lib = Library::LookupLibrary(T, library_uri);
-    }
-    if (lib.IsNull()) {
-      String& msg = String::Handle(
-          Z, String::NewFormatted("Cannot find entry point '%s'\n",
-                                  entry_points[i].library_uri));
-      Jump(Error::Handle(Z, ApiError::New(msg)));
-      UNREACHABLE();
-    }
-
-    if (class_name.raw() == Symbols::TopLevel().raw()) {
-      if (Library::IsPrivate(function_name)) {
-        function_name = lib.PrivateName(function_name);
-      }
-      func = lib.LookupLocalFunction(function_name);
-      field = lib.LookupLocalField(function_name);
-    } else {
-      if (Library::IsPrivate(class_name)) {
-        class_name = lib.PrivateName(class_name);
-      }
-      cls = lib.LookupLocalClass(class_name);
-      if (cls.IsNull()) {
-        String& msg = String::Handle(
-            Z, String::NewFormatted("Cannot find entry point '%s' '%s'\n",
-                                    entry_points[i].library_uri,
-                                    entry_points[i].class_name));
-        Jump(Error::Handle(Z, ApiError::New(msg)));
-        UNREACHABLE();
-      }
-
-      ASSERT(!cls.IsNull());
-      func = cls.LookupFunctionAllowPrivate(function_name);
-      field = cls.LookupFieldAllowPrivate(function_name);
-    }
-
-    if (func.IsNull() && field.IsNull()) {
-      String& msg = String::Handle(
-          Z, String::NewFormatted("Cannot find entry point '%s' '%s' '%s'\n",
-                                  entry_points[i].library_uri,
-                                  entry_points[i].class_name,
-                                  entry_points[i].function_name));
-      Jump(Error::Handle(Z, ApiError::New(msg)));
-      UNREACHABLE();
-    }
-
-    if (!func.IsNull()) {
-      AddFunction(func);
-      entry_points_printer->AddEntryPoint(func);
-      if (func.IsGenerativeConstructor()) {
-        // Allocation stubs are referenced from the call site of the
-        // constructor, not in the constructor itself. So compiling the
-        // constructor isn't enough for us to discover the class is
-        // instantiated if the class isn't otherwise instantiated from Dart
-        // code and only instantiated from C++.
-        AddInstantiatedClass(cls);
-        entry_points_printer->AddInstantiatedClass(cls);
-      }
-    }
-    if (!field.IsNull()) {
-      AddField(field);
-      entry_points_printer->AddEntryPoint(field);
-    }
-  }
-}
-
 void Precompiler::Iterate() {
   Function& function = Function::Handle(Z);
 
@@ -1348,8 +1128,8 @@
                                           parsed_function,
                                           /* optimized = */ false);
     helper.Compile(&pipeline);
-    Code::Handle(func.unoptimized_code())
-        .set_var_descriptors(Object::empty_var_descriptors());
+    NOT_IN_PRODUCT(Code::Handle(func.unoptimized_code())
+                       .set_var_descriptors(Object::empty_var_descriptors()));
 
     const Object& result = PassiveObject::Handle(
         DartEntry::InvokeFunction(func, Object::empty_array()));
@@ -3044,7 +2824,6 @@
 void Obfuscator::InitializeRenamingMap(Isolate* isolate) {
   // Prevent renaming of classes and method names mentioned in the
   // entry points lists.
-  PreventRenaming(vm_entry_points);
   PreventRenaming(isolate->embedder_entry_points());
 
 // Prevent renaming of all pseudo-keywords and operators.
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index 5bb7053..cfa8b7e 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -229,30 +229,46 @@
 
 typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet;
 
+struct PrecompilerFieldInfo {
+  intptr_t cid;
+
+  // The most recently compiled constructor which stored the field.
+  // Used in DartPrecompilationPipeline::FinalizeCompilation to find out if
+  // this field was not initialized in the constructor being compiled.
+  const RawFunction* constructor;
+
+  bool operator==(const PrecompilerFieldInfo& other) const {
+    return (cid == other.cid) && (constructor == other.constructor);
+  }
+
+  bool operator!=(const PrecompilerFieldInfo& other) const {
+    return !(*this == other);
+  }
+};
+
 struct FieldTypePair {
   // Typedefs needed for the DirectChainedHashMap template.
   typedef const Field* Key;
-  typedef intptr_t Value;
+  typedef PrecompilerFieldInfo Value;
   typedef FieldTypePair Pair;
 
-  static Key KeyOf(Pair kv) { return kv.field_; }
+  static Key KeyOf(Pair kv) { return kv.field; }
 
-  static Value ValueOf(Pair kv) { return kv.cid_; }
+  static Value ValueOf(Pair kv) { return kv.field_info; }
 
   static inline intptr_t Hashcode(Key key) { return key->token_pos().value(); }
 
   static inline bool IsKeyEqual(Pair pair, Key key) {
-    return pair.field_->raw() == key->raw();
+    return pair.field->raw() == key->raw();
   }
 
-  FieldTypePair(const Field* f, intptr_t cid) : field_(f), cid_(cid) {}
+  FieldTypePair(const Field* f, intptr_t cid, const RawFunction* constructor)
+      : field(f), field_info({cid, constructor}) {}
 
-  FieldTypePair() : field_(NULL), cid_(-1) {}
+  FieldTypePair() : field(nullptr), field_info({-1, nullptr}) {}
 
-  void Print() const;
-
-  const Field* field_;
-  intptr_t cid_;
+  const Field* field;
+  PrecompilerFieldInfo field_info;
 };
 
 typedef DirectChainedHashMap<FieldTypePair> FieldTypeMap;
@@ -322,8 +338,7 @@
 
 class Precompiler : public ValueObject {
  public:
-  static RawError* CompileAll(
-      Dart_QualifiedFunctionName embedder_entry_points[]);
+  static RawError* CompileAll();
 
   static RawError* CompileFunction(Precompiler* precompiler,
                                    Thread* thread,
@@ -347,11 +362,9 @@
  private:
   explicit Precompiler(Thread* thread);
 
-  void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]);
-  void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]);
+  void DoCompileAll();
+  void AddRoots();
   void AddAnnotatedRoots();
-  void AddEntryPoints(Dart_QualifiedFunctionName entry_points[],
-                      PrecompilerEntryPointsPrinter* entry_points_printer);
   void Iterate();
 
   void AddType(const AbstractType& type);
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index a027b8a..3a87672 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -128,9 +128,12 @@
   }
 
   intptr_t CurrentContextEnvIndex() const {
-    return FLAG_use_bytecode_compiler
-               ? -1
-               : EnvIndex(parsed_function().current_context_var());
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    if (function().HasBytecode()) {
+      return -1;
+    }
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+    return EnvIndex(parsed_function().current_context_var());
   }
 
   intptr_t RawTypeArgumentEnvIndex() const {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index efb9313..d5ce4e7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -1037,8 +1037,11 @@
 }
 
 void FlowGraphCompiler::FinalizeVarDescriptors(const Code& code) {
+#if defined(PRODUCT)
+  // No debugger: no var descriptors.
+#else
   // TODO(alexmarkov): revise local vars descriptors when compiling bytecode
-  if (code.is_optimized() || FLAG_use_bytecode_compiler) {
+  if (code.is_optimized() || flow_graph().function().HasBytecode()) {
     // Optimized code does not need variable descriptors. They are
     // only stored in the unoptimized version.
     code.set_var_descriptors(Object::empty_var_descriptors());
@@ -1062,6 +1065,7 @@
     var_descs.SetVar(0, Symbols::CurrentContextVar(), &info);
   }
   code.set_var_descriptors(var_descs);
+#endif
 }
 
 void FlowGraphCompiler::FinalizeCatchEntryMovesMap(const Code& code) {
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 63fc9df..0dd586c 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -3057,12 +3057,25 @@
   return this;
 }
 
+// Tests for a FP comparison that cannot be negated
+// (to preserve NaN semantics).
+static bool IsFpCompare(ComparisonInstr* comp) {
+  if (comp->IsRelationalOp()) {
+    return comp->operation_cid() == kDoubleCid;
+  }
+  return false;
+}
+
 Definition* BooleanNegateInstr::Canonicalize(FlowGraph* flow_graph) {
   Definition* defn = value()->definition();
+  // Convert e.g. !(x > y) into (x <= y) for non-FP x, y.
   if (defn->IsComparison() && defn->HasOnlyUse(value()) &&
       defn->Type()->ToCid() == kBoolCid) {
-    defn->AsComparison()->NegateComparison();
-    return defn;
+    ComparisonInstr* comp = defn->AsComparison();
+    if (!IsFpCompare(comp)) {
+      comp->NegateComparison();
+      return defn;
+    }
   }
   return this;
 }
@@ -3128,15 +3141,21 @@
   if ((kind == Token::kNE_STRICT) && (constant.raw() == Bool::True().raw()) &&
       other_defn->IsComparison() && can_merge &&
       other_defn->HasOnlyUse(other)) {
-    *negated = true;
-    return other_defn;
+    ComparisonInstr* comp = other_defn->AsComparison();
+    if (!IsFpCompare(comp)) {
+      *negated = true;
+      return other_defn;
+    }
   }
   // Handle e === false.
   if ((kind == Token::kEQ_STRICT) && (constant.raw() == Bool::False().raw()) &&
       other_defn->IsComparison() && can_merge &&
       other_defn->HasOnlyUse(other)) {
-    *negated = true;
-    return other_defn;
+    ComparisonInstr* comp = other_defn->AsComparison();
+    if (!IsFpCompare(comp)) {
+      *negated = true;
+      return other_defn;
+    }
   }
   return compare;
 }
@@ -3972,7 +3991,7 @@
   }
 
 #if !defined(TARGET_ARCH_DBC)
-  if ((compiler->is_optimizing() || FLAG_use_bytecode_compiler) &&
+  if ((compiler->is_optimizing() || compiler->function().HasBytecode()) &&
       HasICData()) {
     ASSERT(HasICData());
     if (ic_data()->NumberOfUsedChecks() > 0) {
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 67ac074..6f63f4d 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -938,7 +938,7 @@
     return CompileType::Dynamic();
   }
 
-  if (FLAG_use_bytecode_compiler &&
+  if (function.HasBytecode() &&
       graph_entry->parsed_function().node_sequence() == nullptr) {
     // TODO(alexmarkov): Consider adding node_sequence() and scope.
     return CompileType::Dynamic();
diff --git a/runtime/vm/compiler/compiler_pass.cc b/runtime/vm/compiler/compiler_pass.cc
index e9587e6..8f311c6 100644
--- a/runtime/vm/compiler/compiler_pass.cc
+++ b/runtime/vm/compiler/compiler_pass.cc
@@ -231,6 +231,15 @@
   INVOKE_PASS(ConstantPropagation);
   INVOKE_PASS(OptimisticallySpecializeSmiPhis);
   INVOKE_PASS(TypePropagation);
+#if defined(DART_PRECOMPILER)
+  if (mode == kAOT) {
+    // The extra call specialization pass in AOT is able to specialize more
+    // calls after ConstantPropagation, which removes unreachable code, and
+    // TypePropagation, which can infer more accurate types after removing
+    // unreachable code.
+    INVOKE_PASS(ApplyICData);
+  }
+#endif
   INVOKE_PASS(WidenSmiToInt32);
   INVOKE_PASS(SelectRepresentations);
   INVOKE_PASS(CSE);
diff --git a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
index 6cacf81..2499872 100644
--- a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
@@ -1303,10 +1303,8 @@
 }
 
 FlowGraph* BytecodeFlowGraphBuilder::BuildGraph() {
-  if (function().is_native()) {
-    // Use default flow graph builder for native methods.
-    return nullptr;
-  }
+  // Use default flow graph builder for native methods.
+  ASSERT(!function().is_native());
 
   const Code& bytecode = Code::Handle(Z, function().Bytecode());
 
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index bac50ed..ac4d998 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -10,6 +10,7 @@
 #include "vm/compiler/assembler/disassembler_kbc.h"
 #include "vm/constants_kbc.h"
 #include "vm/dart_entry.h"
+#include "vm/longjump.h"
 #include "vm/object_store.h"
 #include "vm/timeline.h"
 
@@ -48,6 +49,15 @@
   AlternativeReadingScope alt(&helper_->reader_, &H.metadata_payloads(),
                               md_offset);
 
+  const int kHasExceptionsTableFlag = 1 << 0;
+  const int kHasNullableFieldsFlag = 1 << 1;
+  const int kHasClosuresFlag = 1 << 2;
+
+  const intptr_t flags = helper_->reader_.ReadUInt();
+  const bool has_exceptions_table = (flags & kHasExceptionsTableFlag) != 0;
+  const bool has_nullable_fields = (flags & kHasNullableFieldsFlag) != 0;
+  const bool has_closures = (flags & kHasClosuresFlag) != 0;
+
   // Create object pool and read pool entries.
   const intptr_t obj_count = helper_->reader_.ReadListLength();
   const ObjectPool& pool =
@@ -68,30 +78,51 @@
   function.AttachBytecode(bytecode);
 
   // Read exceptions table.
-  ReadExceptionsTable(bytecode);
+  ReadExceptionsTable(bytecode, has_exceptions_table);
 
   if (FLAG_dump_kernel_bytecode) {
     KernelBytecodeDisassembler::Disassemble(function);
   }
 
+  // Initialization of fields with null literal is elided from bytecode.
+  // Record the corresponding stores if field guards are enabled.
+  if (has_nullable_fields) {
+    ASSERT(function.IsGenerativeConstructor());
+    const intptr_t num_fields = helper_->ReadListLength();
+    if (I->use_field_guards()) {
+      Field& field = Field::Handle(helper_->zone_);
+      for (intptr_t i = 0; i < num_fields; i++) {
+        NameIndex name_index = helper_->ReadCanonicalNameReference();
+        field = H.LookupFieldByKernelField(name_index);
+        field.RecordStore(Object::null_object());
+      }
+    } else {
+      for (intptr_t i = 0; i < num_fields; i++) {
+        helper_->SkipCanonicalNameReference();
+      }
+    }
+  }
+
   // Read closures.
-  Function& closure = Function::Handle(helper_->zone_);
-  Code& closure_bytecode = Code::Handle(helper_->zone_);
-  intptr_t num_closures = helper_->ReadListLength();
-  for (intptr_t i = 0; i < num_closures; i++) {
-    intptr_t closure_index = helper_->ReadUInt();
-    ASSERT(closure_index < obj_count);
-    closure ^= pool.ObjectAt(closure_index);
+  if (has_closures) {
+    Function& closure = Function::Handle(helper_->zone_);
+    Code& closure_bytecode = Code::Handle(helper_->zone_);
+    const intptr_t num_closures = helper_->ReadListLength();
+    for (intptr_t i = 0; i < num_closures; i++) {
+      intptr_t closure_index = helper_->ReadUInt();
+      ASSERT(closure_index < obj_count);
+      closure ^= pool.ObjectAt(closure_index);
 
-    // Read closure bytecode and attach to closure function.
-    closure_bytecode = ReadBytecode(pool);
-    closure.AttachBytecode(closure_bytecode);
+      // Read closure bytecode and attach to closure function.
+      closure_bytecode = ReadBytecode(pool);
+      closure.AttachBytecode(closure_bytecode);
 
-    // Read closure exceptions table.
-    ReadExceptionsTable(closure_bytecode);
+      // Read closure exceptions table.
+      ReadExceptionsTable(closure_bytecode);
 
-    if (FLAG_dump_kernel_bytecode) {
-      KernelBytecodeDisassembler::Disassemble(closure);
+      if (FLAG_dump_kernel_bytecode) {
+        KernelBytecodeDisassembler::Disassemble(closure);
+      }
     }
   }
 }
@@ -579,13 +610,15 @@
                                 pool);
 }
 
-void BytecodeMetadataHelper::ReadExceptionsTable(const Code& bytecode) {
+void BytecodeMetadataHelper::ReadExceptionsTable(const Code& bytecode,
+                                                 bool has_exceptions_table) {
 #if !defined(PRODUCT)
   TimelineDurationScope tds(Thread::Current(), Timeline::GetCompilerStream(),
                             "BytecodeMetadataHelper::ReadExceptionsTable");
 #endif  // !defined(PRODUCT)
 
-  const intptr_t try_block_count = helper_->reader_.ReadListLength();
+  const intptr_t try_block_count =
+      has_exceptions_table ? helper_->reader_.ReadListLength() : 0;
   if (try_block_count > 0) {
     const ObjectPool& pool =
         ObjectPool::Handle(helper_->zone_, bytecode.object_pool());
@@ -711,6 +744,57 @@
   return NativeEntryData::New(kind, trampoline, native_function, argc_tag);
 }
 
+RawError* BytecodeReader::ReadFunctionBytecode(Thread* thread,
+                                               const Function& function) {
+  ASSERT(!FLAG_precompiled_mode);
+  ASSERT(!function.HasBytecode());
+  ASSERT(thread->sticky_error() == Error::null());
+
+  LongJumpScope jump;
+  if (setjmp(*jump.Set()) == 0) {
+    StackZone stack_zone(thread);
+    Zone* const zone = stack_zone.GetZone();
+    HANDLESCOPE(thread);
+    CompilerState compiler_state(thread);
+
+    const Script& script = Script::Handle(zone, function.script());
+    TranslationHelper translation_helper(thread);
+    translation_helper.InitFromScript(script);
+
+    KernelReaderHelper reader_helper(
+        zone, &translation_helper, script,
+        ExternalTypedData::Handle(zone, function.KernelData()),
+        function.KernelDataProgramOffset());
+    ActiveClass active_class;
+    TypeTranslator type_translator(&reader_helper, &active_class,
+                                   /* finalize= */ true);
+
+    BytecodeMetadataHelper bytecode_metadata_helper(
+        &reader_helper, &type_translator, &active_class);
+
+    // Setup a [ActiveClassScope] and a [ActiveMemberScope] which will be used
+    // e.g. for type translation.
+    const Class& klass = Class::Handle(zone, function.Owner());
+    Function& outermost_function =
+        Function::Handle(zone, function.GetOutermostFunction());
+
+    ActiveClassScope active_class_scope(&active_class, &klass);
+    ActiveMemberScope active_member(&active_class, &outermost_function);
+    ActiveTypeParametersScope active_type_params(&active_class, function, zone);
+
+    bytecode_metadata_helper.ReadMetadata(function);
+
+    return Error::null();
+  } else {
+    StackZone stack_zone(thread);
+    Error& error = Error::Handle();
+    // We got an error during bytecode reading.
+    error = thread->sticky_error();
+    thread->clear_sticky_error();
+    return error.raw();
+  }
+}
+
 }  // namespace kernel
 }  // namespace dart
 
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.h b/runtime/vm/compiler/frontend/bytecode_reader.h
index 769ad61..f422003 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.h
+++ b/runtime/vm/compiler/frontend/bytecode_reader.h
@@ -31,7 +31,8 @@
                            const ObjectPool& pool,
                            intptr_t from_index);
   RawCode* ReadBytecode(const ObjectPool& pool);
-  void ReadExceptionsTable(const Code& bytecode);
+  void ReadExceptionsTable(const Code& bytecode,
+                           bool has_exceptions_table = true);
   RawTypedData* NativeEntry(const Function& function,
                             const String& external_name);
 
@@ -41,6 +42,14 @@
   DISALLOW_COPY_AND_ASSIGN(BytecodeMetadataHelper);
 };
 
+class BytecodeReader : public AllStatic {
+ public:
+  // Reads bytecode for the given function and sets its bytecode field.
+  // Returns error (if any), or null.
+  static RawError* ReadFunctionBytecode(Thread* thread,
+                                        const Function& function);
+};
+
 }  // namespace kernel
 }  // namespace dart
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index e8b948c..38a9a18 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -9,6 +9,7 @@
 #include "vm/compiler/frontend/flow_graph_builder.h"  // For dart::FlowGraphBuilder::SimpleInstanceOfType.
 #include "vm/compiler/frontend/prologue_builder.h"
 #include "vm/compiler/jit/compiler.h"
+#include "vm/kernel.h"  // For IsFieldInitializer.
 #include "vm/object_store.h"
 #include "vm/stack_frame.h"
 
@@ -1908,44 +1909,18 @@
 
   SetOffset(kernel_offset);
 
-  if (FLAG_enable_interpreter || FLAG_use_bytecode_compiler) {
-    // TODO(regis): For now, we skip bytecode loading for functions that were
-    // synthesized and that do not have bytecode. Since they inherited the
-    // kernel offset of a concrete function, the wrong bytecode would be loaded.
-    switch (function.kind()) {
-      case RawFunction::kImplicitGetter:
-      case RawFunction::kImplicitSetter:
-      case RawFunction::kMethodExtractor:
-      case RawFunction::kNoSuchMethodDispatcher:
-      case RawFunction::kInvokeFieldDispatcher:
-      case RawFunction::kDynamicInvocationForwarder:
-      case RawFunction::kImplicitClosureFunction:
-        break;
-      case RawFunction::kImplicitStaticFinalGetter:
-        if (!IsFieldInitializer(function, Z)) {
-          break;
-        }
-        // Fallthrough.
-      default: {
-        // TODO(regis): Clean up this logic of when to compile.
-        // If the bytecode was previously loaded, we really want to compile.
-        if (!function.HasBytecode()) {
-          bytecode_metadata_helper_.ReadMetadata(function);
-        }
-        if (function.HasBytecode()) {
-          if (FLAG_use_bytecode_compiler) {
-            BytecodeFlowGraphBuilder bytecode_compiler(
-                flow_graph_builder_, parsed_function(),
-                &(flow_graph_builder_->ic_data_array_));
-            FlowGraph* flow_graph = bytecode_compiler.BuildGraph();
-            if (flow_graph != nullptr) {
-              return flow_graph;
-            }
-          } else {
-            return nullptr;
-          }
-        }
-      }
+  if ((FLAG_use_bytecode_compiler || FLAG_enable_interpreter) &&
+      function.IsBytecodeAllowed(Z) && !function.is_native()) {
+    if (!function.HasBytecode()) {
+      bytecode_metadata_helper_.ReadMetadata(function);
+    }
+    if (function.HasBytecode()) {
+      BytecodeFlowGraphBuilder bytecode_compiler(
+          flow_graph_builder_, parsed_function(),
+          &(flow_graph_builder_->ic_data_array_));
+      FlowGraph* flow_graph = bytecode_compiler.BuildGraph();
+      ASSERT(flow_graph != nullptr);
+      return flow_graph;
     }
   }
 
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index da11764..a6f15f9 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -5,6 +5,7 @@
 #include "vm/compiler/frontend/scope_builder.h"
 
 #include "vm/compiler/backend/il.h"  // For CompileType.
+#include "vm/kernel.h"               // For IsFieldInitializer.
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
 
@@ -16,12 +17,6 @@
 #define T (type_translator_)
 #define I Isolate::Current()
 
-bool IsFieldInitializer(const Function& function, Zone* zone) {
-  return (function.kind() == RawFunction::kImplicitStaticFinalGetter) &&
-         String::Handle(zone, function.name())
-             .StartsWith(Symbols::InitPrefix());
-}
-
 // Returns true if the given method can skip type checks for all arguments
 // that are not covariant or generic covariant in its implementation.
 bool MethodCanSkipTypeChecksForNonCovariantArguments(
diff --git a/runtime/vm/compiler/frontend/scope_builder.h b/runtime/vm/compiler/frontend/scope_builder.h
index 210c51b..12521be 100644
--- a/runtime/vm/compiler/frontend/scope_builder.h
+++ b/runtime/vm/compiler/frontend/scope_builder.h
@@ -228,8 +228,6 @@
   DISALLOW_COPY_AND_ASSIGN(ScopeBuildingResult);
 };
 
-bool IsFieldInitializer(const Function& function, Zone* zone);
-
 // Returns true if the given method can skip type checks for all arguments
 // that are not covariant or generic covariant in its implementation.
 bool MethodCanSkipTypeChecksForNonCovariantArguments(
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index 50ff623..40d64b8 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -24,6 +24,7 @@
 #include "vm/compiler/cha.h"
 #include "vm/compiler/compiler_pass.h"
 #include "vm/compiler/compiler_state.h"
+#include "vm/compiler/frontend/bytecode_reader.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"
@@ -139,8 +140,7 @@
 
 bool UseKernelFrontEndFor(ParsedFunction* parsed_function) {
   const Function& function = parsed_function->function();
-  return (function.kernel_offset() > 0) ||
-         (FLAG_use_bytecode_compiler && function.HasBytecode()) ||
+  return (function.kernel_offset() > 0) || function.HasBytecode() ||
          (function.kind() == RawFunction::kNoSuchMethodDispatcher) ||
          (function.kind() == RawFunction::kInvokeFieldDispatcher);
 }
@@ -164,8 +164,7 @@
                                      /* not inlining */ NULL, optimized,
                                      osr_id);
     FlowGraph* graph = builder.BuildGraph();
-    ASSERT((graph != NULL) || (FLAG_enable_interpreter &&
-                               parsed_function->function().HasBytecode()));
+    ASSERT(graph != NULL);
     return graph;
   }
   FlowGraphBuilder builder(*parsed_function, *ic_data_array,
@@ -249,9 +248,28 @@
 //   Arg0: function object.
 DEFINE_RUNTIME_ENTRY(CompileFunction, 1) {
   const Function& function = Function::CheckedHandle(arguments.ArgAt(0));
-  ASSERT(!function.HasCode());
-  const Object& result =
-      Object::Handle(Compiler::CompileFunction(thread, function));
+  Object& result = Object::Handle(zone);
+
+  if (FLAG_enable_interpreter && function.IsBytecodeAllowed(zone)) {
+    if (!function.HasBytecode()) {
+      result = kernel::BytecodeReader::ReadFunctionBytecode(thread, function);
+      if (!result.IsNull()) {
+        Exceptions::PropagateError(Error::Cast(result));
+      }
+    }
+    if (function.HasBytecode()) {
+      // If interpreter is enabled and there is bytecode, LazyCompile stub
+      // (which calls CompileFunction) should proceed to InterpretCall in order
+      // to enter interpreter. In such case, compilation is postponed and
+      // triggered by interpreter later via OptimizeInvokedFunction.
+      return;
+    }
+    // No bytecode, fall back to compilation.
+  } else {
+    ASSERT(!function.HasCode());
+  }
+
+  result = Compiler::CompileFunction(thread, function);
   if (result.IsError()) {
     if (result.IsLanguageError()) {
       Exceptions::ThrowCompileTimeError(LanguageError::Cast(result));
@@ -259,13 +277,6 @@
     }
     Exceptions::PropagateError(Error::Cast(result));
   }
-  // TODO(regis): Revisit.
-  if (FLAG_enable_interpreter && !function.HasCode() &&
-      function.HasBytecode()) {
-    // Function was not actually compiled, but its bytecode was loaded.
-    // Verify that InterpretCall stub code was installed.
-    ASSERT(function.CurrentCode() == StubCode::InterpretCall_entry()->code());
-  }
 }
 
 bool Compiler::CanOptimizeFunction(Thread* thread, const Function& function) {
@@ -830,12 +841,6 @@
             zone, parsed_function(), ic_data_array, osr_id(), optimized());
       }
 
-      // TODO(regis): Revisit.
-      if (FLAG_enable_interpreter && (flow_graph == NULL) &&
-          function.HasBytecode()) {
-        return Code::null();
-      }
-
       const bool print_flow_graph =
           (FLAG_print_flow_graph ||
            (optimized() && FLAG_print_flow_graph_optimized)) &&
@@ -1005,7 +1010,7 @@
     CompileParsedFunctionHelper helper(parsed_function, optimized, osr_id);
 
     if (Compiler::IsBackgroundCompilation()) {
-      ASSERT(optimized && function.is_background_optimizable());
+      ASSERT(function.is_background_optimizable());
       if (isolate->IsTopLevelParsing() ||
           (loading_invalidation_gen_at_start !=
            isolate->loading_invalidation_gen())) {
@@ -1019,58 +1024,54 @@
 
     const Code& result = Code::Handle(helper.Compile(pipeline));
 
-    // TODO(regis): Revisit.
-    if (FLAG_enable_interpreter && result.IsNull() && function.HasBytecode()) {
-      return Object::null();
-    }
-
     if (!result.IsNull()) {
       if (!optimized) {
         function.SetWasCompiled(true);
       }
     } else {
-      if (optimized) {
-        if (Compiler::IsBackgroundCompilation()) {
-          // Try again later, background compilation may abort because of
-          // state change during compilation.
-          if (FLAG_trace_compiler) {
-            THR_Print("Aborted background compilation: %s\n",
-                      function.ToFullyQualifiedCString());
-          }
-          {
-            // If it was a bailout, then disable optimization.
-            Error& error = Error::Handle();
-            // We got an error during compilation.
-            error = thread->sticky_error();
-            thread->clear_sticky_error();
-
-            if (error.raw() == Object::background_compilation_error().raw()) {
-              if (FLAG_trace_compiler) {
-                THR_Print(
-                    "--> disabling background optimizations for '%s' (will "
-                    "try to re-compile on isolate thread again)\n",
+      if (Compiler::IsBackgroundCompilation()) {
+        // Try again later, background compilation may abort because of
+        // state change during compilation.
+        if (FLAG_trace_compiler) {
+          THR_Print("Aborted background compilation: %s\n",
                     function.ToFullyQualifiedCString());
-              }
-
-              // Ensure we don't attempt to re-compile the function on the
-              // background compiler.
-              function.set_is_background_optimizable(false);
-
-              // Trigger another optimization soon on the main thread.
-              function.SetUsageCounter(FLAG_optimization_counter_threshold);
-            } else if ((error.IsLanguageError() &&
-                        LanguageError::Cast(error).kind() ==
-                            Report::kBailout) ||
-                       error.IsUnhandledException()) {
-              if (FLAG_trace_compiler) {
-                THR_Print("--> disabling optimizations for '%s'\n",
-                          function.ToFullyQualifiedCString());
-              }
-              function.SetIsOptimizable(false);
-            }
-          }
-          return Error::null();
         }
+        {
+          // If it was a bailout, then disable optimization.
+          Error& error = Error::Handle();
+          // We got an error during compilation.
+          error = thread->sticky_error();
+          thread->clear_sticky_error();
+
+          if (error.raw() == Object::background_compilation_error().raw()) {
+            if (FLAG_trace_compiler) {
+              THR_Print(
+                  "--> disabling background optimizations for '%s' (will "
+                  "try to re-compile on isolate thread again)\n",
+                  function.ToFullyQualifiedCString());
+            }
+
+            // Ensure we don't attempt to re-compile the function on the
+            // background compiler.
+            function.set_is_background_optimizable(false);
+
+            // Trigger another optimization soon on the main thread.
+            function.SetUsageCounter(optimized
+                                         ? FLAG_optimization_counter_threshold
+                                         : FLAG_compilation_counter_threshold);
+          } else if ((error.IsLanguageError() &&
+                      LanguageError::Cast(error).kind() == Report::kBailout) ||
+                     error.IsUnhandledException()) {
+            if (FLAG_trace_compiler) {
+              THR_Print("--> disabling optimizations for '%s'\n",
+                        function.ToFullyQualifiedCString());
+            }
+            function.SetIsOptimizable(false);
+          }
+        }
+        return Error::null();
+      }
+      if (optimized) {
         // Optimizer bailed out. Disable optimizations and never try again.
         if (trace_compiler) {
           THR_Print("--> disabling optimizations for '%s'\n",
@@ -1254,10 +1255,6 @@
 
 RawError* Compiler::EnsureUnoptimizedCode(Thread* thread,
                                           const Function& function) {
-  if (FLAG_enable_interpreter && function.HasBytecode()) {
-    // TODO(regis): This may not be sufficient when deoptimizing. Revisit then.
-    return Error::null();
-  }
   if (function.unoptimized_code() != Object::null()) {
     return Error::null();
   }
@@ -1273,9 +1270,6 @@
   if (result.IsError()) {
     return Error::Cast(result).raw();
   }
-  if (FLAG_enable_interpreter && function.HasBytecode()) {
-    return Error::null();
-  }
   // Since CompileFunctionHelper replaces the current code, re-attach the
   // the original code if the function was already compiled.
   if (!original_code.IsNull() && result.raw() == function.CurrentCode() &&
@@ -1303,9 +1297,14 @@
   } else {
     event_name = "CompileFunctionOptimized";
   }
+  // TODO(alexmarkov): Consider adding a separate event for unoptimized
+  // compilation triggered from interpreter
   TIMELINE_FUNCTION_COMPILATION_DURATION(thread, event_name, function);
 #endif  // !defined(PRODUCT)
 
+  // If running with interpreter, do the unoptimized compilation first.
+  const bool optimized = !FLAG_enable_interpreter || function.WasCompiled();
+
   // If we are in the optimizing in the mutator/Dart thread, then
   // this is either an OSR compilation or background compilation is
   // not currently allowed.
@@ -1315,8 +1314,7 @@
          !function.is_background_optimizable());
   CompilationPipeline* pipeline =
       CompilationPipeline::New(thread->zone(), function);
-  return CompileFunctionHelper(pipeline, function, true, /* optimized */
-                               osr_id);
+  return CompileFunctionHelper(pipeline, function, optimized, osr_id);
 }
 
 // This is only used from unit tests.
@@ -1411,9 +1409,6 @@
     func ^= functions.At(i);
     ASSERT(!func.IsNull());
     if (!func.HasCode() &&
-        // TODO(regis): Revisit.
-        // Do not compile function if its bytecode is already loaded.
-        (!FLAG_enable_interpreter || !func.HasBytecode()) &&
         !func.is_abstract() && !func.IsRedirectingFactory()) {
       if ((cls.is_mixin_app_alias() || cls.IsMixinApplication()) &&
           func.HasOptionalParameters()) {
@@ -1424,10 +1419,35 @@
       if (result.IsError()) {
         return Error::Cast(result).raw();
       }
-      // TODO(regis): Revisit.
-      // The compiler may load bytecode and return Code::null().
-      ASSERT(!result.IsNull() ||
-             (FLAG_enable_interpreter && func.HasBytecode()));
+      ASSERT(!result.IsNull());
+    }
+  }
+  return Error::null();
+}
+
+RawError* Compiler::ReadAllBytecode(const Class& cls) {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Error& error = Error::Handle(zone, cls.EnsureIsFinalized(thread));
+  ASSERT(error.IsNull());
+  Array& functions = Array::Handle(zone, cls.functions());
+  Function& func = Function::Handle(zone);
+  // Class dynamic lives in the vm isolate. Its array fields cannot be set to
+  // an empty array.
+  if (functions.IsNull()) {
+    ASSERT(cls.IsDynamicClass());
+    return Error::null();
+  }
+  // Compile all the regular functions.
+  for (int i = 0; i < functions.Length(); i++) {
+    func ^= functions.At(i);
+    ASSERT(!func.IsNull());
+    if (func.IsBytecodeAllowed(zone) && !func.HasBytecode()) {
+      RawError* error =
+          kernel::BytecodeReader::ReadFunctionBytecode(thread, func);
+      if (error != Error::null()) {
+        return error;
+      }
     }
   }
   return Error::null();
@@ -1508,19 +1528,30 @@
         parsed_function = Parser::ParseStaticFieldInitializer(field);
         parsed_function->AllocateVariables();
       }
+      const Function& initializer = parsed_function->function();
+
+      if (FLAG_enable_interpreter) {
+        ASSERT(initializer.IsBytecodeAllowed(zone));
+        if (!initializer.HasBytecode()) {
+          RawError* error =
+              kernel::BytecodeReader::ReadFunctionBytecode(thread, initializer);
+          if (error != Error::null()) {
+            return error;
+          }
+        }
+        if (initializer.HasBytecode()) {
+          return DartEntry::InvokeFunction(initializer, Object::empty_array());
+        }
+      }
 
       // Non-optimized code generator.
       DartCompilationPipeline pipeline;
       CompileParsedFunctionHelper helper(parsed_function, false, kNoOSRDeoptId);
       const Code& code = Code::Handle(helper.Compile(&pipeline));
-      const Function& initializer = parsed_function->function();
 
       if (!code.IsNull()) {
-        code.set_var_descriptors(Object::empty_var_descriptors());
-        return DartEntry::InvokeFunction(initializer, Object::empty_array());
-      } else if (FLAG_enable_interpreter && initializer.HasBytecode()) {
-        // In case the initializer has bytecode, the compilation step above only
-        // loaded the bytecode without generating code.
+        NOT_IN_PRODUCT(
+            code.set_var_descriptors(Object::empty_var_descriptors()));
         return DartEntry::InvokeFunction(initializer, Object::empty_array());
       }
     }
@@ -1595,7 +1626,7 @@
     CompileParsedFunctionHelper helper(parsed_function, false, kNoOSRDeoptId);
     const Code& code = Code::Handle(helper.Compile(&pipeline));
     if (!code.IsNull()) {
-      code.set_var_descriptors(Object::empty_var_descriptors());
+      NOT_IN_PRODUCT(code.set_var_descriptors(Object::empty_var_descriptors()));
       const Object& result = PassiveObject::Handle(
           DartEntry::InvokeFunction(func, Object::empty_array()));
       return result.raw();
diff --git a/runtime/vm/compiler/jit/compiler.h b/runtime/vm/compiler/jit/compiler.h
index 1636109..5d5d3bd 100644
--- a/runtime/vm/compiler/jit/compiler.h
+++ b/runtime/vm/compiler/jit/compiler.h
@@ -112,6 +112,9 @@
                                          const Function& function);
 
   // Generates optimized code for function.
+  // If interpreter is used and function was not compiled yet, then
+  // generates unoptimized code (it's basically the first round of
+  // optimization).
   //
   // Returns the code object if compilation succeeds.  Returns an Error if
   // there is a compilation error.  If optimization fails, but there is no
@@ -151,6 +154,9 @@
   static RawError* CompileAllFunctions(const Class& cls);
   static RawError* ParseAllFunctions(const Class& cls);
 
+  // Eagerly read all bytecode.
+  static RawError* ReadAllBytecode(const Class& cls);
+
   // Notify the compiler that background (optimized) compilation has failed
   // because the mutator thread changed the state (e.g., deoptimization,
   // deferred loading). The background compilation may retry to compile
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 18bb9b2..dcc1ac8 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -94,7 +94,7 @@
   CHECK_OFFSET(Thread::stack_limit_offset(), 4);
   CHECK_OFFSET(Thread::object_null_offset(), 64);
   CHECK_OFFSET(SingleTargetCache::upper_limit_offset(), 14);
-  CHECK_OFFSET(Isolate::object_store_offset(), 28);
+  CHECK_OFFSET(Isolate::object_store_offset(), 20);
   NOT_IN_PRODUCT(CHECK_OFFSET(sizeof(ClassHeapStats), 168));
 #endif
 #if defined(TARGET_ARCH_ARM64)
@@ -103,7 +103,7 @@
   CHECK_OFFSET(Thread::stack_limit_offset(), 8);
   CHECK_OFFSET(Thread::object_null_offset(), 112);
   CHECK_OFFSET(SingleTargetCache::upper_limit_offset(), 26);
-  CHECK_OFFSET(Isolate::object_store_offset(), 56);
+  CHECK_OFFSET(Isolate::object_store_offset(), 40);
   NOT_IN_PRODUCT(CHECK_OFFSET(sizeof(ClassHeapStats), 288));
 #endif
 #undef CHECK_OFFSET
@@ -136,12 +136,6 @@
   }
 #endif
 
-  if (FLAG_use_bytecode_compiler) {
-    // Interpreter is not able to trigger compilation yet.
-    // TODO(alexmarkov): Revise
-    FLAG_enable_interpreter = false;
-  }
-
   if (FLAG_enable_interpreter) {
 #if defined(USING_SIMULATOR) || defined(TARGET_ARCH_DBC)
     return strdup(
@@ -494,6 +488,7 @@
   IdleNotifier::Cleanup();
 
   TargetCPUFeatures::Cleanup();
+  MarkingStack::ShutDown();
   StoreBuffer::ShutDown();
 
   // Delete the current thread's TLS and set it's TLS to null.
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 717daf3..7a079a0 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6368,8 +6368,7 @@
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
-DART_EXPORT Dart_Handle
-Dart_Precompile(Dart_QualifiedFunctionName entry_points[]) {
+DART_EXPORT Dart_Handle Dart_Precompile() {
 #if defined(TARGET_ARCH_IA32)
   return Api::NewError("AOT compilation is not supported on IA32.");
 #elif defined(TARGET_ARCH_DBC)
@@ -6388,7 +6387,7 @@
     return result;
   }
   CHECK_CALLBACK_STATE(T);
-  const Error& error = Error::Handle(Precompiler::CompileAll(entry_points));
+  const Error& error = Error::Handle(Precompiler::CompileAll());
   if (!error.IsNull()) {
     return Api::NewHandle(T, error.raw());
   }
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index a49749d..5708a0d 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -6,6 +6,7 @@
 
 #include "platform/safe_stack.h"
 #include "vm/class_finalizer.h"
+#include "vm/compiler/frontend/bytecode_reader.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/debugger.h"
 #include "vm/heap/safepoint.h"
@@ -130,29 +131,35 @@
   ScopedIsolateStackLimits stack_limit(thread, current_sp);
 #if !defined(DART_PRECOMPILED_RUNTIME)
   if (!function.HasCode()) {
-    // There's no native code. If we're not using the interpreter, then we
-    // compile to native code. If we are using the interpreter, but there's no
-    // native code and no bytecode, then we invoke the compiler to extract the
-    // bytecode.
-    if (!FLAG_enable_interpreter || !function.HasBytecode()) {
-      const Object& result =
-          Object::Handle(zone, Compiler::CompileFunction(thread, function));
-      if (result.IsError()) {
-        return Error::Cast(result).raw();
+    if (FLAG_enable_interpreter && function.IsBytecodeAllowed(zone)) {
+      if (!function.HasBytecode()) {
+        RawError* error =
+            kernel::BytecodeReader::ReadFunctionBytecode(thread, function);
+        if (error != Error::null()) {
+          return error;
+        }
       }
+
+      // If we have bytecode but no native code then invoke the interpreter.
+      if (function.HasBytecode()) {
+        ASSERT(thread->no_callback_scope_depth() == 0);
+        SuspendLongJumpScope suspend_long_jump_scope(thread);
+        TransitionToGenerated transition(thread);
+        return Interpreter::Current()->Call(function, arguments_descriptor,
+                                            arguments, thread);
+      }
+
+      // No bytecode, fall back to compilation.
     }
 
-    // At this point we should have either native code or bytecode.
-    ASSERT(function.HasCode() || function.HasBytecode());
-
-    // If we have bytecode but no native code then invoke the interpreter.
-    if (!function.HasCode() && function.HasBytecode()) {
-      ASSERT(thread->no_callback_scope_depth() == 0);
-      SuspendLongJumpScope suspend_long_jump_scope(thread);
-      TransitionToGenerated transition(thread);
-      return Interpreter::Current()->Call(function, arguments_descriptor,
-                                          arguments, thread);
+    const Object& result =
+        Object::Handle(zone, Compiler::CompileFunction(thread, function));
+    if (result.IsError()) {
+      return Error::Cast(result).raw();
     }
+
+    // At this point we should have native code.
+    ASSERT(function.HasCode());
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 30f52a8..6827707 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -319,6 +319,8 @@
   // Extract the function and the code from the asynchronous activation.
   function_ = async_activation.function();
 #if !defined(DART_PRECOMPILED_RUNTIME)
+  // TODO(regis): Revise debugger functionality when running a mix of
+  // interpreted and compiled code.
   if (!FLAG_enable_interpreter || !function_.HasBytecode()) {
     function_.EnsureHasCompiledUnoptimizedCode();
   }
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index 8b2b14c..7ab10b9 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -484,7 +484,7 @@
   Print(".Llineheader_start:\n");
 
   u1(1);   // 4. minimum_instruction_length
-  u1(0);   // 5. default_is_stmt
+  u1(1);   // 5. default_is_stmt (true for compatibility with dsymutil).
   u1(0);   // 6. line_base
   u1(1);   // 7. line_range
   u1(13);  // 8. opcode_base (12 standard opcodes in Dwarf 2)
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 8ce163e..61e06aa 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -65,6 +65,9 @@
     "Collects all dynamic function names to identify unique targets")          \
   P(compactor_tasks, int, 2,                                                   \
     "The number of tasks to use for parallel compaction.")                     \
+  P(compilation_counter_threshold, int, 10,                                    \
+    "Function's usage-counter value before interpreted function is compiled, " \
+    "-1 means never")                                                          \
   P(concurrent_sweep, bool, USING_MULTICORE,                                   \
     "Concurrent sweep for old generation.")                                    \
   R(dedup_instructions, true, bool, false,                                     \
@@ -114,7 +117,7 @@
     "Load deferred libraries eagerly.")                                        \
   R(log_marker_tasks, false, bool, false,                                      \
     "Log debugging information for old gen GC marking tasks.")                 \
-  R(marker_tasks, USING_MULTICORE ? 2 : 0, int, USING_MULTICORE ? 2 : 0,       \
+  P(marker_tasks, int, USING_MULTICORE ? 2 : 0,                                \
     "The number of tasks to spawn during old gen GC marking (0 means "         \
     "perform all marking on main thread).")                                    \
   P(max_polymorphic_checks, int, 4,                                            \
@@ -138,9 +141,6 @@
   P(polymorphic_with_deopt, bool, true,                                        \
     "Polymorphic calls with deoptimization / megamorphic call")                \
   P(precompiled_mode, bool, false, "Precompilation compiler mode")             \
-  P(print_precompiler_entry_points, charp, NULL,                               \
-    "Print entry points and info about recognized methods used by "            \
-    "precompiler.")                                                            \
   P(print_snapshot_sizes, bool, false, "Print sizes of generated snapshots.")  \
   P(print_snapshot_sizes_verbose, bool, false,                                 \
     "Print cluster sizes of generated snapshots.")                             \
diff --git a/runtime/vm/heap/become.cc b/runtime/vm/heap/become.cc
index 59bf1ff..8dfad74 100644
--- a/runtime/vm/heap/become.cc
+++ b/runtime/vm/heap/become.cc
@@ -277,8 +277,8 @@
   Heap* heap = isolate->heap();
 
   // Clear the store buffer; will be rebuilt as we forward the heap.
-  isolate->PrepareForGC();  // Have all threads flush their store buffers.
-  isolate->store_buffer()->Reset();  // Drop all store buffers.
+  isolate->ReleaseStoreBuffers();
+  isolate->store_buffer()->Reset();
 
   ForwardPointersVisitor pointer_visitor(thread);
 
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 2b319e2..7e8072c 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -204,15 +204,25 @@
       old_space_(heap_->old_space()),
       writable_(writable) {
   {
-    // It's not yet safe to iterate over a paged space while it's concurrently
-    // sweeping, so wait for any such task to complete first.
+    // It's not safe to iterate over old space when concurrent marking or
+    // sweeping is in progress, or another thread is iterating the heap, so wait
+    // for any such task to complete first.
     MonitorLocker ml(old_space_->tasks_lock());
 #if defined(DEBUG)
     // We currently don't support nesting of HeapIterationScopes.
     ASSERT(old_space_->iterating_thread_ != thread);
 #endif
-    while (old_space_->tasks() > 0) {
-      ml.WaitWithSafepointCheck(thread);
+    while ((old_space_->tasks() > 0) ||
+           (old_space_->phase() != PageSpace::kDone)) {
+      if (old_space_->phase() == PageSpace::kAwaitingFinalization) {
+        ml.Exit();
+        heap_->CollectOldSpaceGarbage(thread, Heap::kMarkSweep,
+                                      Heap::kFinalize);
+        ml.Enter();
+      }
+      while (old_space_->tasks() > 0) {
+        ml.WaitWithSafepointCheck(thread);
+      }
     }
 #if defined(DEBUG)
     ASSERT(old_space_->iterating_thread_ == NULL);
@@ -407,8 +417,12 @@
       NOT_IN_PRODUCT(PrintStatsToTimeline(&tds, reason));
       EndNewSpaceGC();
     }
-    if ((reason == kNewSpace) && old_space_.NeedsGarbageCollection()) {
-      CollectOldSpaceGarbage(thread, kMarkSweep, kPromotion);
+    if (reason == kNewSpace) {
+      if (old_space_.NeedsGarbageCollection()) {
+        CollectOldSpaceGarbage(thread, kMarkSweep, kPromotion);
+      } else {
+        CheckStartConcurrentMarking(thread, kPromotion);
+      }
     }
   }
 }
@@ -425,7 +439,7 @@
     RecordBeforeGC(type, reason);
     VMTagScope tagScope(thread, VMTag::kGCOldSpaceTagId);
     TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "CollectOldGeneration");
-    old_space_.CollectGarbage(type == kMarkCompact);
+    old_space_.CollectGarbage(type == kMarkCompact, true /* finish */);
     RecordAfterGC(type);
     PrintStats();
     NOT_IN_PRODUCT(PrintStatsToTimeline(&tds, reason));
@@ -477,6 +491,49 @@
       thread, reason == kLowMemory ? kMarkCompact : kMarkSweep, reason);
 }
 
+void Heap::CheckStartConcurrentMarking(Thread* thread, GCReason reason) {
+  {
+    MonitorLocker ml(old_space_.tasks_lock());
+    if (old_space_.phase() != PageSpace::kDone) {
+      return;  // Busy.
+    }
+  }
+
+  if (old_space_.AlmostNeedsGarbageCollection()) {
+    if (BeginOldSpaceGC(thread)) {
+      TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "StartConcurrentMarking");
+      old_space_.CollectGarbage(kMarkSweep, false /* finish */);
+      EndOldSpaceGC();
+    }
+  }
+}
+
+void Heap::CheckFinishConcurrentMarking(Thread* thread) {
+  bool ready;
+  {
+    MonitorLocker ml(old_space_.tasks_lock());
+    ready = old_space_.phase() == PageSpace::kAwaitingFinalization;
+  }
+  if (ready) {
+    CollectOldSpaceGarbage(thread, Heap::kMarkSweep, Heap::kFinalize);
+  }
+}
+
+void Heap::WaitForMarkerTasks(Thread* thread) {
+  MonitorLocker ml(old_space_.tasks_lock());
+  while ((old_space_.phase() == PageSpace::kMarking) ||
+         (old_space_.phase() == PageSpace::kAwaitingFinalization)) {
+    while (old_space_.phase() == PageSpace::kMarking) {
+      ml.WaitWithSafepointCheck(thread);
+    }
+    if (old_space_.phase() == PageSpace::kAwaitingFinalization) {
+      ml.Exit();
+      CollectOldSpaceGarbage(thread, Heap::kMarkSweep, Heap::kFinalize);
+      ml.Enter();
+    }
+  }
+}
+
 void Heap::WaitForSweeperTasks(Thread* thread) {
   MonitorLocker ml(old_space_.tasks_lock());
   while (old_space_.tasks() > 0) {
@@ -656,6 +713,8 @@
       return "promotion";
     case kOldSpace:
       return "old space";
+    case kFinalize:
+      return "finalize";
     case kFull:
       return "full";
     case kExternal:
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 7f2689d..d2d90dd 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -51,6 +51,7 @@
     kNewSpace,   // New space is full.
     kPromotion,  // Old space limit crossed after a scavenge.
     kOldSpace,   // Old space limit crossed.
+    kFinalize,   // Concurrent marking finished.
     kFull,       // Heap::CollectAllGarbage
     kExternal,   // Dart_NewWeakPersistentHandle
     kIdle,       // Dart_NotifyIdle
@@ -132,6 +133,10 @@
   bool NeedsGarbageCollection() const {
     return old_space_.NeedsGarbageCollection();
   }
+
+  void CheckStartConcurrentMarking(Thread* thread, GCReason reason);
+  void CheckFinishConcurrentMarking(Thread* thread);
+  void WaitForMarkerTasks(Thread* thread);
   void WaitForSweeperTasks(Thread* thread);
 
   // Enables growth control on the page space heaps.  This should be
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index c332320..ad51e2f 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -382,21 +382,30 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  old.SetAt(0, neu);
-  old = Array::null();
-  neu = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    old.SetAt(0, neu);
+    old = Array::null();
+    neu = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  EXPECT(size_before == size_after);
+  EXPECT_EQ(size_before, size_after);
 }
 
 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadNewToOld) {
@@ -404,21 +413,30 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  neu.SetAt(0, old);
-  old = Array::null();
-  neu = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    neu.SetAt(0, old);
+    old = Array::null();
+    neu = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  EXPECT(size_before == size_after);
+  EXPECT_EQ(size_before, size_after);
 }
 
 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadGenCycle) {
@@ -426,22 +444,31 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  neu.SetAt(0, old);
-  old.SetAt(0, neu);
-  old = Array::null();
-  neu = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    neu.SetAt(0, old);
+    old.SetAt(0, neu);
+    old = Array::null();
+    neu = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  EXPECT(size_before == size_after);
+  EXPECT_EQ(size_before, size_after);
 }
 
 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOld) {
@@ -449,15 +476,24 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  neu.SetAt(0, old);
-  old = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    neu.SetAt(0, old);
+    old = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
@@ -470,15 +506,24 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  old.SetAt(0, neu);
-  neu = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    old.SetAt(0, neu);
+    neu = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
@@ -491,15 +536,24 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  neu = Array::null();
-  old.SetAt(0, old);
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    neu = Array::null();
+    old.SetAt(0, old);
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
@@ -512,15 +566,24 @@
   Heap* heap = isolate->heap();
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  old = Array::null();
-  neu.SetAt(0, neu);
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    old = Array::null();
+    neu.SetAt(0, neu);
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
+  heap->WaitForMarkerTasks(thread);  // Finalize marking to get live size.
 
   intptr_t size_after =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
@@ -536,13 +599,20 @@
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& old2 = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  old.SetAt(0, old2);
-  neu.SetAt(0, old);
-  old = Array::null();
-  old2 = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& old2 = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    old.SetAt(0, old2);
+    neu.SetAt(0, old);
+    old = Array::null();
+    old2 = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
 
@@ -560,13 +630,20 @@
   intptr_t size_before =
       heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
 
-  Array& old = Array::Handle(Array::New(1, Heap::kOld));
-  Array& neu = Array::Handle(Array::New(1, Heap::kNew));
-  Array& neu2 = Array::Handle(Array::New(1, Heap::kOld));
-  neu.SetAt(0, neu2);
-  old.SetAt(0, neu);
-  neu = Array::null();
-  neu2 = Array::null();
+  {
+    // Prevent allocation from starting marking, otherwise the incremental write
+    // barrier will keep these objects live.
+    NoHeapGrowthControlScope force_growth;
+    EXPECT(!thread->is_marking());
+    Array& old = Array::Handle(Array::New(1, Heap::kOld));
+    Array& neu = Array::Handle(Array::New(1, Heap::kNew));
+    Array& neu2 = Array::Handle(Array::New(1, Heap::kOld));
+    neu.SetAt(0, neu2);
+    old.SetAt(0, neu);
+    neu = Array::null();
+    neu2 = Array::null();
+    EXPECT(!thread->is_marking());
+  }
 
   heap->CollectAllGarbage();
 
diff --git a/runtime/vm/heap/marker.cc b/runtime/vm/heap/marker.cc
index 44012b8..fed194b 100644
--- a/runtime/vm/heap/marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -21,16 +21,29 @@
 
 namespace dart {
 
-class SkippedCodeFunctions : public ZoneAllocated {
+// Collects a list of RawFunction whose code_ or unoptimized_code_ slots were
+// treated as weak (not visited) during marking because they had low usage.
+// These slots (and the corresponding entry_point_ caches) must be cleared after
+// marking if the target RawCode were not otherwise marked. (--collect-code)
+class SkippedCodeFunctions {
  public:
   SkippedCodeFunctions() {}
 
-  void Add(RawFunction* func) { skipped_code_functions_.Add(func); }
+  void Add(RawFunction* func) {
+    // With concurrent mark, we hold raw pointers across safepoints.
+    ASSERT(func->IsOldObject());
+
+    skipped_code_functions_.Add(func);
+  }
 
   void DetachCode() {
 #if defined(DART_PRECOMPILED_RUNTIME)
     UNREACHABLE();
 #else
+    Thread* thread = Thread::Current();
+    StackZone zone(thread);  // For log prints.
+    HANDLESCOPE(thread);
+
     intptr_t unoptimized_code_count = 0;
     intptr_t current_code_count = 0;
     for (int i = 0; i < skipped_code_functions_.length(); i++) {
@@ -81,7 +94,7 @@
   }
 
  private:
-  GrowableArray<RawFunction*> skipped_code_functions_;
+  MallocGrowableArray<RawFunction*> skipped_code_functions_;
 
   DISALLOW_COPY_AND_ASSIGN(SkippedCodeFunctions);
 };
@@ -110,6 +123,8 @@
       }
       marking_stack_->PushBlock(work_);
       work_ = new_work;
+      // Generated code appends to marking stacks; tell MemorySanitizer.
+      MSAN_UNPOISON(work_, sizeof(*work_));
     }
     return work_->Pop();
   }
@@ -132,6 +147,12 @@
     marking_stack_ = NULL;
   }
 
+  void AbandonWork() {
+    marking_stack_->PushBlock(work_);
+    work_ = NULL;
+    marking_stack_ = NULL;
+  }
+
  private:
   MarkingStack::Block* work_;
   MarkingStack* marking_stack_;
@@ -147,26 +168,36 @@
       : ObjectPointerVisitor(isolate),
         thread_(Thread::Current()),
 #ifndef PRODUCT
-        class_stats_count_(isolate->class_table()->NumCids()),
-        class_stats_size_(isolate->class_table()->NumCids()),
+        num_classes_(isolate->class_table()->Capacity()),
+        class_stats_count_(new intptr_t[num_classes_]),
+        class_stats_size_(new intptr_t[num_classes_]),
 #endif  // !PRODUCT
         page_space_(page_space),
         work_list_(marking_stack),
         delayed_weak_properties_(NULL),
         skipped_code_functions_(skipped_code_functions),
-        marked_bytes_(0) {
+        marked_bytes_(0),
+        marked_micros_(0) {
     ASSERT(thread_->isolate() == isolate);
 #ifndef PRODUCT
-    class_stats_count_.SetLength(isolate->class_table()->NumCids());
-    class_stats_size_.SetLength(isolate->class_table()->NumCids());
-    for (intptr_t i = 0; i < class_stats_count_.length(); ++i) {
+    for (intptr_t i = 0; i < num_classes_; i++) {
       class_stats_count_[i] = 0;
       class_stats_size_[i] = 0;
     }
 #endif  // !PRODUCT
   }
 
+  ~MarkingVisitorBase() {
+    delete skipped_code_functions_;
+#ifndef PRODUCT
+    delete[] class_stats_count_;
+    delete[] class_stats_size_;
+#endif  // !PRODUCT
+  }
+
   uintptr_t marked_bytes() const { return marked_bytes_; }
+  int64_t marked_micros() const { return marked_micros_; }
+  void AddMicros(int64_t micros) { marked_micros_ += micros; }
 
 #ifndef PRODUCT
   intptr_t live_count(intptr_t class_id) {
@@ -298,12 +329,12 @@
     }
   }
 
+  void AbandonWork() { work_list_.AbandonWork(); }
+
  private:
   void PushMarked(RawObject* raw_obj) {
     ASSERT(raw_obj->IsHeapObject());
-    ASSERT((FLAG_verify_gc_contains)
-               ? page_space_->Contains(RawObject::ToAddr(raw_obj))
-               : true);
+    ASSERT(raw_obj->IsOldObject());
 
     // Push the marked object on the marking stack.
     ASSERT(raw_obj->IsMarked());
@@ -312,8 +343,9 @@
 
   static bool TryAcquireMarkBit(RawObject* raw_obj) {
     // While it might seem this is redundant with TryAcquireMarkBit, we must
-    // do this check first to avoid attempting an AMO on the read-only
-    // vm-isolate or image pages.
+    // do this check first to avoid attempting an atomic::fetch_and on the
+    // read-only vm-isolate or image pages, which can fault even if there is no
+    // change in the value.
     if (raw_obj->IsMarked()) return false;
 
     if (!sync) {
@@ -330,6 +362,8 @@
       return;
     }
 
+    ASSERT(raw_obj->GetClassId() != kFreeListElement);
+
     if (!TryAcquireMarkBit(raw_obj)) {
       // Already marked.
       return;
@@ -340,8 +374,7 @@
 
 #ifndef PRODUCT
   void UpdateLiveOld(intptr_t class_id, intptr_t size) {
-    // TODO(koda): Support growing the array once mutator runs concurrently.
-    ASSERT(class_id < class_stats_count_.length());
+    ASSERT(class_id < num_classes_);
     class_stats_count_[class_id] += 1;
     class_stats_size_[class_id] += size;
   }
@@ -349,14 +382,16 @@
 
   Thread* thread_;
 #ifndef PRODUCT
-  GrowableArray<intptr_t> class_stats_count_;
-  GrowableArray<intptr_t> class_stats_size_;
+  intptr_t num_classes_;
+  intptr_t* class_stats_count_;
+  intptr_t* class_stats_size_;
 #endif  // !PRODUCT
   PageSpace* page_space_;
   MarkerWorkList work_list_;
   RawWeakProperty* delayed_weak_properties_;
   SkippedCodeFunctions* skipped_code_functions_;
   uintptr_t marked_bytes_;
+  int64_t marked_micros_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(MarkingVisitorBase);
 };
@@ -407,13 +442,13 @@
   DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor);
 };
 
-void GCMarker::Prologue(Isolate* isolate) {
-  isolate->PrepareForGC();
+void GCMarker::Prologue() {
+  isolate_->ReleaseStoreBuffers();
 }
 
-void GCMarker::Epilogue(Isolate* isolate) {
+void GCMarker::Epilogue() {
   // Filter collected objects from the remembered set.
-  StoreBuffer* store_buffer = isolate->store_buffer();
+  StoreBuffer* store_buffer = isolate_->store_buffer();
   StoreBufferBlock* reading = store_buffer->Blocks();
   StoreBufferBlock* writing = store_buffer->PopNonFullBlock();
   while (reading != NULL) {
@@ -440,15 +475,14 @@
   store_buffer->PushBlock(writing, StoreBuffer::kIgnoreThreshold);
 }
 
-void GCMarker::IterateRoots(Isolate* isolate,
-                            ObjectPointerVisitor* visitor,
+void GCMarker::IterateRoots(ObjectPointerVisitor* visitor,
                             intptr_t slice_index,
                             intptr_t num_slices) {
   ASSERT(0 <= slice_index && slice_index < num_slices);
   if ((slice_index == 0) || (num_slices <= 1)) {
     TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "ProcessRoots");
-    isolate->VisitObjectPointers(visitor,
-                                 ValidationPolicy::kDontValidateFrames);
+    isolate_->VisitObjectPointers(visitor,
+                                  ValidationPolicy::kDontValidateFrames);
   }
   if ((slice_index == 1) || (num_slices <= 1)) {
     TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "ProcessNewSpace");
@@ -459,10 +493,10 @@
   // slices are empty.
 }
 
-void GCMarker::IterateWeakRoots(Isolate* isolate, HandleVisitor* visitor) {
-  ApiState* state = isolate->api_state();
+void GCMarker::IterateWeakRoots(HandleVisitor* visitor) {
+  ApiState* state = isolate_->api_state();
   ASSERT(state != NULL);
-  isolate->VisitWeakPersistentHandles(visitor);
+  isolate_->VisitWeakPersistentHandles(visitor);
 }
 
 void GCMarker::ProcessWeakTables(PageSpace* page_space) {
@@ -499,13 +533,13 @@
   }
 };
 
-void GCMarker::ProcessObjectIdTable(Isolate* isolate) {
+void GCMarker::ProcessObjectIdTable() {
 #ifndef PRODUCT
   if (!FLAG_support_service) {
     return;
   }
-  ObjectIdRingClearPointerVisitor visitor(isolate);
-  ObjectIdRing* ring = isolate->object_id_ring();
+  ObjectIdRingClearPointerVisitor visitor(isolate_);
+  ObjectIdRing* ring = isolate_->object_id_ring();
   ASSERT(ring != NULL);
   ring->VisitPointers(&visitor);
 #endif  // !PRODUCT
@@ -515,21 +549,17 @@
  public:
   MarkTask(GCMarker* marker,
            Isolate* isolate,
-           Heap* heap,
-           PageSpace* page_space,
            MarkingStack* marking_stack,
            ThreadBarrier* barrier,
-           bool collect_code,
+           SyncMarkingVisitor* visitor,
            intptr_t task_index,
            intptr_t num_tasks,
            uintptr_t* num_busy)
       : marker_(marker),
         isolate_(isolate),
-        heap_(heap),
-        page_space_(page_space),
         marking_stack_(marking_stack),
         barrier_(barrier),
-        collect_code_(collect_code),
+        visitor_(visitor),
         task_index_(task_index),
         num_tasks_(num_tasks),
         num_busy_(num_busy) {}
@@ -539,21 +569,16 @@
         Thread::EnterIsolateAsHelper(isolate_, Thread::kMarkerTask, true);
     ASSERT(result);
     {
-      Thread* thread = Thread::Current();
-      TIMELINE_FUNCTION_GC_DURATION(thread, "MarkTask");
-      StackZone stack_zone(thread);
-      Zone* zone = stack_zone.GetZone();
-      SkippedCodeFunctions* skipped_code_functions =
-          collect_code_ ? new (zone) SkippedCodeFunctions() : NULL;
-      SyncMarkingVisitor visitor(isolate_, page_space_, marking_stack_,
-                                 skipped_code_functions);
+      TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "MarkTask");
+      int64_t start = OS::GetCurrentMonotonicMicros();
+
       // Phase 1: Iterate over roots and drain marking stack in tasks.
-      marker_->IterateRoots(isolate_, &visitor, task_index_, num_tasks_);
+      marker_->IterateRoots(visitor_, task_index_, num_tasks_);
 
       bool more_to_mark = false;
       do {
         do {
-          visitor.DrainMarkingStack();
+          visitor_->DrainMarkingStack();
 
           // I can't find more work right now. If no other task is busy,
           // then there will never be more work (NB: 1 is *before* decrement).
@@ -583,7 +608,7 @@
 #endif
         // Check if we have any pending properties with marked keys.
         // Those might have been marked by another marker.
-        more_to_mark = visitor.ProcessPendingWeakProperties();
+        more_to_mark = visitor_->ProcessPendingWeakProperties();
         if (more_to_mark) {
           // We have more work to do. Notify others.
           AtomicOperations::FetchAndIncrement(num_busy_);
@@ -607,11 +632,16 @@
       barrier_->Sync();
 
       // Phase 3: Finalize results from all markers (detach code, etc.).
+      int64_t stop = OS::GetCurrentMonotonicMicros();
+      visitor_->AddMicros(stop - start);
       if (FLAG_log_marker_tasks) {
-        THR_Print("Task %" Pd " marked %" Pd " bytes.\n", task_index_,
-                  visitor.marked_bytes());
+        THR_Print("Task %" Pd " marked %" Pd " bytes in %" Pd64 " micros.\n",
+                  task_index_, visitor_->marked_bytes(),
+                  visitor_->marked_micros());
       }
-      marker_->FinalizeResultsFrom(&visitor);
+      marker_->FinalizeResultsFrom(visitor_);
+
+      delete visitor_;
     }
     Thread::ExitIsolateAsHelper(true);
 
@@ -622,11 +652,9 @@
  private:
   GCMarker* marker_;
   Isolate* isolate_;
-  Heap* heap_;
-  PageSpace* page_space_;
   MarkingStack* marking_stack_;
   ThreadBarrier* barrier_;
-  bool collect_code_;
+  SyncMarkingVisitor* visitor_;
   const intptr_t task_index_;
   const intptr_t num_tasks_;
   uintptr_t* num_busy_;
@@ -634,11 +662,91 @@
   DISALLOW_COPY_AND_ASSIGN(MarkTask);
 };
 
+class ConcurrentMarkTask : public ThreadPool::Task {
+ public:
+  ConcurrentMarkTask(GCMarker* marker,
+                     Isolate* isolate,
+                     PageSpace* page_space,
+                     SyncMarkingVisitor* visitor,
+                     intptr_t task_index,
+                     intptr_t num_tasks,
+                     Monitor* roots_monitor,
+                     intptr_t* root_tasks_remaining)
+      : marker_(marker),
+        isolate_(isolate),
+        page_space_(page_space),
+        visitor_(visitor),
+        task_index_(task_index),
+        num_tasks_(num_tasks),
+        roots_monitor_(roots_monitor),
+        root_tasks_remaining_(root_tasks_remaining) {
+#if defined(DEBUG)
+    MonitorLocker ml(page_space_->tasks_lock());
+    ASSERT(page_space_->phase() == PageSpace::kMarking);
+#endif
+  }
+
+  virtual void Run() {
+    bool result =
+        Thread::EnterIsolateAsHelper(isolate_, Thread::kMarkerTask, true);
+    ASSERT(result);
+    {
+      TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "ConcurrentMarkTask");
+      int64_t start = OS::GetCurrentMonotonicMicros();
+
+      marker_->IterateRoots(visitor_, task_index_, num_tasks_);
+      {
+        MonitorLocker ml(roots_monitor_);
+        (*root_tasks_remaining_)--;
+        ml.Notify();
+      }
+
+      visitor_->DrainMarkingStack();
+      int64_t stop = OS::GetCurrentMonotonicMicros();
+      visitor_->AddMicros(stop - start);
+      if (FLAG_log_marker_tasks) {
+        THR_Print("Task %" Pd " marked %" Pd " bytes in %" Pd64 " micros.\n",
+                  task_index_, visitor_->marked_bytes(),
+                  visitor_->marked_micros());
+      }
+    }
+
+    isolate_->ScheduleInterrupts(Thread::kVMInterrupt);
+    // Exit isolate cleanly *before* notifying it, to avoid shutdown race.
+    Thread::ExitIsolateAsHelper(true);
+    // This marker task is done. Notify the original isolate.
+    {
+      MonitorLocker ml(page_space_->tasks_lock());
+      page_space_->set_tasks(page_space_->tasks() - 1);
+      page_space_->set_concurrent_marker_tasks(
+          page_space_->concurrent_marker_tasks() - 1);
+      ASSERT(page_space_->phase() == PageSpace::kMarking);
+      if (page_space_->concurrent_marker_tasks() == 0) {
+        page_space_->set_phase(PageSpace::kAwaitingFinalization);
+      }
+      ml.NotifyAll();
+    }
+  }
+
+ private:
+  GCMarker* marker_;
+  Isolate* isolate_;
+  PageSpace* page_space_;
+  SyncMarkingVisitor* visitor_;
+  const intptr_t task_index_;
+  const intptr_t num_tasks_;
+  Monitor* const roots_monitor_;
+  intptr_t* root_tasks_remaining_;
+
+  DISALLOW_COPY_AND_ASSIGN(ConcurrentMarkTask);
+};
+
 template <class MarkingVisitorType>
 void GCMarker::FinalizeResultsFrom(MarkingVisitorType* visitor) {
   {
     MutexLocker ml(&stats_mutex_);
     marked_bytes_ += visitor->marked_bytes();
+    marked_micros_ += visitor->marked_micros();
 #ifndef PRODUCT
     // Class heap stats are not themselves thread-safe yet, so we update the
     // stats while holding stats_mutex_.
@@ -655,34 +763,116 @@
   visitor->Finalize();
 }
 
-void GCMarker::MarkObjects(Isolate* isolate,
-                           PageSpace* page_space,
-                           bool collect_code) {
-  Prologue(isolate);
-  // The API prologue/epilogue may create/destroy zones, so we must not
-  // depend on zone allocations surviving beyond the epilogue callback.
+intptr_t GCMarker::MarkedWordsPerMicro() const {
+  intptr_t marked_words_per_job_micro;
+  if (marked_micros_ == 0) {
+    marked_words_per_job_micro = marked_words();  // Prevent division by zero.
+  } else {
+    marked_words_per_job_micro = marked_words() / marked_micros_;
+  }
+  if (marked_words_per_job_micro == 0) {
+    marked_words_per_job_micro = 1;  // Prevent division by zero.
+  }
+  intptr_t jobs = FLAG_marker_tasks;
+  if (jobs == 0) {
+    jobs = 1;  // Marking on main thread is still one job.
+  }
+  return marked_words_per_job_micro * jobs;
+}
+
+GCMarker::GCMarker(Isolate* isolate, Heap* heap)
+    : isolate_(isolate),
+      heap_(heap),
+      marking_stack_(),
+      visitors_(),
+      marked_bytes_(0),
+      marked_micros_(0) {
+  visitors_ = new SyncMarkingVisitor*[FLAG_marker_tasks];
+  for (intptr_t i = 0; i < FLAG_marker_tasks; i++) {
+    visitors_[i] = NULL;
+  }
+}
+
+GCMarker::~GCMarker() {
+  // Cleanup in case isolate shutdown happens after starting the concurrent
+  // marker and before finalizing.
+  if (isolate_->marking_stack() != NULL) {
+    isolate_->DisableIncrementalBarrier();
+    for (intptr_t i = 0; i < FLAG_marker_tasks; i++) {
+      visitors_[i]->AbandonWork();
+      delete visitors_[i];
+    }
+  }
+  delete[] visitors_;
+}
+
+void GCMarker::StartConcurrentMark(PageSpace* page_space, bool collect_code) {
+  isolate_->EnableIncrementalBarrier(&marking_stack_);
+
+  const intptr_t num_tasks = FLAG_marker_tasks;
+
+  {
+    // Bulk increase task count before starting any task, instead of
+    // incrementing as each task is started, to prevent a task which
+    // races ahead from falsly beleiving it was the last task to complete.
+    MonitorLocker ml(page_space->tasks_lock());
+    ASSERT(page_space->phase() == PageSpace::kDone);
+    page_space->set_phase(PageSpace::kMarking);
+    page_space->set_tasks(page_space->tasks() + num_tasks);
+    page_space->set_concurrent_marker_tasks(
+        page_space->concurrent_marker_tasks() + num_tasks);
+  }
+
+  Monitor roots_monitor;
+  intptr_t root_tasks_remaining = num_tasks;
+  for (intptr_t i = 0; i < num_tasks; i++) {
+    ASSERT(visitors_[i] == NULL);
+    SkippedCodeFunctions* skipped_code_functions =
+        collect_code ? new SkippedCodeFunctions() : NULL;
+    visitors_[i] = new SyncMarkingVisitor(isolate_, page_space, &marking_stack_,
+                                          skipped_code_functions);
+
+    // Begin marking on a helper thread.
+    bool result = Dart::thread_pool()->Run(new ConcurrentMarkTask(
+        this, isolate_, page_space, visitors_[i], i, num_tasks, &roots_monitor,
+        &root_tasks_remaining));
+    ASSERT(result);
+  }
+
+  // Wait for roots to be marked before exiting safepoint.
+  MonitorLocker ml(&roots_monitor);
+  while (root_tasks_remaining > 0) {
+    ml.Wait();
+  }
+}
+
+void GCMarker::MarkObjects(PageSpace* page_space, bool collect_code) {
+  if (isolate_->marking_stack() != NULL) {
+    isolate_->DisableIncrementalBarrier();
+  }
+
+  Prologue();
   {
     Thread* thread = Thread::Current();
-    StackZone stack_zone(thread);
-    Zone* zone = stack_zone.GetZone();
-    MarkingStack marking_stack;
-    marked_bytes_ = 0;
     const int num_tasks = FLAG_marker_tasks;
     if (num_tasks == 0) {
       TIMELINE_FUNCTION_GC_DURATION(thread, "Mark");
+      int64_t start = OS::GetCurrentMonotonicMicros();
       // Mark everything on main thread.
       SkippedCodeFunctions* skipped_code_functions =
-          collect_code ? new (zone) SkippedCodeFunctions() : NULL;
-      UnsyncMarkingVisitor mark(isolate, page_space, &marking_stack,
+          collect_code ? new SkippedCodeFunctions() : NULL;
+      UnsyncMarkingVisitor mark(isolate_, page_space, &marking_stack_,
                                 skipped_code_functions);
-      IterateRoots(isolate, &mark, 0, 1);
+      IterateRoots(&mark, 0, 1);
       mark.DrainMarkingStack();
       {
         TIMELINE_FUNCTION_GC_DURATION(thread, "ProcessWeakHandles");
         MarkingWeakVisitor mark_weak(thread);
-        IterateWeakRoots(isolate, &mark_weak);
+        IterateWeakRoots(&mark_weak);
       }
       // All marking done; detach code, etc.
+      int64_t stop = OS::GetCurrentMonotonicMicros();
+      mark.AddMicros(stop - start);
       FinalizeResultsFrom(&mark);
     } else {
       ThreadBarrier barrier(num_tasks + 1, heap_->barrier(),
@@ -691,11 +881,23 @@
       uintptr_t num_busy = num_tasks;
       // Phase 1: Iterate over roots and drain marking stack in tasks.
       for (intptr_t i = 0; i < num_tasks; ++i) {
+        SyncMarkingVisitor* visitor;
+        if (visitors_[i] != NULL) {
+          visitor = visitors_[i];
+          visitors_[i] = NULL;
+        } else {
+          SkippedCodeFunctions* skipped_code_functions =
+              collect_code ? new SkippedCodeFunctions() : NULL;
+          visitor = new SyncMarkingVisitor(
+              isolate_, page_space, &marking_stack_, skipped_code_functions);
+        }
+
         MarkTask* mark_task =
-            new MarkTask(this, isolate, heap_, page_space, &marking_stack,
-                         &barrier, collect_code, i, num_tasks, &num_busy);
+            new MarkTask(this, isolate_, &marking_stack_, &barrier, visitor, i,
+                         num_tasks, &num_busy);
         ThreadPool* pool = Dart::thread_pool();
-        pool->Run(mark_task);
+        bool result = pool->Run(mark_task);
+        ASSERT(result);
       }
       bool more_to_mark = false;
       do {
@@ -722,7 +924,7 @@
       {
         TIMELINE_FUNCTION_GC_DURATION(thread, "ProcessWeakHandles");
         MarkingWeakVisitor mark_weak(thread);
-        IterateWeakRoots(isolate, &mark_weak);
+        IterateWeakRoots(&mark_weak);
       }
       barrier.Sync();
 
@@ -730,9 +932,9 @@
       barrier.Exit();
     }
     ProcessWeakTables(page_space);
-    ProcessObjectIdTable(isolate);
+    ProcessObjectIdTable();
   }
-  Epilogue(isolate);
+  Epilogue();
 }
 
 }  // namespace dart
diff --git a/runtime/vm/heap/marker.h b/runtime/vm/heap/marker.h
index 274e99f..10fde88 100644
--- a/runtime/vm/heap/marker.h
+++ b/runtime/vm/heap/marker.h
@@ -6,6 +6,7 @@
 #define RUNTIME_VM_HEAP_MARKER_H_
 
 #include "vm/allocation.h"
+#include "vm/heap/pointer_block.h"
 #include "vm/os_thread.h"  // Mutex.
 
 namespace dart {
@@ -17,40 +18,58 @@
 class ObjectPointerVisitor;
 class PageSpace;
 class RawWeakProperty;
+template <bool sync>
+class MarkingVisitorBase;
 
 // The class GCMarker is used to mark reachable old generation objects as part
 // of the mark-sweep collection. The marking bit used is defined in RawObject.
-class GCMarker : public ValueObject {
+// Instances have a lifetime that spans from the beginining of concurrent
+// marking (or stop-the-world marking) until marking is complete. In particular,
+// an instance may be created and destroyed on different threads if the isolate
+// is exited during concurrent marking.
+class GCMarker {
  public:
-  explicit GCMarker(Heap* heap) : heap_(heap), marked_bytes_(0) {}
-  ~GCMarker() {}
+  GCMarker(Isolate* isolate, Heap* heap);
+  ~GCMarker();
 
-  void MarkObjects(Isolate* isolate, PageSpace* page_space, bool collect_code);
+  // Mark roots synchronously, then spawn tasks to concurrently drain the
+  // marking queue. Only called when no marking or sweeping is in progress.
+  // Marking must later be finalized by calling MarkObjects.
+  void StartConcurrentMark(PageSpace* page_space, bool collect_code);
 
-  intptr_t marked_words() { return marked_bytes_ >> kWordSizeLog2; }
+  // (Re)mark roots, drain the marking queue and finalize weak references.
+  // Does not required StartConcurrentMark to have been previously called.
+  void MarkObjects(PageSpace* page_space, bool collect_code);
+
+  intptr_t marked_words() const { return marked_bytes_ >> kWordSizeLog2; }
+  intptr_t MarkedWordsPerMicro() const;
 
  private:
-  void Prologue(Isolate* isolate);
-  void Epilogue(Isolate* isolate);
-  void IterateRoots(Isolate* isolate,
-                    ObjectPointerVisitor* visitor,
+  void Prologue();
+  void Epilogue();
+  void IterateRoots(ObjectPointerVisitor* visitor,
                     intptr_t slice_index,
                     intptr_t num_slices);
-  void IterateWeakRoots(Isolate* isolate, HandleVisitor* visitor);
+  void IterateWeakRoots(HandleVisitor* visitor);
   template <class MarkingVisitorType>
-  void IterateWeakReferences(Isolate* isolate, MarkingVisitorType* visitor);
+  void IterateWeakReferences(MarkingVisitorType* visitor);
   void ProcessWeakTables(PageSpace* page_space);
-  void ProcessObjectIdTable(Isolate* isolate);
+  void ProcessObjectIdTable();
 
   // Called by anyone: finalize and accumulate stats from 'visitor'.
   template <class MarkingVisitorType>
   void FinalizeResultsFrom(MarkingVisitorType* visitor);
 
-  Heap* heap_;
+  Isolate* const isolate_;
+  Heap* const heap_;
+  MarkingStack marking_stack_;
+  MarkingVisitorBase<true>** visitors_;
 
   Mutex stats_mutex_;
   uintptr_t marked_bytes_;
+  int64_t marked_micros_;
 
+  friend class ConcurrentMarkTask;
   friend class MarkTask;
   DISALLOW_IMPLICIT_CONSTRUCTORS(GCMarker);
 };
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 17dba99..ffa17fd 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -179,8 +179,12 @@
       bump_top_(0),
       bump_end_(0),
       max_capacity_in_words_(max_capacity_in_words),
+      usage_(),
+      allocated_black_in_words_(0),
       tasks_lock_(new Monitor()),
       tasks_(0),
+      concurrent_marker_tasks_(0),
+      phase_(kDone),
 #if defined(DEBUG)
       iterating_thread_(NULL),
 #endif
@@ -188,6 +192,7 @@
                              FLAG_old_gen_growth_space_ratio,
                              FLAG_old_gen_growth_rate,
                              FLAG_old_gen_growth_time_ratio),
+      marker_(NULL),
       gc_time_micros_(0),
       collections_(0),
       mark_words_per_micro_(kConservativeInitialMarkSpeed) {
@@ -209,6 +214,7 @@
   FreePages(image_pages_);
   delete pages_lock_;
   delete tasks_lock_;
+  ASSERT(marker_ == NULL);
 }
 
 intptr_t PageSpace::LargePageSizeInWordsFor(intptr_t size) {
@@ -351,6 +357,16 @@
                                         HeapPage::PageType type,
                                         GrowthPolicy growth_policy,
                                         bool is_locked) {
+  if (growth_policy != kForceGrowth) {
+    if (heap_ != NULL) {  // Some unit tests.
+      Thread* thread = Thread::Current();
+      if (thread->CanCollectGarbage()) {
+        heap_->CheckFinishConcurrentMarking(thread);
+        heap_->CheckStartConcurrentMarking(thread, Heap::kOldSpace);
+      }
+    }
+  }
+
   ASSERT(size < kAllocatablePageSize);
   uword result = 0;
   SpaceUsage after_allocation = GetCurrentUsage();
@@ -563,6 +579,11 @@
   }
 }
 
+void PageSpace::AbandonMarkingForShutdown() {
+  delete marker_;
+  marker_ = NULL;
+}
+
 void PageSpace::UpdateMaxCapacityLocked() {
 #if !defined(PRODUCT)
   if (heap_ == NULL) {
@@ -899,7 +920,18 @@
   return estimated_mark_compact_completion <= deadline;
 }
 
-void PageSpace::CollectGarbage(bool compact) {
+void PageSpace::CollectGarbage(bool compact, bool finalize) {
+  if (!finalize) {
+#if defined(TARGET_ARCH_IA32)
+    return;  // Barrier not implemented.
+#elif !defined(CONCURRENT_MARKING)
+    return;  // Barrier generation disabled.
+#else
+    if (FLAG_marker_tasks == 0) return;   // Concurrent marking disabled.
+    if (FLAG_write_protect_code) return;  // Not implemented.
+#endif
+  }
+
   Thread* thread = Thread::Current();
 
   const int64_t pre_wait_for_sweepers = OS::GetCurrentMonotonicMicros();
@@ -907,9 +939,16 @@
   // Wait for pending tasks to complete and then account for the driver task.
   {
     MonitorLocker locker(tasks_lock());
+    if (!finalize &&
+        (phase() == kMarking || phase() == kAwaitingFinalization)) {
+      // Concurrent mark is already running.
+      return;
+    }
+
     while (tasks() > 0) {
       locker.WaitWithSafepointCheck(thread);
     }
+    ASSERT(phase() == kAwaitingFinalization || phase() == kDone);
     set_tasks(1);
   }
 
@@ -921,7 +960,8 @@
   // loser skips collection and goes straight to allocation.
   {
     SafepointOperationScope safepoint_scope(thread);
-    CollectGarbageAtSafepoint(compact, pre_wait_for_sweepers, pre_safe_point);
+    CollectGarbageAtSafepoint(compact, finalize, pre_wait_for_sweepers,
+                              pre_safe_point);
   }
 
   // Done, reset the task count.
@@ -933,6 +973,7 @@
 }
 
 void PageSpace::CollectGarbageAtSafepoint(bool compact,
+                                          bool finalize,
                                           int64_t pre_wait_for_sweepers,
                                           int64_t pre_safe_point) {
   Thread* thread = Thread::Current();
@@ -942,7 +983,6 @@
 
   const int64_t start = OS::GetCurrentMonotonicMicros();
 
-  NOT_IN_PRODUCT(isolate->class_table()->ResetCountersOld());
   // Perform various cleanup that relies on no tasks interfering.
   isolate->class_table()->FreeOldTables();
 
@@ -957,7 +997,7 @@
 
   if (FLAG_verify_before_gc) {
     OS::PrintErr("Verifying before marking...");
-    heap_->VerifyGC();
+    heap_->VerifyGC(phase() == kDone ? kForbidMarked : kAllowMarked);
     OS::PrintErr(" done.\n");
   }
 
@@ -974,9 +1014,27 @@
   bool collect_code = FLAG_collect_code && ShouldCollectCode() &&
                       !isolate->HasAttemptedReload();
 #endif  // !defined(PRODUCT)
-  GCMarker marker(heap_);
-  marker.MarkObjects(isolate, this, collect_code);
-  usage_.used_in_words = marker.marked_words();
+
+  if (marker_ == NULL) {
+    ASSERT(phase() == kDone);
+    marker_ = new GCMarker(isolate, heap_);
+  } else {
+    ASSERT(phase() == kAwaitingFinalization);
+  }
+
+  if (!finalize) {
+    ASSERT(phase() == kDone);
+    marker_->StartConcurrentMark(this, collect_code);
+    return;
+  }
+
+  NOT_IN_PRODUCT(isolate->class_table()->ResetCountersOld());
+  marker_->MarkObjects(this, collect_code);
+  usage_.used_in_words = marker_->marked_words() + allocated_black_in_words_;
+  allocated_black_in_words_ = 0;
+  mark_words_per_micro_ = marker_->MarkedWordsPerMicro();
+  delete marker_;
+  marker_ = NULL;
 
   int64_t mid1 = OS::GetCurrentMonotonicMicros();
 
@@ -1040,10 +1098,12 @@
 
   if (compact) {
     Compact(thread);
+    set_phase(kDone);
   } else if (FLAG_concurrent_sweep) {
     ConcurrentSweep(isolate);
   } else {
     BlockingSweep();
+    set_phase(kDone);
   }
 
   // Make code pages read-only.
@@ -1055,15 +1115,6 @@
   page_space_controller_.EvaluateGarbageCollection(
       usage_before, GetCurrentUsage(), start, end);
 
-  int64_t mark_micros = mid3 - start;
-  if (mark_micros == 0) {
-    mark_micros = 1;  // Prevent division by zero.
-  }
-  mark_words_per_micro_ = usage_before.used_in_words / mark_micros;
-  if (mark_words_per_micro_ == 0) {
-    mark_words_per_micro_ = 1;  // Prevent division by zero.
-  }
-
   heap_->RecordTime(kConcurrentSweep, pre_safe_point - pre_wait_for_sweepers);
   heap_->RecordTime(kSafePoint, start - pre_safe_point);
   heap_->RecordTime(kMarkObjects, mid1 - start);
@@ -1262,6 +1313,17 @@
   if (heap_growth_ratio_ == 100) {
     return false;
   }
+  return after.CombinedCapacityInWords() >
+         (gc_threshold_in_words_ + heap_->new_space()->CapacityInWords());
+}
+
+bool PageSpaceController::AlmostNeedsGarbageCollection(SpaceUsage after) const {
+  if (!is_enabled_) {
+    return false;
+  }
+  if (heap_growth_ratio_ == 100) {
+    return false;
+  }
   return after.CombinedCapacityInWords() > gc_threshold_in_words_;
 }
 
diff --git a/runtime/vm/heap/pages.h b/runtime/vm/heap/pages.h
index f6b6d96..4255f93 100644
--- a/runtime/vm/heap/pages.h
+++ b/runtime/vm/heap/pages.h
@@ -25,6 +25,7 @@
 class ObjectPointerVisitor;
 class ObjectSet;
 class ForwardingPage;
+class GCMarker;
 
 // TODO(iposva): Determine heap sizes and tune the page size accordingly.
 static const intptr_t kPageSize = 256 * KB;
@@ -150,6 +151,7 @@
   // This method can be called before allocation (e.g., pretenuring) or after
   // (e.g., promotion), as it does not change the state of the controller.
   bool NeedsGarbageCollection(SpaceUsage after) const;
+  bool AlmostNeedsGarbageCollection(SpaceUsage after) const;
 
   // Returns whether an idle GC is worthwhile.
   bool NeedsIdleGarbageCollection(SpaceUsage current) const;
@@ -216,6 +218,7 @@
 class PageSpace {
  public:
   enum GrowthPolicy { kControlGrowth, kForceGrowth };
+  enum Phase { kDone, kMarking, kAwaitingFinalization, kSweeping };
 
   PageSpace(Heap* heap, intptr_t max_capacity_in_words);
   ~PageSpace();
@@ -233,6 +236,9 @@
   bool NeedsGarbageCollection() const {
     return page_space_controller_.NeedsGarbageCollection(usage_);
   }
+  bool AlmostNeedsGarbageCollection() const {
+    return page_space_controller_.AlmostNeedsGarbageCollection(usage_);
+  }
   void EvaluateSnapshotLoad() {
     page_space_controller_.EvaluateSnapshotLoad(usage_);
   }
@@ -279,7 +285,7 @@
   bool ShouldCollectCode();
 
   // Collect the garbage in the page space using mark-sweep or mark-compact.
-  void CollectGarbage(bool compact);
+  void CollectGarbage(bool compact, bool finalize);
 
   void AddRegionsToObjectSet(ObjectSet* set) const;
 
@@ -319,6 +325,11 @@
   void PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream) const;
 #endif  // PRODUCT
 
+  void AllocateBlack(intptr_t size) {
+    AtomicOperations::IncrementBy(&allocated_black_in_words_,
+                                  size >> kWordSizeLog2);
+  }
+
   void AllocateExternal(intptr_t cid, intptr_t size);
   void FreeExternal(intptr_t size);
 
@@ -339,6 +350,13 @@
     ASSERT(val >= 0);
     tasks_ = val;
   }
+  intptr_t concurrent_marker_tasks() const { return concurrent_marker_tasks_; }
+  void set_concurrent_marker_tasks(intptr_t val) {
+    ASSERT(val >= 0);
+    concurrent_marker_tasks_ = val;
+  }
+  Phase phase() const { return phase_; }
+  void set_phase(Phase val) { phase_ = val; }
 
   // Attempt to allocate from bump block rather than normal freelist.
   uword TryAllocateDataBump(intptr_t size, GrowthPolicy growth_policy);
@@ -350,6 +368,8 @@
 
   // Return any bump allocation block to the freelist.
   void AbandonBumpAllocation();
+  // Have threads release marking stack blocks, etc.
+  void AbandonMarkingForShutdown();
 
  private:
   // Ids for time and data records in Heap::GCStats.
@@ -392,6 +412,7 @@
   void FreePages(HeapPage* pages);
 
   void CollectGarbageAtSafepoint(bool compact,
+                                 bool finalize,
                                  int64_t pre_wait_for_sweepers,
                                  int64_t pre_safe_point);
   void BlockingSweep();
@@ -438,14 +459,19 @@
   // NOTE: The capacity component of usage_ is updated by the concurrent
   // sweeper. Use (Increase)CapacityInWords(Locked) for thread-safe access.
   SpaceUsage usage_;
+  intptr_t allocated_black_in_words_;
 
   // Keep track of running MarkSweep tasks.
   Monitor* tasks_lock_;
   intptr_t tasks_;
+  intptr_t concurrent_marker_tasks_;
+  Phase phase_;
+
 #if defined(DEBUG)
   Thread* iterating_thread_;
 #endif
   PageSpaceController page_space_controller_;
+  GCMarker* marker_;
 
   int64_t gc_time_micros_;
   intptr_t collections_;
diff --git a/runtime/vm/heap/pointer_block.cc b/runtime/vm/heap/pointer_block.cc
index f983739..2d0d2a1 100644
--- a/runtime/vm/heap/pointer_block.cc
+++ b/runtime/vm/heap/pointer_block.cc
@@ -15,6 +15,11 @@
 }
 END_LEAF_RUNTIME_ENTRY
 
+DEFINE_LEAF_RUNTIME_ENTRY(void, MarkingStackBlockProcess, 1, Thread* thread) {
+  thread->MarkingStackBlockProcess();
+}
+END_LEAF_RUNTIME_ENTRY
+
 template <int BlockSize>
 typename BlockStack<BlockSize>::List* BlockStack<BlockSize>::global_empty_ =
     NULL;
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index de48b25..b732ff1 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -173,9 +173,15 @@
         // Promoted: update age/barrier tags.
         uint32_t tags = new_obj->ptr()->tags_;
         tags = RawObject::OldBit::update(true, tags);
-        tags = RawObject::OldAndNotMarkedBit::update(true, tags);
         tags = RawObject::OldAndNotRememberedBit::update(true, tags);
         tags = RawObject::NewBit::update(false, tags);
+        // Setting the forwarding pointer below will make this tenured object
+        // visible to the concurrent marker, but we haven't visited its slots
+        // yet. We mark the object here to prevent the concurrent marker from
+        // adding it to the mark stack and visiting its unprocessed slots. We
+        // push it to the mark stack after forwarding its slots.
+        tags =
+            RawObject::OldAndNotMarkedBit::update(!thread_->is_marking(), tags);
         new_obj->ptr()->tags_ = tags;
       }
 
@@ -408,7 +414,7 @@
 SemiSpace* Scavenger::Prologue(Isolate* isolate) {
   NOT_IN_PRODUCT(isolate->class_table()->ResetCountersNew());
 
-  isolate->PrepareForGC();
+  isolate->ReleaseStoreBuffers();
 
   // Flip the two semi-spaces so that to_ is always the space for allocating
   // objects.
@@ -636,6 +642,8 @@
 }
 
 void Scavenger::ProcessToSpace(ScavengerVisitor* visitor) {
+  Thread* thread = Thread::Current();
+
   // Iterate until all work has been drained.
   while ((resolved_top_ < top_) || PromotedStackHasMore()) {
     while (resolved_top_ < top_) {
@@ -659,6 +667,14 @@
         ASSERT(!raw_object->IsRemembered());
         visitor->VisitingOldObject(raw_object);
         raw_object->VisitPointersNonvirtual(visitor);
+        if (raw_object->IsMarked()) {
+          // Complete our promise from ScavengePointer. Note that marker cannot
+          // visit this object until it pops a block from the mark stack, which
+          // involves a memory fence from the mutex, so even on architectures
+          // with a relaxed memory model, the marker will see the fully
+          // forwarded contents of this object.
+          thread->MarkingStackAddObject(raw_object);
+        }
       }
       visitor->VisitingOldObject(NULL);
     }
diff --git a/runtime/vm/heap/sweeper.cc b/runtime/vm/heap/sweeper.cc
index 591cf35..8292a7d 100644
--- a/runtime/vm/heap/sweeper.cc
+++ b/runtime/vm/heap/sweeper.cc
@@ -116,6 +116,7 @@
     ASSERT(freelist_ != NULL);
     MonitorLocker ml(old_space_->tasks_lock());
     old_space_->set_tasks(old_space_->tasks() + 1);
+    old_space_->set_phase(PageSpace::kSweeping);
   }
 
   virtual void Run() {
@@ -156,6 +157,8 @@
     {
       MonitorLocker ml(old_space_->tasks_lock());
       old_space_->set_tasks(old_space_->tasks() - 1);
+      ASSERT(old_space_->phase() == PageSpace::kSweeping);
+      old_space_->set_phase(PageSpace::kDone);
       ml.NotifyAll();
     }
   }
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 9650957..b0bbb27 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -923,19 +923,35 @@
   **SP = result;
   pp_ = InterpreterHelpers::FrameCode(*FP)->ptr()->object_pool_;
 
-  // It is legit to call the constructor of an error object, however a
-  // result of class UnhandledException must be propagated.
-  if (result->IsHeapObject() &&
-      result->GetClassId() == kUnhandledExceptionCid) {
-    (*SP)[0] = UnhandledException::RawCast(result)->ptr()->exception_;
-    (*SP)[1] = UnhandledException::RawCast(result)->ptr()->stacktrace_;
-    (*SP)[2] = 0;  // Space for result.
-    Exit(thread, *FP, *SP + 3, *pc);
-    NativeArguments args(thread, 2, *SP, *SP + 2);
-    if (!InvokeRuntime(thread, this, DRT_ReThrow, args)) {
+  // If the result is an error (not a Dart instance), it must either be rethrown
+  // (in the case of an unhandled exception) or it must be returned to the
+  // caller of the interpreter to be propagated.
+  if (result->IsHeapObject()) {
+    const intptr_t result_cid = result->GetClassId();
+    if (result_cid == kUnhandledExceptionCid) {
+      (*SP)[0] = UnhandledException::RawCast(result)->ptr()->exception_;
+      (*SP)[1] = UnhandledException::RawCast(result)->ptr()->stacktrace_;
+      (*SP)[2] = 0;  // Space for result.
+      Exit(thread, *FP, *SP + 3, *pc);
+      NativeArguments args(thread, 2, *SP, *SP + 2);
+      if (!InvokeRuntime(thread, this, DRT_ReThrow, args)) {
+        return false;
+      }
+      UNREACHABLE();
+    }
+    if (RawObject::IsErrorClassId(result_cid)) {
+      // Unwind to entry frame.
+      fp_ = *FP;
+      pc_ = reinterpret_cast<uword>(SavedCallerPC(fp_));
+      while (!IsEntryFrameMarker(pc_)) {
+        fp_ = SavedCallerFP(fp_);
+        pc_ = reinterpret_cast<uword>(SavedCallerPC(fp_));
+      }
+      // Pop entry frame.
+      fp_ = SavedCallerFP(fp_);
+      special_[KernelBytecode::kExceptionSpecialIndex] = result;
       return false;
     }
-    UNREACHABLE();
   }
   return true;
 }
@@ -1509,7 +1525,7 @@
   do {                                                                         \
     FP = reinterpret_cast<RawObject**>(fp_);                                   \
     pc = reinterpret_cast<uint32_t*>(pc_);                                     \
-    if ((reinterpret_cast<uword>(pc) & 2) != 0) { /* Entry frame? */           \
+    if (IsEntryFrameMarker(reinterpret_cast<uword>(pc))) {                     \
       pp_ = reinterpret_cast<RawObjectPool*>(fp_[kKBCSavedPpSlotFromEntryFp]); \
       argdesc_ =                                                               \
           reinterpret_cast<RawArray*>(fp_[kKBCSavedArgDescSlotFromEntryFp]);   \
@@ -1537,7 +1553,7 @@
   do {                                                                         \
     FP = reinterpret_cast<RawObject**>(fp_);                                   \
     pc = reinterpret_cast<uint32_t*>(pc_);                                     \
-    if ((reinterpret_cast<uword>(pc) & 2) != 0) { /* Entry frame? */           \
+    if (IsEntryFrameMarker(reinterpret_cast<uword>(pc))) {                     \
       pp_ = reinterpret_cast<RawObjectPool*>(fp_[kKBCSavedPpSlotFromEntryFp]); \
       argdesc_ =                                                               \
           reinterpret_cast<RawArray*>(fp_[kKBCSavedArgDescSlotFromEntryFp]);   \
@@ -1616,7 +1632,7 @@
   pc_ = reinterpret_cast<uword>(*pc);  // For the profiler.
 
   // Check if it is a fake PC marking the entry frame.
-  ASSERT((reinterpret_cast<uword>(*pc) & 2) == 0);
+  ASSERT(!IsEntryFrameMarker(reinterpret_cast<uword>(*pc)));
 
   // Restore SP, FP and PP.
   // Unoptimized frame SP is one below FrameArguments(...) because
@@ -2103,6 +2119,17 @@
         INVOKE_RUNTIME(DRT_StackOverflow, args);
       }
     }
+    RawFunction* function = FrameFunction(FP);
+    int32_t counter = ++(function->ptr()->usage_counter_);
+    if (UNLIKELY(FLAG_compilation_counter_threshold >= 0 &&
+                 counter >= FLAG_compilation_counter_threshold &&
+                 !Function::HasCode(function))) {
+      SP[1] = 0;  // Unused code result.
+      SP[2] = function;
+      Exit(thread, FP, SP + 3, pc);
+      NativeArguments native_args(thread, 1, SP + 2, SP + 1);
+      INVOKE_RUNTIME(DRT_OptimizeInvokedFunction, native_args);
+    }
     DISPATCH();
   }
 
@@ -3456,7 +3483,7 @@
     pc_ = reinterpret_cast<uword>(pc);  // For the profiler.
 
     // Check if it is a fake PC marking the entry frame.
-    if ((reinterpret_cast<uword>(pc) & 2) != 0) {
+    if (IsEntryFrameMarker(reinterpret_cast<uword>(pc))) {
       // Pop entry frame.
       fp_ = SavedCallerFP(FP);
       // Restore exit frame info saved in entry frame.
@@ -4771,7 +4798,8 @@
     // Restore caller context as we are going to throw NoSuchMethod.
     pc = SavedCallerPC(FP);
 
-    const bool has_dart_caller = (reinterpret_cast<uword>(pc) & 2) == 0;
+    const bool has_dart_caller =
+        !IsEntryFrameMarker(reinterpret_cast<uword>(pc));
     const intptr_t argc = has_dart_caller ? KernelBytecode::DecodeArgc(pc[-1])
                                           : (reinterpret_cast<uword>(pc) >> 2);
     const intptr_t type_args_len =
diff --git a/runtime/vm/interpreter.h b/runtime/vm/interpreter.h
index 3d98670..73fcadb 100644
--- a/runtime/vm/interpreter.h
+++ b/runtime/vm/interpreter.h
@@ -59,6 +59,9 @@
     return frame >= stack_base() && frame <= get_fp();
   }
 
+  // Identify an entry frame by looking at its pc marker value.
+  static bool IsEntryFrameMarker(uword pc) { return (pc & 2) != 0; }
+
   // Call on program start.
   static void InitOnce();
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 1c155bd..d26ed2e 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -84,6 +84,7 @@
 
 static void DeterministicModeHandler(bool value) {
   if (value) {
+    FLAG_marker_tasks = 0;                // Timing dependent.
     FLAG_background_compilation = false;  // Timing dependent.
     FLAG_collect_code = false;            // Timing dependent.
     FLAG_random_seed = 0x44617274;  // "Dart"
@@ -475,7 +476,7 @@
 void IsolateMessageHandler::MessageNotify(Message::Priority priority) {
   if (priority >= Message::kOOBPriority) {
     // Handle out of band messages even if the mutator thread is busy.
-    I->ScheduleMessageInterrupts();
+    I->ScheduleInterrupts(Thread::kMessageInterrupt);
   }
   Dart_MessageNotifyCallback callback = I->message_notify_callback();
   if (callback) {
@@ -866,8 +867,6 @@
 // that shared monitor.
 Isolate::Isolate(const Dart_IsolateFlags& api_flags)
     : BaseIsolate(),
-      store_buffer_(new StoreBuffer()),
-      heap_(NULL),
       user_tag_(0),
       current_tag_(UserTag::null()),
       default_tag_(UserTag::null()),
@@ -875,6 +874,9 @@
       object_store_(NULL),
       class_table_(),
       single_step_(false),
+      store_buffer_(new StoreBuffer()),
+      marking_stack_(NULL),
+      heap_(NULL),
       isolate_flags_(0),
       background_compiler_(NULL),
 #if !defined(PRODUCT)
@@ -988,6 +990,7 @@
   free(name_);
   delete store_buffer_;
   delete heap_;
+  ASSERT(marking_stack_ == NULL);
   delete object_store_;
   delete api_state_;
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -1169,13 +1172,13 @@
                         is_executable);
 }
 
-void Isolate::ScheduleMessageInterrupts() {
+void Isolate::ScheduleInterrupts(uword interrupt_bits) {
   // We take the threads lock here to ensure that the mutator thread does not
   // exit the isolate while we are trying to schedule interrupts on it.
   MonitorLocker ml(threads_lock());
   Thread* mthread = mutator_thread();
   if (mthread != NULL) {
-    mthread->ScheduleInterrupts(Thread::kMessageInterrupt);
+    mthread->ScheduleInterrupts(interrupt_bits);
   }
 }
 
@@ -1874,12 +1877,15 @@
 
   if (heap_ != NULL) {
     // Wait for any concurrent GC tasks to finish before shutting down.
-    // TODO(koda): Support faster sweeper shutdown (e.g., after current page).
+    // TODO(rmacnak): Interrupt tasks for faster shutdown.
     PageSpace* old_space = heap_->old_space();
     MonitorLocker ml(old_space->tasks_lock());
     while (old_space->tasks() > 0) {
       ml.Wait();
     }
+    // Needs to happen before ~PageSpace so TLS and the thread registery are
+    // still valid.
+    old_space->AbandonMarkingForShutdown();
   }
 
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
@@ -2015,8 +2021,22 @@
   }
 }
 
-void Isolate::PrepareForGC() {
-  thread_registry()->PrepareForGC();
+void Isolate::ReleaseStoreBuffers() {
+  thread_registry()->ReleaseStoreBuffers();
+}
+
+void Isolate::EnableIncrementalBarrier(MarkingStack* marking_stack) {
+  ASSERT(marking_stack_ == NULL);
+  marking_stack_ = marking_stack;
+  thread_registry()->AcquireMarkingStacks();
+  ASSERT(Thread::Current()->is_marking());
+}
+
+void Isolate::DisableIncrementalBarrier() {
+  thread_registry()->ReleaseMarkingStacks();
+  ASSERT(marking_stack_ != NULL);
+  marking_stack_ = NULL;
+  ASSERT(!Thread::Current()->is_marking());
 }
 
 RawClass* Isolate::GetClassForHeapWalkAt(intptr_t cid) {
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 07e6197..c47a9d6 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -202,9 +202,12 @@
   void VisitWeakPersistentHandles(HandleVisitor* visitor);
 
   // Prepares all threads in an isolate for Garbage Collection.
-  void PrepareForGC();
+  void ReleaseStoreBuffers();
+  void EnableIncrementalBarrier(MarkingStack* marking_stack);
+  void DisableIncrementalBarrier();
 
-  StoreBuffer* store_buffer() { return store_buffer_; }
+  StoreBuffer* store_buffer() const { return store_buffer_; }
+  MarkingStack* marking_stack() const { return marking_stack_; }
 
   ThreadRegistry* thread_registry() const { return thread_registry_; }
   SafepointHandler* safepoint_handler() const { return safepoint_handler_; }
@@ -290,7 +293,7 @@
 
   void SetupImagePage(const uint8_t* snapshot_buffer, bool is_executable);
 
-  void ScheduleMessageInterrupts();
+  void ScheduleInterrupts(uword interrupt_bits);
 
   // Marks all libraries as loaded.
   void DoneLoading();
@@ -854,8 +857,6 @@
   // in SIMARM(IA32) and ARM, and the same offsets in SIMARM64(X64) and ARM64.
   // We use only word-sized fields to avoid differences in struct packing on the
   // different architectures. See also CheckOffsets in dart.cc.
-  StoreBuffer* store_buffer_;
-  Heap* heap_;
   uword user_tag_;
   RawUserTag* current_tag_;
   RawUserTag* default_tag_;
@@ -863,6 +864,11 @@
   ObjectStore* object_store_;
   ClassTable class_table_;
   bool single_step_;
+  // End accessed from generated code.
+
+  StoreBuffer* store_buffer_;
+  MarkingStack* marking_stack_;
+  Heap* heap_;
 
 #define ISOLATE_FLAG_BITS(V)                                                   \
   V(ErrorsFatal)                                                               \
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index 7bbc8f8..335a140 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -686,6 +686,12 @@
   return false;
 }
 
+bool IsFieldInitializer(const Function& function, Zone* zone) {
+  return (function.kind() == RawFunction::kImplicitStaticFinalGetter) &&
+         String::Handle(zone, function.name())
+             .StartsWith(Symbols::InitPrefix());
+}
+
 }  // namespace kernel
 }  // namespace dart
 
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 5b8e9a2..534d18f 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -198,6 +198,8 @@
 // as such function already checks all of its parameters.
 bool NeedsDynamicInvocationForwarder(const Function& function);
 
+bool IsFieldInitializer(const Function& function, Zone* zone);
+
 }  // namespace kernel
 }  // namespace dart
 
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 5ffbc1b..49cbe58 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -197,6 +197,26 @@
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
+DART_EXPORT Dart_Handle Dart_ReadAllBytecode() {
+#if defined(DART_PRECOMPILED_RUNTIME)
+  return Api::NewError("%s: Cannot read bytecode on an AOT runtime.",
+                       CURRENT_FUNC);
+#else
+  DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
+  Dart_Handle result = Api::CheckAndFinalizePendingClasses(T);
+  if (::Dart_IsError(result)) {
+    return result;
+  }
+  CHECK_CALLBACK_STATE(T);
+  const Error& error = Error::Handle(T->zone(), Library::ReadAllBytecode());
+  if (!error.IsNull()) {
+    return Api::NewHandle(T, error.raw());
+  }
+  return Api::Success();
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
+}
+
 DART_EXPORT Dart_Handle Dart_ParseAll() {
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 39c6839..0a4719f 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -13,6 +13,7 @@
 #include "vm/compiler/aot/precompiler.h"
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/assembler/disassembler.h"
+#include "vm/compiler/frontend/bytecode_reader.h"
 #include "vm/compiler/frontend/kernel_fingerprints.h"
 #include "vm/compiler/frontend/kernel_translation_helper.h"
 #include "vm/compiler/intrinsifier.h"
@@ -2042,26 +2043,31 @@
   InitializeObject(address, cls_id, size, (isolate == Dart::vm_isolate()));
   RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag);
   ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_));
+  if (raw_obj->IsOldObject() && thread->is_marking()) {
+    // Black allocation. Prevents a data race between the mutator and concurrent
+    // marker on ARM and ARM64 (the marker may observe a publishing store of
+    // this object before the stores that initialize its slots), and helps the
+    // collection to finish sooner.
+    raw_obj->SetMarkBitUnsynchronized();
+    heap->old_space()->AllocateBlack(size);
+  }
   return raw_obj;
 }
 
-class StoreBufferUpdateVisitor : public ObjectPointerVisitor {
+class WriteBarrierUpdateVisitor : public ObjectPointerVisitor {
  public:
-  explicit StoreBufferUpdateVisitor(Thread* thread, RawObject* obj)
+  explicit WriteBarrierUpdateVisitor(Thread* thread, RawObject* obj)
       : ObjectPointerVisitor(thread->isolate()),
         thread_(thread),
         old_obj_(obj) {
     ASSERT(old_obj_->IsOldObject());
   }
 
-  void VisitPointers(RawObject** first, RawObject** last) {
-    for (RawObject** curr = first; curr <= last; ++curr) {
-      RawObject* raw_obj = *curr;
-      if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) {
-        old_obj_->SetRememberedBit();
-        thread_->StoreBufferAddObject(old_obj_);
-        // Remembered this object. There is no need to continue searching.
-        return;
+  void VisitPointers(RawObject** from, RawObject** to) {
+    for (RawObject** slot = from; slot <= to; ++slot) {
+      RawObject* value = *slot;
+      if (value->IsHeapObject()) {
+        old_obj_->CheckHeapPointerStore(value, thread_);
       }
     }
   }
@@ -2070,7 +2076,7 @@
   Thread* thread_;
   RawObject* old_obj_;
 
-  DISALLOW_COPY_AND_ASSIGN(StoreBufferUpdateVisitor);
+  DISALLOW_COPY_AND_ASSIGN(WriteBarrierUpdateVisitor);
 };
 
 bool Object::IsReadOnlyHandle() const {
@@ -2086,9 +2092,6 @@
   intptr_t size = orig.raw()->Size();
   RawObject* raw_clone = Object::Allocate(cls.id(), size, space);
   NoSafepointScope no_safepoint;
-  // TODO(koda): This will trip when we start allocating black.
-  // Revisit code below at that point, to account for the new write barrier.
-  ASSERT(!(raw_clone->IsOldObject() && raw_clone->IsMarked()));
   // Copy the body of the original into the clone.
   uword orig_addr = RawObject::ToAddr(orig.raw());
   uword clone_addr = RawObject::ToAddr(raw_clone);
@@ -2100,11 +2103,8 @@
   if (!raw_clone->IsOldObject()) {
     // No need to remember an object in new space.
     return raw_clone;
-  } else if (orig.raw()->IsOldObject() && !orig.raw()->IsRemembered()) {
-    // Old original doesn't need to be remembered, so neither does the clone.
-    return raw_clone;
   }
-  StoreBufferUpdateVisitor visitor(Thread::Current(), raw_clone);
+  WriteBarrierUpdateVisitor visitor(Thread::Current(), raw_clone);
   raw_clone->VisitPointers(&visitor);
   return raw_clone;
 }
@@ -5966,8 +5966,27 @@
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
+bool Function::IsBytecodeAllowed(Zone* zone) const {
+  switch (kind()) {
+    case RawFunction::kImplicitGetter:
+    case RawFunction::kImplicitSetter:
+    case RawFunction::kMethodExtractor:
+    case RawFunction::kNoSuchMethodDispatcher:
+    case RawFunction::kInvokeFieldDispatcher:
+    case RawFunction::kDynamicInvocationForwarder:
+    case RawFunction::kImplicitClosureFunction:
+    case RawFunction::kIrregexpFunction:
+      return false;
+    case RawFunction::kImplicitStaticFinalGetter:
+      return kernel::IsFieldInitializer(*this, zone);
+    default:
+      return true;
+  }
+}
+
 void Function::AttachBytecode(const Code& value) const {
   DEBUG_ASSERT(IsMutatorOrAtSafepoint());
+  ASSERT(FLAG_enable_interpreter || FLAG_use_bytecode_compiler);
   // Finish setting up code before activating it.
   value.set_owner(*this);
   StorePointer(&raw_ptr()->bytecode_, value.raw());
@@ -5975,7 +5994,7 @@
   // We should not have loaded the bytecode if the function had code.
   ASSERT(!HasCode());
 
-  if (!FLAG_use_bytecode_compiler) {
+  if (FLAG_enable_interpreter) {
     // Set the code entry_point to InterpretCall stub.
     SetInstructions(Code::Handle(StubCode::InterpretCall_entry()->code()));
   }
@@ -6081,7 +6100,7 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   UNREACHABLE();
 #else
-  ASSERT(Thread::Current()->IsMutatorThread());
+  DEBUG_ASSERT(IsMutatorOrAtSafepoint());
   ASSERT(value.IsNull() || !value.is_optimized());
   StorePointer(&raw_ptr()->unoptimized_code_, value.raw());
 #endif
@@ -12466,7 +12485,8 @@
 
   const Function& callee = Function::Cast(result);
 
-  if (type_definitions.Length() == 0) {
+  // type_arguments is null if all type arguments are dynamic.
+  if (type_definitions.Length() == 0 || type_arguments.IsNull()) {
     return DartEntry::InvokeFunction(callee, arguments);
   }
 
@@ -13302,6 +13322,51 @@
   return Error::null();
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+RawError* Library::ReadAllBytecode() {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Error& error = Error::Handle(zone);
+  const GrowableObjectArray& libs = GrowableObjectArray::Handle(
+      Isolate::Current()->object_store()->libraries());
+  Library& lib = Library::Handle(zone);
+  Class& cls = Class::Handle(zone);
+  for (int i = 0; i < libs.Length(); i++) {
+    lib ^= libs.At(i);
+    ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
+    while (it.HasNext()) {
+      cls = it.GetNextClass();
+      error = cls.EnsureIsFinalized(thread);
+      if (!error.IsNull()) {
+        return error.raw();
+      }
+      error = Compiler::ReadAllBytecode(cls);
+      if (!error.IsNull()) {
+        return error.raw();
+      }
+    }
+  }
+
+  // Inner functions get added to the closures array. As part of compilation
+  // more closures can be added to the end of the array. Compile all the
+  // closures until we have reached the end of the "worklist".
+  const GrowableObjectArray& closures = GrowableObjectArray::Handle(
+      zone, Isolate::Current()->object_store()->closure_functions());
+  Function& func = Function::Handle(zone);
+  for (int i = 0; i < closures.Length(); i++) {
+    func ^= closures.At(i);
+    if (func.IsBytecodeAllowed(zone) && !func.HasBytecode()) {
+      RawError* error =
+          kernel::BytecodeReader::ReadFunctionBytecode(thread, func);
+      if (error != Error::null()) {
+        return error;
+      }
+    }
+  }
+  return Error::null();
+}
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
 RawError* Library::ParseAll(Thread* thread) {
   Zone* zone = thread->zone();
   Error& error = Error::Handle(zone);
@@ -15595,7 +15660,7 @@
 }
 
 const Code::Comments& Code::comments() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
   Comments* comments = new Code::Comments(Array::Handle());
 #else
   Comments* comments = new Code::Comments(Array::Handle(raw_ptr()->comments_));
@@ -15604,7 +15669,7 @@
 }
 
 void Code::set_comments(const Code::Comments& comments) const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
   UNREACHABLE();
 #else
   ASSERT(comments.comments_.IsOld());
@@ -15613,7 +15678,7 @@
 }
 
 void Code::SetPrologueOffset(intptr_t offset) const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
   UNREACHABLE();
 #else
   ASSERT(offset >= 0);
@@ -15624,7 +15689,8 @@
 }
 
 intptr_t Code::GetPrologueOffset() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
+  UNREACHABLE();
   return -1;
 #else
   const Object& object = Object::Handle(raw_ptr()->return_address_metadata_);
@@ -15662,8 +15728,8 @@
     result.set_pointer_offsets_length(pointer_offsets_length);
     result.set_is_optimized(false);
     result.set_is_alive(false);
-    result.set_comments(Comments::New(0));
-    result.set_compile_timestamp(0);
+    NOT_IN_PRODUCT(result.set_comments(Comments::New(0)));
+    NOT_IN_PRODUCT(result.set_compile_timestamp(0));
     result.set_pc_descriptors(Object::empty_descriptors());
   }
   return result.raw();
@@ -15777,15 +15843,14 @@
   }
 #endif
 
+#ifndef PRODUCT
   const Code::Comments& comments = assembler->GetCodeComments();
 
   code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
-#ifndef PRODUCT
   CodeCommentsWrapper comments_wrapper(comments);
   CodeObservers::NotifyAll(name, instrs.PayloadStart(),
                            assembler->prologue_offset(), instrs.Size(),
                            optimized, &comments_wrapper);
-#endif
   code.set_comments(comments);
   if (assembler->prologue_offset() >= 0) {
     code.SetPrologueOffset(assembler->prologue_offset());
@@ -15796,6 +15861,7 @@
   }
   INC_STAT(Thread::Current(), total_code_size,
            code.comments().comments_.Length());
+#endif
   return code.raw();
 }
 
@@ -16141,7 +16207,7 @@
 }
 
 RawArray* Code::await_token_positions() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
   return Array::null();
 #else
   return raw_ptr()->await_token_positions_;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 11ea398..4aace8f 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2376,6 +2376,7 @@
   }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
+  bool IsBytecodeAllowed(Zone* zone) const;
   void AttachBytecode(const Code& bytecode) const;
   RawCode* Bytecode() const { return raw_ptr()->bytecode_; }
   bool HasBytecode() const;
@@ -4100,6 +4101,10 @@
   // Eagerly compile all classes and functions in the library.
   static RawError* CompileAll();
   static RawError* ParseAll(Thread* thread);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // Eagerly read all bytecode.
+  static RawError* ReadAllBytecode();
+#endif
 
 #if defined(DART_NO_SNAPSHOT)
   // Checks function fingerprints. Prints mismatches and aborts if
@@ -5121,7 +5126,7 @@
   void set_comments(const Comments& comments) const;
 
   RawObject* return_address_metadata() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
     UNREACHABLE();
     return NULL;
 #else
@@ -5162,7 +5167,7 @@
   void DumpSourcePositions() const;
 
   RawLocalVarDescriptors* var_descriptors() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
     UNREACHABLE();
     return NULL;
 #else
@@ -5170,7 +5175,7 @@
 #endif
   }
   void set_var_descriptors(const LocalVarDescriptors& value) const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
     UNREACHABLE();
 #else
     ASSERT(value.IsOld());
@@ -5258,7 +5263,7 @@
   const char* QualifiedName() const;
 
   int64_t compile_timestamp() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
     return 0;
 #else
     return raw_ptr()->compile_timestamp_;
@@ -5324,7 +5329,7 @@
   static const intptr_t kEntrySize = sizeof(int32_t);  // NOLINT
 
   void set_compile_timestamp(int64_t timestamp) const {
-#if defined(DART_PRECOMPILED_RUNTIME)
+#if defined(PRODUCT)
     UNREACHABLE();
 #else
     StoreNonPointer(&raw_ptr()->compile_timestamp_, timestamp);
@@ -9292,8 +9297,9 @@
 
   static void Clear(RawWeakProperty* raw_weak) {
     ASSERT(raw_weak->ptr()->next_ == 0);
-    raw_weak->StorePointer(&(raw_weak->ptr()->key_), Object::null());
-    raw_weak->StorePointer(&(raw_weak->ptr()->value_), Object::null());
+    // This action is performed by the GC. No barrier.
+    raw_weak->ptr()->key_ = Object::null();
+    raw_weak->ptr()->value_ = Object::null();
   }
 
  private:
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 1046b77..95e3f16 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -501,6 +501,7 @@
 intptr_t ObjectGraph::InboundReferences(Object* obj, const Array& references) {
   Object& scratch = Object::Handle();
   HeapIterationScope iteration(Thread::Current());
+  NoSafepointScope no_safepoint;
   InboundReferencesVisitor visitor(isolate(), obj->raw(), references, &scratch);
   iteration.IterateObjects(&visitor);
   return visitor.length();
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index f69e319..881cc0d 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -1006,8 +1006,6 @@
     EXPECT(walker.Down());
     EXPECT_STREQ("new _List", walker.CurrentName());
     EXPECT(walker.Down());
-    EXPECT_STREQ("new List", walker.CurrentName());
-    EXPECT(walker.Down());
     EXPECT_STREQ("foo", walker.CurrentName());
     EXPECT(!walker.Down());
   }
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index f8dacf3..adc81d8 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -690,35 +690,21 @@
   template <typename type>
   void StorePointer(type const* addr, type value) {
     *const_cast<type*>(addr) = value;
-
-    if (!value->IsHeapObject()) return;
-
-    uint32_t source_tags = this->ptr()->tags_;
-    uint32_t target_tags = value->ptr()->tags_;
-    Thread* thread = Thread::Current();
-    if (((source_tags >> kBarrierOverlapShift) & target_tags &
-         thread->write_barrier_mask()) != 0) {
-      if (value->IsNewObject()) {
-        // Generational barrier: record when a store creates an
-        // old-and-not-remembered -> new reference.
-        ASSERT(!this->IsRemembered());
-        this->SetRememberedBit();
-        thread->StoreBufferAddObject(this);
-      } else {
-        // Incremental barrier: record when a store creates an
-        // old -> old-and-not-marked reference.
-        ASSERT(value->IsOldObject());
-        UNREACHABLE();
-      }
+    if (value->IsHeapObject()) {
+      CheckHeapPointerStore(value, Thread::Current());
     }
   }
 
   template <typename type>
   void StorePointer(type const* addr, type value, Thread* thread) {
     *const_cast<type*>(addr) = value;
+    if (value->IsHeapObject()) {
+      CheckHeapPointerStore(value, thread);
+    }
+  }
 
-    if (!value->IsHeapObject()) return;
-
+  DART_FORCE_INLINE
+  void CheckHeapPointerStore(RawObject* value, Thread* thread) {
     uint32_t source_tags = this->ptr()->tags_;
     uint32_t target_tags = value->ptr()->tags_;
     if (((source_tags >> kBarrierOverlapShift) & target_tags &
@@ -733,7 +719,9 @@
         // Incremental barrier: record when a store creates an
         // old -> old-and-not-marked reference.
         ASSERT(value->IsOldObject());
-        UNREACHABLE();
+        if (value->TryAcquireMarkBit()) {
+          thread->MarkingStackAddObject(value);
+        }
       }
     }
   }
@@ -811,6 +799,7 @@
   friend class ObjectGraph::Stack;  // GetClassId
   friend class Precompiler;         // GetClassId
   friend class ObjectOffsetTrait;   // GetClassId
+  friend class WriteBarrierUpdateVisitor;  // CheckHeapPointerStore
 
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject);
@@ -1397,24 +1386,27 @@
   RawArray* stackmaps_;
   RawArray* inlined_id_to_function_;
   RawCodeSourceMap* code_source_map_;
-  NOT_IN_PRECOMPILED(RawArray* await_token_positions_);
   NOT_IN_PRECOMPILED(RawInstructions* active_instructions_);
   NOT_IN_PRECOMPILED(RawArray* deopt_info_array_);
   // (code-offset, function, code) triples.
   NOT_IN_PRECOMPILED(RawArray* static_calls_target_table_);
+  NOT_IN_PRODUCT(RawArray* await_token_positions_);
   // If return_address_metadata_ is a Smi, it is the offset to the prologue.
   // Else, return_address_metadata_ is null.
-  NOT_IN_PRECOMPILED(RawObject* return_address_metadata_);
-  NOT_IN_PRECOMPILED(RawLocalVarDescriptors* var_descriptors_);
-  NOT_IN_PRECOMPILED(RawArray* comments_);
-#if defined(DART_PRECOMPILED_RUNTIME)
+  NOT_IN_PRODUCT(RawObject* return_address_metadata_);
+  NOT_IN_PRODUCT(RawLocalVarDescriptors* var_descriptors_);
+  NOT_IN_PRODUCT(RawArray* comments_);
+
+#if !defined(PRODUCT)
+  VISIT_TO(RawObject*, comments_);
+#elif defined(DART_PRECOMPILED_RUNTIME)
   VISIT_TO(RawObject*, code_source_map_);
 #else
-  VISIT_TO(RawObject*, comments_);
+  VISIT_TO(RawObject*, static_calls_target_table_);
 #endif
 
   // Compilation timestamp.
-  NOT_IN_PRECOMPILED(int64_t compile_timestamp_);
+  NOT_IN_PRODUCT(int64_t compile_timestamp_);
 
   // state_bits_ is a bitfield with three fields:
   // The optimized bit, the alive bit, and a count of the number of pointer
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index eca3f35..e5db6fa 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -7,6 +7,7 @@
 #include "vm/ast.h"
 #include "vm/code_patcher.h"
 #include "vm/compiler/assembler/assembler.h"
+#include "vm/compiler/frontend/bytecode_reader.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_entry.h"
@@ -636,18 +637,24 @@
     }
     return;
   }
+  Class& instance_class = Class::Handle(zone);
   if (instance.IsSmi()) {
-    if (FLAG_trace_type_checks) {
-      OS::PrintErr("UpdateTypeTestCache: instance is Smi\n");
+    if (FLAG_enable_interpreter) {
+      instance_class = Smi::Class();
+    } else {
+      if (FLAG_trace_type_checks) {
+        OS::PrintErr("UpdateTypeTestCache: instance is Smi, not updating\n");
+      }
+      return;
     }
-    return;
+  } else {
+    instance_class = instance.clazz();
   }
   // If the type is uninstantiated and refers to parent function type
   // parameters, the function_type_arguments have been canonicalized
   // when concatenated.
   ASSERT(function_type_arguments.IsNull() ||
          function_type_arguments.IsCanonical());
-  const Class& instance_class = Class::Handle(zone, instance.clazz());
   auto& instance_class_id_or_function = Object::Handle(zone);
   auto& instance_type_arguments = TypeArguments::Handle(zone);
   auto& instance_parent_function_type_arguments = TypeArguments::Handle(zone);
@@ -2146,9 +2153,15 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   const Function& function = Function::CheckedHandle(zone, arguments.ArgAt(0));
   ASSERT(!function.IsNull());
-  ASSERT(function.HasCode());
 
-  if (Compiler::CanOptimizeFunction(thread, function)) {
+  // If running with interpreter, do the unoptimized compilation first.
+  const bool unoptimized_compilation =
+      FLAG_enable_interpreter && !function.WasCompiled();
+
+  ASSERT(unoptimized_compilation || function.HasCode());
+
+  if (unoptimized_compilation ||
+      Compiler::CanOptimizeFunction(thread, function)) {
     if (FLAG_background_compilation) {
       Field& field = Field::Handle(zone, isolate->GetDeoptimizingBoxedField());
       while (!field.IsNull()) {
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 14cc6b7..a75bcbb 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -60,6 +60,7 @@
   V(intptr_t, DeoptimizeCopyFrame, uword, uword)                               \
   V(void, DeoptimizeFillFrame, uword)                                          \
   V(void, StoreBufferBlockProcess, Thread*)                                    \
+  V(void, MarkingStackBlockProcess, Thread*)                                   \
   V(double, LibcPow, double, double)                                           \
   V(double, DartModulo, double, double)                                        \
   V(double, LibcFloor, double)                                                 \
diff --git a/runtime/vm/signal_handler.h b/runtime/vm/signal_handler.h
index 69e897a..41eea90 100644
--- a/runtime/vm/signal_handler.h
+++ b/runtime/vm/signal_handler.h
@@ -94,19 +94,26 @@
                                                              void* context_) {
     // IT (If-Then) instruction makes up to four instructions that follow it
     // conditional.
-    asm volatile("nop; nop; nop; nop" : : : "memory");
+    // Note: clobber all register so that compiler does not attempt to hoist
+    // anything from the next assembly block past this one.
+    asm volatile("nop; nop; nop; nop;"
+                 :
+                 :
+                 : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
+                   "r10", "r11", "r12", "r13", "r14", "memory");
 
     // Tail-call into the actual signal handler.
+    //
     // Note: this code is split into a separate inline assembly block because
     // any code that compiler generates to satisfy register constraints must
     // be generated after four NOPs.
-    register int arg0 asm("r0") = signal;
-    register siginfo_t* arg1 asm("r1") = info;
-    register void* arg2 asm("r2") = context_;
-    asm volatile("bx %3"
-                 :
-                 : "r"(arg0), "r"(arg1), "r"(arg2), "r"(action)
-                 : "memory");
+    //
+    // Note: there is no portable way to specify that we want to have
+    // signal, info and context_ in r0 - r2 respectively. So we just mark them
+    // as clobbered and hope that compiler does not emit any code that uses
+    // these registers to satisfy action constraint (we tested on clang and
+    // the generated code looks like one would expect).
+    asm volatile("bx %0;" : : "r"(action) : "r0", "r1", "r2", "memory");
   }
 #endif  // defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
 };
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 759469a..472a825 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -11,6 +11,7 @@
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/flags.h"
 #include "vm/heap/safepoint.h"
+#include "vm/interpreter.h"
 #include "vm/object_store.h"
 #include "vm/snapshot.h"
 #include "vm/virtual_memory.h"
@@ -96,7 +97,7 @@
   if (FLAG_enable_interpreter) {
     if (is_interpreted_frame) {
       // Recognize special marker set up by interpreter in entry frame.
-      return (pc & 2) != 0;
+      return Interpreter::IsEntryFrameMarker(pc);
     }
     {
       uword entry = StubCode::InvokeDartCodeFromBytecode_entry()->EntryPoint();
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index d00c0f6..fdbdd82 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1200,7 +1200,56 @@
 
 #if defined(CONCURRENT_MARKING)
   __ Bind(&add_to_mark_stack);
-  __ Stop("Incremental barrier");
+  __ PushList((1 << R1) | (1 << R2) | (1 << R3));  // Spill.
+
+  Label marking_retry, lost_race, marking_overflow;
+  if (TargetCPUFeatures::arm_version() == ARMv5TE) {
+// TODO(21263): Implement 'swp' and use it below.
+#if !defined(USING_SIMULATOR)
+    ASSERT(OS::NumberOfAvailableProcessors() <= 1);
+#endif
+    __ ldr(R2, FieldAddress(TMP, Object::tags_offset()));
+    __ bic(R2, R2, Operand(1 << RawObject::kOldAndNotMarkedBit));
+    __ str(R2, FieldAddress(TMP, Object::tags_offset()));
+  } else {
+    // Atomically clear kOldAndNotMarkedBit.
+    ASSERT(Object::tags_offset() == 0);
+    __ sub(R3, TMP, Operand(kHeapObjectTag));
+    // R3: Untagged address of header word (ldrex/strex do not support offsets).
+    __ Bind(&marking_retry);
+    __ ldrex(R2, R3);
+    __ tst(R2, Operand(1 << RawObject::kOldAndNotMarkedBit));
+    __ b(&lost_race, ZERO);
+    __ bic(R2, R2, Operand(1 << RawObject::kOldAndNotMarkedBit));
+    __ strex(R1, R2, R3);
+    __ cmp(R1, Operand(1));
+    __ b(&marking_retry, EQ);
+  }
+
+  __ ldr(R1, Address(THR, Thread::marking_stack_block_offset()));
+  __ ldr(R2, Address(R1, MarkingStackBlock::top_offset()));
+  __ add(R3, R1, Operand(R2, LSL, kWordSizeLog2));
+  __ str(TMP, Address(R3, MarkingStackBlock::pointers_offset()));
+  __ add(R2, R2, Operand(1));
+  __ str(R2, Address(R1, MarkingStackBlock::top_offset()));
+  __ CompareImmediate(R2, MarkingStackBlock::kSize);
+  __ PopList((1 << R1) | (1 << R2) | (1 << R3));  // Unspill.
+  __ b(&marking_overflow, EQ);
+  __ Ret();
+
+  __ Bind(&marking_overflow);
+  __ Push(CODE_REG);
+  __ ldr(CODE_REG, Address(THR, Thread::write_barrier_code_offset()));
+  __ EnterCallRuntimeFrame(0 * kWordSize);
+  __ mov(R0, Operand(THR));
+  __ CallRuntime(kMarkingStackBlockProcessRuntimeEntry, 1);
+  __ LeaveCallRuntimeFrame();
+  __ Pop(CODE_REG);
+  __ Ret();
+
+  __ Bind(&lost_race);
+  __ PopList((1 << R1) | (1 << R2) | (1 << R3));  // Unspill.
+  __ Ret();
 #endif
 }
 
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index c63f0e8..0f1bf6f 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -1066,10 +1066,6 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   __ Stop("Not using interpreter");
 #else
-  if (!FLAG_enable_interpreter) {
-    __ Stop("Not using interpreter");
-    return;
-  }
   // Copy the C stack pointer (R31) into the stack pointer we'll actually use
   // to access the stack.
   __ SetupDartSP();
@@ -1405,7 +1401,52 @@
 
 #if defined(CONCURRENT_MARKING)
   __ Bind(&add_to_mark_stack);
-  __ Stop("Incremental barrier");
+  __ Push(R1);  // Spill.
+  __ Push(R2);  // Spill.
+  __ Push(R3);  // Spill.
+
+  // Atomically clear kOldAndNotMarkedBit.
+  // Note that we use 32 bit operations here to match the size of the
+  // background sweeper which is also manipulating this 32 bit word.
+  Label marking_retry, lost_race, marking_overflow;
+  ASSERT(Object::tags_offset() == 0);
+  __ sub(R3, TMP2, Operand(kHeapObjectTag));
+  // R3: Untagged address of header word (ldxr/stxr do not support offsets).
+  __ Bind(&marking_retry);
+  __ ldxr(R2, R3, kWord);
+  __ tbz(&lost_race, R2, RawObject::kOldAndNotMarkedBit);
+  __ AndImmediate(R2, R2, ~(1 << RawObject::kOldAndNotMarkedBit));
+  __ stxr(R1, R2, R3, kWord);
+  __ cbnz(&marking_retry, R1);
+
+  __ LoadFromOffset(R1, THR, Thread::marking_stack_block_offset());
+  __ LoadFromOffset(R2, R1, MarkingStackBlock::top_offset(), kUnsignedWord);
+  __ add(R3, R1, Operand(R2, LSL, kWordSizeLog2));
+  __ StoreToOffset(TMP2, R3, MarkingStackBlock::pointers_offset());
+  __ add(R2, R2, Operand(1));
+  __ StoreToOffset(R2, R1, MarkingStackBlock::top_offset(), kUnsignedWord);
+  __ CompareImmediate(R2, MarkingStackBlock::kSize);
+  __ Pop(R3);  // Unspill.
+  __ Pop(R2);  // Unspill.
+  __ Pop(R1);  // Unspill.
+  __ b(&marking_overflow, EQ);
+  __ ret();
+
+  __ Bind(&marking_overflow);
+  __ Push(CODE_REG);
+  __ ldr(CODE_REG, Address(THR, Thread::write_barrier_code_offset()));
+  __ EnterCallRuntimeFrame(0 * kWordSize);
+  __ mov(R0, THR);
+  __ CallRuntime(kMarkingStackBlockProcessRuntimeEntry, 1);
+  __ LeaveCallRuntimeFrame();
+  __ Pop(CODE_REG);
+  __ ret();
+
+  __ Bind(&lost_race);
+  __ Pop(R3);  // Unspill.
+  __ Pop(R2);  // Unspill.
+  __ Pop(R1);  // Unspill.
+  __ ret();
 #endif
 }
 
@@ -1992,11 +2033,6 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   __ Stop("Not using interpreter")
 #else
-  if (!FLAG_enable_interpreter) {
-    __ Stop("Not using interpreter");
-    return;
-  }
-
   __ SetPrologueOffset();
   __ EnterStubFrame();
 
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index f6a2790..a316199 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -979,10 +979,6 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   __ Stop("Not using interpreter");
 #else
-  if (!FLAG_enable_interpreter) {
-    __ Stop("Not using interpreter");
-    return;
-  }
   // Save frame pointer coming in.
   __ EnterFrame(0);
 
@@ -1331,7 +1327,48 @@
 
 #if defined(CONCURRENT_MARKING)
   __ Bind(&add_to_mark_stack);
-  __ Stop("Incremental barrier");
+  __ pushq(RAX);  // Spill.
+  __ pushq(RCX);  // Spill.
+
+  // Atomically clear kOldAndNotMarkedBit.
+  // Note that we use 32 bit operations here to match the size of the
+  // background marker which is also manipulating this 32 bit word.
+  Label retry, lost_race, marking_overflow;
+  __ movl(RAX, FieldAddress(TMP, Object::tags_offset()));
+  __ Bind(&retry);
+  __ movl(RCX, RAX);
+  __ testl(RCX, Immediate(1 << RawObject::kOldAndNotMarkedBit));
+  __ j(ZERO, &lost_race);  // Marked by another thread.
+  __ andl(RCX, Immediate(~(1 << RawObject::kOldAndNotMarkedBit)));
+  __ LockCmpxchgl(FieldAddress(TMP, Object::tags_offset()), RCX);
+  __ j(NOT_EQUAL, &retry, Assembler::kNearJump);
+
+  __ movq(RAX, Address(THR, Thread::marking_stack_block_offset()));
+  __ movl(RCX, Address(RAX, MarkingStackBlock::top_offset()));
+  __ movq(Address(RAX, RCX, TIMES_8, MarkingStackBlock::pointers_offset()),
+          TMP);
+  __ incq(RCX);
+  __ movl(Address(RAX, MarkingStackBlock::top_offset()), RCX);
+  __ cmpl(RCX, Immediate(MarkingStackBlock::kSize));
+  __ popq(RCX);  // Unspill.
+  __ popq(RAX);  // Unspill.
+  __ j(EQUAL, &marking_overflow, Assembler::kNearJump);
+  __ ret();
+
+  __ Bind(&marking_overflow);
+  __ pushq(CODE_REG);
+  __ movq(CODE_REG, Address(THR, Thread::write_barrier_code_offset()));
+  __ EnterCallRuntimeFrame(0);
+  __ movq(CallingConventions::kArg1Reg, THR);
+  __ CallRuntime(kMarkingStackBlockProcessRuntimeEntry, 1);
+  __ LeaveCallRuntimeFrame();
+  __ popq(CODE_REG);
+  __ ret();
+
+  __ Bind(&lost_race);
+  __ popq(RCX);  // Unspill.
+  __ popq(RAX);  // Unspill.
+  __ ret();
 #endif
 }
 
@@ -2008,10 +2045,6 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   __ Stop("Not using interpreter");
 #else
-  if (!FLAG_enable_interpreter) {
-    __ Stop("Not using interpreter");
-    return;
-  }
   __ EnterStubFrame();
 
 #if defined(DEBUG)
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 5bb99f2..2ff06b8 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -32,6 +32,8 @@
 Thread::~Thread() {
   // We should cleanly exit any isolate before destruction.
   ASSERT(isolate_ == NULL);
+  ASSERT(store_buffer_block_ == NULL);
+  ASSERT(marking_stack_block_ == NULL);
   if (compiler_stats_ != NULL) {
     delete compiler_stats_;
     compiler_stats_ = NULL;
@@ -67,10 +69,11 @@
       end_(0),
       top_exit_frame_info_(0),
       store_buffer_block_(NULL),
+      marking_stack_block_(NULL),
       vm_tag_(0),
-      task_kind_(kUnknownTask),
       async_stack_trace_(StackTrace::null()),
       unboxed_int64_runtime_arg_(0),
+      task_kind_(kUnknownTask),
       dart_stream_(NULL),
       os_thread_(NULL),
       thread_lock_(new Monitor()),
@@ -333,6 +336,10 @@
     ASSERT(thread->store_buffer_block_ == NULL);
     thread->task_kind_ = kMutatorTask;
     thread->StoreBufferAcquire();
+    if (isolate->marking_stack() != NULL) {
+      // Concurrent mark in progress. Enable barrier for this thread.
+      thread->MarkingStackAcquire();
+    }
     return true;
   }
   return false;
@@ -348,6 +355,9 @@
   ASSERT(thread->execution_state() == Thread::kThreadInVM);
   // Clear since GC will not visit the thread once it is unscheduled.
   thread->ClearReusableHandles();
+  if (thread->is_marking()) {
+    thread->MarkingStackRelease();
+  }
   thread->StoreBufferRelease();
   if (isolate->is_runnable()) {
     thread->set_vm_tag(VMTag::kIdleTagId);
@@ -371,6 +381,10 @@
     // before Scavenge.
     thread->store_buffer_block_ =
         thread->isolate()->store_buffer()->PopEmptyBlock();
+    if (isolate->marking_stack() != NULL) {
+      // Concurrent mark in progress. Enable barrier for this thread.
+      thread->MarkingStackAcquire();
+    }
     // This thread should not be the main mutator.
     thread->task_kind_ = kind;
     ASSERT(!thread->IsMutatorThread());
@@ -387,6 +401,9 @@
   thread->task_kind_ = kUnknownTask;
   // Clear since GC will not visit the thread once it is unscheduled.
   thread->ClearReusableHandles();
+  if (thread->is_marking()) {
+    thread->MarkingStackRelease();
+  }
   thread->StoreBufferRelease();
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
@@ -394,7 +411,7 @@
   isolate->UnscheduleThread(thread, kIsNotMutatorThread, bypass_safepoint);
 }
 
-void Thread::PrepareForGC() {
+void Thread::ReleaseStoreBuffer() {
   ASSERT(IsAtSafepoint());
   // Prevent scheduling another GC by ignoring the threshold.
   ASSERT(store_buffer_block_ != NULL);
@@ -526,6 +543,7 @@
       }
       heap()->CollectGarbage(Heap::kNew);
     }
+    heap()->CheckFinishConcurrentMarking(this);
   }
   if ((interrupt_bits & kMessageInterrupt) != 0) {
     MessageHandler::MessageStatus status =
@@ -584,6 +602,31 @@
   store_buffer_block_ = isolate()->store_buffer()->PopNonFullBlock();
 }
 
+void Thread::MarkingStackBlockProcess() {
+  MarkingStackRelease();
+  MarkingStackAcquire();
+}
+
+void Thread::MarkingStackAddObject(RawObject* obj) {
+  marking_stack_block_->Push(obj);
+  if (marking_stack_block_->IsFull()) {
+    MarkingStackBlockProcess();
+  }
+}
+
+void Thread::MarkingStackRelease() {
+  MarkingStackBlock* block = marking_stack_block_;
+  marking_stack_block_ = NULL;
+  write_barrier_mask_ = RawObject::kGenerationalBarrierMask;
+  isolate()->marking_stack()->PushBlock(block);
+}
+
+void Thread::MarkingStackAcquire() {
+  marking_stack_block_ = isolate()->marking_stack()->PopEmptyBlock();
+  write_barrier_mask_ =
+      RawObject::kGenerationalBarrierMask | RawObject::kIncrementalBarrierMask;
+}
+
 bool Thread::IsMutatorThread() const {
   return ((isolate_ != NULL) && (isolate_->mutator_thread() == this));
 }
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index d17fc3a..c6b485b 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -240,7 +240,9 @@
   static void ExitIsolateAsHelper(bool bypass_safepoint = false);
 
   // Empties the store buffer block into the isolate.
-  void PrepareForGC();
+  void ReleaseStoreBuffer();
+  void AcquireMarkingStack();
+  void ReleaseMarkingStack();
 
   void SetStackLimit(uword value);
   void ClearStackLimit();
@@ -422,6 +424,13 @@
     return OFFSET_OF(Thread, store_buffer_block_);
   }
 
+  bool is_marking() const { return marking_stack_block_ != NULL; }
+  void MarkingStackAddObject(RawObject* obj);
+  void MarkingStackBlockProcess();
+  static intptr_t marking_stack_block_offset() {
+    return OFFSET_OF(Thread, marking_stack_block_);
+  }
+
   uword top_exit_frame_info() const { return top_exit_frame_info_; }
   void set_top_exit_frame_info(uword top_exit_frame_info) {
     top_exit_frame_info_ = top_exit_frame_info;
@@ -806,8 +815,8 @@
   uword end_;
   uword top_exit_frame_info_;
   StoreBufferBlock* store_buffer_block_;
+  MarkingStackBlock* marking_stack_block_;
   uword vm_tag_;
-  TaskKind task_kind_;
   RawStackTrace* async_stack_trace_;
   // Memory location dedicated for passing unboxed int64 values from
   // generated code to runtime.
@@ -833,7 +842,9 @@
     defined(TARGET_ARCH_X64)
   uword write_barrier_wrappers_entry_points_[kNumberOfDartAvailableCpuRegs];
 #endif
+  // End accessed from generated code.
 
+  TaskKind task_kind_;
   TimelineStream* dart_stream_;
   OSThread* os_thread_;
   Monitor* thread_lock_;
@@ -903,6 +914,9 @@
       StoreBuffer::ThresholdPolicy policy = StoreBuffer::kCheckThreshold);
   void StoreBufferAcquire();
 
+  void MarkingStackRelease();
+  void MarkingStackAcquire();
+
   void set_zone(Zone* zone) { zone_ = zone; }
 
   void set_safepoint_state(uint32_t value) { safepoint_state_ = value; }
diff --git a/runtime/vm/thread_registry.cc b/runtime/vm/thread_registry.cc
index 220f32c..b1bcb2c 100644
--- a/runtime/vm/thread_registry.cc
+++ b/runtime/vm/thread_registry.cc
@@ -78,12 +78,34 @@
   }
 }
 
-void ThreadRegistry::PrepareForGC() {
+void ThreadRegistry::ReleaseStoreBuffers() {
   MonitorLocker ml(threads_lock());
   Thread* thread = active_list_;
   while (thread != NULL) {
     if (!thread->BypassSafepoints()) {
-      thread->PrepareForGC();
+      thread->ReleaseStoreBuffer();
+    }
+    thread = thread->next_;
+  }
+}
+
+void ThreadRegistry::AcquireMarkingStacks() {
+  MonitorLocker ml(threads_lock());
+  Thread* thread = active_list_;
+  while (thread != NULL) {
+    if (!thread->BypassSafepoints()) {
+      thread->MarkingStackAcquire();
+    }
+    thread = thread->next_;
+  }
+}
+
+void ThreadRegistry::ReleaseMarkingStacks() {
+  MonitorLocker ml(threads_lock());
+  Thread* thread = active_list_;
+  while (thread != NULL) {
+    if (!thread->BypassSafepoints()) {
+      thread->MarkingStackRelease();
     }
     thread = thread->next_;
   }
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index f2426d5..2d6ad35 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -31,7 +31,11 @@
 
   void VisitObjectPointers(ObjectPointerVisitor* visitor,
                            ValidationPolicy validate_frames);
-  void PrepareForGC();
+
+  void ReleaseStoreBuffers();
+  void AcquireMarkingStacks();
+  void ReleaseMarkingStacks();
+
   Thread* mutator_thread() const { return mutator_thread_; }
 
 #ifndef PRODUCT
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index f5d7f87..dc76612 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -39,7 +39,7 @@
 
 DEFINE_FLAG(bool,
             use_dart_frontend,
-            false,
+            true,
             "Parse scripts with Dart-to-Kernel parser");
 
 DECLARE_FLAG(bool, strong);
diff --git a/runtime/vm/virtual_memory_fuchsia.cc b/runtime/vm/virtual_memory_fuchsia.cc
index df1bfe8..78186e9 100644
--- a/runtime/vm/virtual_memory_fuchsia.cc
+++ b/runtime/vm/virtual_memory_fuchsia.cc
@@ -57,6 +57,17 @@
     zx_object_set_property(vmo, ZX_PROP_NAME, name, strlen(name));
   }
 
+  if (is_executable) {
+    // Add ZX_PERM_EXECUTE permission to VMO, so it can be mapped
+    // into memory as executable.
+    status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo);
+    if (status != ZX_OK) {
+      LOG_ERR("zx_vmo_replace_as_executable() failed: %s\n",
+              zx_status_get_string(status));
+      return NULL;
+    }
+  }
+
   const uint32_t flags = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE |
                          (is_executable ? ZX_VM_PERM_EXECUTE : 0);
   uword address;
@@ -94,6 +105,17 @@
     zx_object_set_property(vmo, ZX_PROP_NAME, name, strlen(name));
   }
 
+  if (is_executable) {
+    // Add ZX_PERM_EXECUTE permission to VMO, so it can be mapped
+    // into memory as executable.
+    status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo);
+    if (status != ZX_OK) {
+      LOG_ERR("zx_vmo_replace_as_executable() failed: %s\n",
+              zx_status_get_string(status));
+      return NULL;
+    }
+  }
+
   const zx_vm_option_t options = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE |
                                  (is_executable ? ZX_VM_PERM_EXECUTE : 0);
   uword base;
diff --git a/runtime/vm/visitor.h b/runtime/vm/visitor.h
index 424f486..c5341d9 100644
--- a/runtime/vm/visitor.h
+++ b/runtime/vm/visitor.h
@@ -38,7 +38,6 @@
 
  private:
   Isolate* isolate_;
-  NoSafepointScope no_safepoints_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(ObjectPointerVisitor);
 };
diff --git a/samples/samples.status b/samples/samples.status
index bf9f1fc..2d1d4b8 100644
--- a/samples/samples.status
+++ b/samples/samples.status
@@ -23,6 +23,9 @@
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 [ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
 sample_extension/test/sample_extension_app_snapshot_test: RuntimeError
 sample_extension/test/sample_extension_script_snapshot_test: RuntimeError
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index e9d3862..241e7d2 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -396,7 +396,7 @@
 int _stdoutFD = 1;
 int _stderrFD = 2;
 
-// This is an embedder entrypoint.
+@pragma('vm:entry-point')
 void _setStdioFDs(int stdin, int stdout, int stderr) {
   _stdinFD = stdin;
   _stdoutFD = stdout;
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 455498a..e6407d2 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -909,6 +909,8 @@
 Utils/tests/Expect/setEquals_A01_t02: CompileTimeError # Uses Dart 1 constants
 
 [ !$strong ]
+Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/reexport_t02: MissingCompileTimeError
 LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError # Assumes no close after error.
 LibTest/async/Stream/firstWhere_A01_t01: RuntimeError # co19 issue 137
 LibTest/async/Stream/firstWhere_A02_t01: RuntimeError # co19 issue 137
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 456721c..a018bea 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -11,6 +11,8 @@
 Language/Expressions/Method_Invocation/Ordinary_Invocation/static_type_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
 Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
 Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/same_name_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
+Language/Libraries_and_Scripts/Imports/library_name_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
 Language/Types/Parameterized_Types/arity_mismatch_t01: CompileTimeError
 Language/Types/Parameterized_Types/arity_mismatch_t05: CompileTimeError
 Language/Types/Parameterized_Types/arity_mismatch_t07: CompileTimeError
@@ -62,6 +64,8 @@
 Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError
 Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError
 Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t02: MissingCompileTimeError
+Language/Classes/Constructors/Factories/arguments_type_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
+Language/Classes/Constructors/Factories/function_type_t01: CompileTimeError # Expects a warning but this is an error in Dart 2
 Language/Classes/Constructors/Generative_Constructors/static_type_t01: CompileTimeError
 Language/Classes/Constructors/name_t01: MissingCompileTimeError
 Language/Classes/Constructors/name_t02: MissingCompileTimeError
@@ -556,6 +560,7 @@
 Language/Expressions/Instance_Creation/New/execution_t13: CompileTimeError
 Language/Expressions/Instance_Creation/New/named_constructor_t01: CompileTimeError
 Language/Expressions/Instance_Creation/New/named_constructor_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t01: CompileTimeError # Issue 33308
 Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: CompileTimeError
 Language/Expressions/Instance_Creation/New/type_argument_t01: CompileTimeError
 Language/Expressions/Instance_Creation/New/type_t01: CompileTimeError
@@ -917,7 +922,6 @@
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t06: CompileTimeError
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t07: CompileTimeError
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t08: CompileTimeError
-Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError
 Language/Libraries_and_Scripts/Exports/show_hide_t01: CompileTimeError
 Language/Libraries_and_Scripts/Exports/show_hide_t02: CompileTimeError
 Language/Libraries_and_Scripts/Exports/syntax_t02: CompileTimeError
@@ -1317,6 +1321,7 @@
 LibTest/core/AssertionError/AssertionError_A01_t01: CompileTimeError
 LibTest/core/AssertionError/message_A01_t01: CompileTimeError
 LibTest/core/AssertionError/toString_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
 LibTest/core/FallThroughError/toString_A01_t02: CompileTimeError
 LibTest/core/Invocation/isAccessor_A01_t01: CompileTimeError
 LibTest/core/Invocation/isAccessor_A01_t02: CompileTimeError
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index c2c3fd3..7be5f14 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -2,424 +2,4 @@
 # for 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 == precompiler ]
-Language/Expressions/Throw/stack_trace_t01: Skip # Dart 1 AOT to be retired soon.
-LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Timeout
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Timeout
-LibTest/core/Map/Map_class_A01_t04: Pass, Timeout
-LibTest/core/Uri/encodeQueryComponent_A01_t02: Pass, Timeout
-
-[ $runtime == dart_precompiled ]
-Language/Expressions/Null/instance_of_class_null_t01: Skip # Uses dart:mirrors
-Language/Metadata/*: SkipByDesign # Uses dart:mirrors
-LibTest/isolate/Isolate/spawnUri*: SkipByDesign # Isolate.spawnUri
-
-#
-# flutter runs with --error-on-bad-type so the following two tests end up
-# with errors and pass
-#
-[ $runtime == flutter ]
-Language/Classes/Abstract_Instance_Members/override_more_required_parameters_t01: CompileTimeError
-Language/Classes/Abstract_Instance_Members/override_no_named_parameters_t01: CompileTimeError
-Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t01: CompileTimeError
-Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t03: CompileTimeError
-Language/Classes/Constructors/Factories/function_type_t01: CompileTimeError
-Language/Classes/Constructors/Factories/function_type_t02: CompileTimeError
-Language/Classes/Constructors/Factories/redirecting_constructor_call_t02: CompileTimeError
-Language/Classes/Getters/override_t01: CompileTimeError
-Language/Classes/Getters/override_t02: CompileTimeError
-Language/Classes/Getters/override_t03: CompileTimeError
-Language/Classes/Instance_Methods/override_fewer_parameters_t01: CompileTimeError
-Language/Classes/Instance_Methods/override_fewer_parameters_t02: CompileTimeError
-Language/Classes/Instance_Methods/override_more_parameters_t01: CompileTimeError
-Language/Classes/Instance_Methods/override_more_parameters_t02: CompileTimeError
-Language/Classes/Instance_Methods/override_named_parameters_t01: CompileTimeError
-Language/Classes/Instance_Methods/override_named_parameters_t02: CompileTimeError
-Language/Classes/Instance_Methods/override_named_parameters_t05: CompileTimeError
-Language/Classes/Instance_Methods/override_subtype_t01: CompileTimeError
-Language/Classes/Instance_Methods/override_subtype_t02: CompileTimeError
-Language/Classes/Instance_Methods/override_subtype_t03: CompileTimeError
-Language/Classes/Instance_Methods/override_subtype_t04: CompileTimeError
-Language/Classes/Setters/override_t01: CompileTimeError
-Language/Classes/Setters/override_t02: CompileTimeError
-Language/Errors_and_Warnings/static_warning_t01: CompileTimeError
-Language/Expressions/Assignment/expression_assignment_failed_t06: CompileTimeError
-Language/Expressions/Assignment/super_assignment_failed_t05: CompileTimeError
-Language/Expressions/Await_Expressions/syntax_t07: CompileTimeError
-Language/Expressions/Await_Expressions/syntax_t08: CompileTimeError
-Language/Expressions/Await_Expressions/syntax_t09: CompileTimeError
-Language/Expressions/Identifier_Reference/async_and_generator_t01: CompileTimeError
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t14: Pass
-Language/Expressions/Identifier_Reference/built_in_not_dynamic_t19: Pass
-Language/Expressions/Instance_Creation/New/evaluation_t03: CompileTimeError
-Language/Expressions/Instance_Creation/New/evaluation_t16: CompileTimeError
-Language/Expressions/Instance_Creation/New/evaluation_t17: CompileTimeError
-Language/Expressions/Instance_Creation/New/evaluation_t18: CompileTimeError
-Language/Expressions/Instance_Creation/New/generic_type_t01: CompileTimeError
-Language/Expressions/Instance_Creation/New/generic_type_t02: CompileTimeError
-Language/Expressions/Instance_Creation/New/generic_type_t03: CompileTimeError
-Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: CompileTimeError
-Language/Expressions/Instance_Creation/New/type_argument_t01: CompileTimeError
-Language/Expressions/Instance_Creation/New/type_t01: CompileTimeError
-Language/Expressions/Instance_Creation/New/type_t02: CompileTimeError
-Language/Expressions/Instance_Creation/New/type_t03: CompileTimeError
-Language/Expressions/Instance_Creation/New/type_t05: CompileTimeError
-Language/Expressions/Instance_Creation/malformed_or_malbounded_t01: CompileTimeError
-Language/Expressions/Instance_Creation/malformed_or_malbounded_t03: CompileTimeError
-Language/Expressions/Instance_Creation/malformed_or_malbounded_t07: CompileTimeError
-Language/Expressions/Null/instance_of_class_null_t01: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t04: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t05: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t06: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t07: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t08: CompileTimeError
-Language/Expressions/Type_Cast/evaluation_t09: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t03: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t04: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t05: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t06: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t07: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t08: CompileTimeError
-Language/Expressions/Type_Test/evaluation_t09: CompileTimeError
-Language/Generics/malformed_t02: CompileTimeError
-Language/Generics/scope_t06: CompileTimeError
-Language/Generics/upper_bound_t01: CompileTimeError
-Language/Libraries_and_Scripts/Imports/namespace_changes_t19: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t01: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t05: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t06: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t08: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t11: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t16: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t18: CompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t19: CompileTimeError
-Language/Metadata/before_class_t01: CompileTimeError
-Language/Metadata/before_ctor_t01: CompileTimeError
-Language/Metadata/before_ctor_t02: CompileTimeError
-Language/Metadata/before_export_t01: CompileTimeError
-Language/Metadata/before_factory_t01: CompileTimeError
-Language/Metadata/before_function_t01: CompileTimeError
-Language/Metadata/before_function_t02: CompileTimeError
-Language/Metadata/before_function_t03: CompileTimeError
-Language/Metadata/before_function_t04: CompileTimeError
-Language/Metadata/before_function_t05: CompileTimeError
-Language/Metadata/before_function_t06: CompileTimeError
-Language/Metadata/before_function_t07: CompileTimeError
-Language/Metadata/before_import_t01: CompileTimeError
-Language/Metadata/before_library_t01: CompileTimeError
-Language/Metadata/before_param_t01: CompileTimeError
-Language/Metadata/before_param_t02: CompileTimeError
-Language/Metadata/before_param_t03: CompileTimeError
-Language/Metadata/before_param_t04: CompileTimeError
-Language/Metadata/before_param_t05: CompileTimeError
-Language/Metadata/before_param_t06: CompileTimeError
-Language/Metadata/before_param_t07: CompileTimeError
-Language/Metadata/before_param_t08: CompileTimeError
-Language/Metadata/before_param_t09: CompileTimeError
-Language/Metadata/before_type_param_t01: CompileTimeError
-Language/Metadata/before_typedef_t01: CompileTimeError
-Language/Metadata/before_variable_t01: CompileTimeError
-Language/Metadata/before_variable_t02: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t01: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t02: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t03: CompileTimeError
-Language/Overview/Privacy/private_and_public_t02: CompileTimeError
-Language/Overview/Privacy/private_and_public_t06: CompileTimeError
-Language/Overview/Scoping/hiding_declaration_t28: CompileTimeError
-Language/Statements/Try/malformed_type_t01: CompileTimeError
-Language/Statements/Try/malformed_type_t02: CompileTimeError
-Language/Statements/Try/malformed_type_t03: CompileTimeError
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: Pass
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: Pass
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: Pass
-Language/Types/Dynamic_Type_System/malbounded_type_error_t01: CompileTimeError
-Language/Types/Parameterized_Types/Actual_Type_of_Declaration/actual_type_t02: CompileTimeError
-Language/Types/Parameterized_Types/Actual_Type_of_Declaration/actual_type_t03: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t01: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t02: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t03: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t04: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t05: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t06: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t01: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t02: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t03: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t04: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t05: CompileTimeError
-Language/Types/Parameterized_Types/malbounded_t06: CompileTimeError
-Language/Types/Static_Types/malformed_type_t01: CompileTimeError
-Language/Types/Static_Types/malformed_type_t02: CompileTimeError
-Language/Types/Static_Types/malformed_type_t03: CompileTimeError
-Language/Types/Static_Types/malformed_type_t04: CompileTimeError
-Language/Types/Static_Types/malformed_type_t05: CompileTimeError
-Language/Types/Static_Types/malformed_type_t06: CompileTimeError
-LibTest/async/Future/doWhile_A05_t01: Pass, RuntimeError # Flutter Issue 9109
-LibTest/async/Future/forEach_A04_t02: Pass, RuntimeError # Flutter Issue 9109
-LibTest/async/Stream/timeout_A01_t01: Pass, RuntimeError # Flutter Issue 9109
-LibTest/async/Stream/timeout_A03_t01: Pass, RuntimeError # Flutter Issue 9109
-LibTest/async/Stream/timeout_A04_t01: Pass, RuntimeError # Flutter Issue 9109
-LibTest/async/StreamController/StreamController.broadcast_A04_t01: Pass, RuntimeError # Flutter Issue 9109
-LibTest/collection/DoubleLinkedQueueEntry/append_A01_t01: Pass, Timeout # Flutter Issue 9109
-LibTest/collection/LinkedList/addFirst_A01_t01: Pass, Timeout # Flutter Issue 9109
-LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t04: Pass, Timeout
-LibTest/isolate/Isolate/spawnUri*: Skip # spawnUri is not supported by flutter
-LibTest/isolate/ReceivePort/sendPort_A01_t01: Pass, Timeout # Flutter Issue 9109
-LibTest/typed_data/Int32List/buffer_A01_t02: Pass, Timeout # Flutter Issue 9109
-
-[ $runtime == vm ]
-Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: MissingCompileTimeError # Issue 114
-LibTest/isolate/Isolate/spawnUri_A01_t06: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
-LibTest/isolate/Isolate/spawnUri_A01_t07: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
-LibTest/isolate/Isolate/spawn_A04_t01: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
-
-[ $system == windows ]
-LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Slow
-
-[ $fasta ]
-Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
-Language/Expressions/Constants/constant_list_t02: MissingCompileTimeError
-Language/Expressions/Constants/constant_map_t02: MissingCompileTimeError
-Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError
-Language/Expressions/Maps/constant_map_t02: MissingCompileTimeError
-
-[ $arch == arm64 && ($compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
-LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
-LibTest/core/List/List_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
-
-[ $arch == ia32 && $mode == release && $runtime == vm && $system == linux ]
-service/dev_fs_spawn_test: Pass, Fail # Issue 28411
-
-[ $arch == simarm && $compiler == precompiler && $runtime == dart_precompiled ]
-LibTest/typed_data/Float32x4/operator_division_A01_t02: RuntimeError # Issue #26675
-
-[ $builder_tag == asan && $mode == debug && ($runtime == dart_precompiled || $runtime == vm) ]
-Language/Types/Interface_Types/subtype_t27: Skip # Issue 21174.
-
-[ $compiler == none && $runtime == vm && $system == fuchsia ]
-*: Skip # Tests not included in the image.
-
-[ $compiler == precompiler && $runtime == dart_precompiled && $system == android ]
-*: Skip # Issue 27294
-Language/Expressions/Object_Identity/double_t02: RuntimeError # Issue #26374
-LibTest/math/log_A01_t01: RuntimeError # Precision of Math.log (Issue #18998)
-
-[ $mode == debug && ($arch == simdbc || $arch == simdbc64) ]
-LibTest/collection/ListBase/ListBase_class_A01_t02: Timeout # TODO(vegorov) These tests are very slow on unoptimized SIMDBC
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Timeout # TODO(vegorov) These tests are very slow on unoptimized SIMDBC
-
-[ $mode == debug && ($runtime == dart_precompiled || $runtime == vm) ]
-LibTest/core/List/List_class_A01_t02: Pass, Slow
-
-[ $mode == release && $runtime == vm && $system == linux && ($arch == ia32 || $arch == x64) ]
-LibTest/isolate/Isolate/spawn_A04_t05: Pass, Slow
-
-# Obfuscated mode expectations
-[ $runtime == dart_precompiled && $minified ]
-Language/Enums/declaration_equivalent_t01: Skip # Enum.toString is obfuscated.
-Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: Skip # Uses new Symbol() instead of const Symbol()
-LibTest/core/Symbol/Symbol_A01_t01: Skip # Uses new Symbol()
-
-[ $runtime != none && !$strong ]
-LibTest/typed_data/Float32x4List/first_A01_t02: RuntimeError # co19 issue 130 + type error
-LibTest/typed_data/Float32x4List/last_A01_t02: RuntimeError # co19 issue 130 + type error
-
-[ $runtime == vm && $checked ]
-LibTest/typed_data/Float32List/reduce_A01_t01: Fail # These tests fail in checked mode because they are incorrect.
-LibTest/typed_data/Float64List/add_A01_t01: Fail # These tests fail in checked mode because they are incorrect.
-LibTest/typed_data/Float64List/firstWhere_A02_t01: Fail # These tests fail in checked mode because they are incorrect.
-LibTest/typed_data/Float64List/reduce_A01_t01: Fail # These tests fail in checked mode because they are incorrect.
-
-[ ($arch == simarm || $arch == simarm64 || $arch == simarmv5te || $arch == simarmv6 || $arch == simdbc || $arch == simdbc64) && ($runtime == dart_precompiled || $runtime == vm) ]
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Skip # Timeout
-LibTest/collection/IterableBase/IterableBase_class_A01_t02: Skip # Timeout
-LibTest/collection/IterableMixin/IterableMixin_class_A02_t01: Skip # Timeout
-LibTest/collection/ListBase/ListBase_class_A01_t01: Skip # Timeout
-LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # Timeout
-LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip # Timeout
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # Timeout
-LibTest/core/Uri/Uri_A06_t03: Skip # Timeout
-
-[ $compiler == app_jit || $compiler == precompiler ]
-Language/Mixins/Mixin_Application/error_t01: Pass
-Language/Mixins/Mixin_Application/error_t02: Pass
-Language/Mixins/declaring_constructor_t01: Pass
-
-[ $compiler == app_jit || $compiler == precompiler || $mode == product || $runtime == flutter ]
-Language/Libraries_and_Scripts/Imports/deferred_import_t01: Skip # Eager loading
-Language/Libraries_and_Scripts/Imports/deferred_import_t02: Skip # Eager loading
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01: Skip # Eager loading
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: Skip # Eager loading
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
-Language/Classes/definition_t24: MissingCompileTimeError # Issue co19 #129, sdk issue #31624
-Language/Expressions/Assignment/super_assignment_failed_t05: RuntimeError # Issue 25671
-Language/Expressions/Constants/literal_number_t01: CompileTimeError # Large integer literal
-Language/Expressions/Constants/math_operators_t01: CompileTimeError # Large integer literal
-Language/Expressions/Constants/math_operators_t06: CompileTimeError # Large integer literal
-Language/Expressions/Function_Invocation/async_generator_invokation_t08: Fail # Issue 25967
-Language/Expressions/Function_Invocation/async_generator_invokation_t10: Fail # Issue 25967
-Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
-Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
-Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError # Large integer literal
-Language/Expressions/Numbers/syntax_t06: CompileTimeError # Large integer literal
-Language/Expressions/Numbers/syntax_t09: CompileTimeError # Large integer literal
-Language/Expressions/Numbers/syntax_t10: CompileTimeError # Large integer literal
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t01: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t02: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t03: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t04: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t05: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t06: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t07: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
-Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Fail
-Language/Libraries_and_Scripts/Exports/reexport_t01: Fail # Dart issue 12916
-Language/Libraries_and_Scripts/Exports/reexport_t02: MissingCompileTimeError, Fail # Dart issue 12916
-Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Fail
-Language/Libraries_and_Scripts/Parts/syntax_t06: Fail
-Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Skip # Issue 29895
-Language/Mixins/Mixin_Application/syntax_t16: CompileTimeError # Issue 25765
-Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
-Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
-Language/Statements/Assert/execution_t02: Skip # co19 issue 734
-Language/Statements/Assert/execution_t03: Skip # co19 issue 734
-Language/Statements/Assert/type_t02: Skip # co19 issue 734
-Language/Statements/Assert/type_t05: Skip # co19 issue 734
-Language/Statements/Labels/syntax_t03: Fail # Dart issue 2238
-Language/Statements/Switch/syntax_t02: Fail # Dart issue 12908
-Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t08: RuntimeError # Issue 25748
-Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t09: RuntimeError # Issue 25748
-Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t10: RuntimeError # Issue 25748
-Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError # Issue 25662,25634
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: MissingCompileTimeError # Issue 25495
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError # Issue 25495
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError # Issue 25495
-Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # Issue co19/30264
-LayoutTests/fast/*: SkipByDesign # DOM not supported on VM.
-LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError # Large integers
-LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError # Large integers
-LibTest/collection/Maps/*: Skip # Maps class no longer exists
-LibTest/core/Duration/inDays_A01_t01: RuntimeError # Large integers
-LibTest/core/Duration/inHours_A01_t01: RuntimeError # Large integers
-LibTest/core/Duration/inMilliseconds_A01_t01: RuntimeError # Large integers
-LibTest/core/Duration/inMinutes_A01_t01: RuntimeError # Large integers
-LibTest/core/Duration/inSeconds_A01_t01: RuntimeError # Large integers
-LibTest/core/List/List_class_A01_t01: RuntimeError # Large integers
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError, Fail # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError, Fail # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: RuntimeError, Fail # Issue 22200
-LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # Issue 13596
-LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # Issue 13596
-LibTest/core/double/ceil_A01_t04: RuntimeError # Large integers
-LibTest/core/double/floor_A01_t04: RuntimeError # Large integers
-LibTest/core/double/isInfinite_A01_t03: CompileTimeError # Large integer literal
-LibTest/core/double/round_A01_t03: RuntimeError # Large integers
-LibTest/core/double/toInt_A01_t05: RuntimeError # Large integers
-LibTest/core/double/truncate_A01_t05: RuntimeError # Large integers
-LibTest/core/int/abs_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/ceil_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/compareTo_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/floorToDouble_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/floor_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/isEven_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/isInfinite_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/isNaN_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/isNegative_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/isOdd_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_AND_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_GE_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_GT_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_LE_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_LT_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_NOT_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_OR_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_XOR_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_addition_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_division_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_left_shift_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_multiplication_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_remainder_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_remainder_A01_t02: CompileTimeError # Large integer literal
-LibTest/core/int/operator_right_shift_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/operator_truncating_division_A01_t02: CompileTimeError # Large integer literal
-LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/parse_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/remainder_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/remainder_A01_t02: CompileTimeError # Large integer literal
-LibTest/core/int/roundToDouble_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/round_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/toDouble_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/toInt_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/toRadixString_A01_t01: Fail # co19 issue 492
-LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError # Large integer literal
-LibTest/core/int/truncate_A01_t01: CompileTimeError # Large integer literal
-LibTest/html/*: SkipByDesign # dart:html not supported on VM.
-LibTest/isolate/Isolate/spawnUri_A02_t02: Skip # Issue 15974
-LibTest/isolate/Isolate/spawnUri_A02_t03: Skip # Issue 15974
-LibTest/isolate/Isolate/spawn_A02_t01: Skip # co19 issue 667
-LibTest/isolate/Isolate/spawn_A03_t02: Skip # Issue 15974
-LibTest/isolate/Isolate/spawn_A04_t01: Skip # Issue 15974
-LibTest/isolate/Isolate/spawn_A04_t03: Skip # Flaky, Issue 15974
-LibTest/isolate/Isolate/spawn_A04_t04: Skip # Issue 15974
-LibTest/isolate/Isolate/spawn_A06_t03: Skip # Issue 15974
-LibTest/isolate/Isolate/spawn_A06_t05: Skip # Issue 15974
-LibTest/math/pow_A10_t01: CompileTimeError # Large integer literal
-LibTest/typed_data/ByteData/getUint64_A01_t01: CompileTimeError # Large integer literal
-LibTest/typed_data/ByteData/setUint64_A01_t01: CompileTimeError # Large integer literal
-LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # co19 issue 599
-LibTest/typed_data/Float32x4/reciprocal_A01_t01: Pass, Fail # co19 issue 599
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: CompileTimeError # Large integer literal
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: CompileTimeError # Large integer literal
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: CompileTimeError # Large integer literal
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: CompileTimeError # Large integer literal
-WebPlatformTest/*: SkipByDesign # dart:html not supported on VM.
-
-[ $runtime == flutter || $hot_reload || $hot_reload_rollback ]
-Language/Expressions/Assignment/prefix_object_t02: Skip # Requires deferred libraries
-Language/Expressions/Constants/constant_constructor_t03: Skip # Requires deferred libraries
-Language/Expressions/Constants/identifier_denotes_a_constant_t06: Skip # Requires deferred libraries
-Language/Expressions/Constants/identifier_denotes_a_constant_t07: Skip # Requires deferred libraries
-Language/Expressions/Constants/static_constant_t06: Skip # Requires deferred libraries
-Language/Expressions/Constants/static_constant_t07: Skip # Requires deferred libraries
-Language/Expressions/Constants/top_level_function_t04: Skip # Requires deferred libraries
-Language/Expressions/Constants/top_level_function_t05: Skip # Requires deferred libraries
-Language/Expressions/Instance_Creation/Const/deferred_type_t01: Skip # Requires deferred libraries
-Language/Expressions/Instance_Creation/Const/deferred_type_t02: Skip # Requires deferred libraries
-Language/Expressions/Instance_Creation/New/evaluation_t19: Skip # Requires deferred libraries
-Language/Expressions/Instance_Creation/New/evaluation_t20: Skip # Requires deferred libraries
-Language/Expressions/Type_Cast/evaluation_t10: Skip # Requires deferred libraries
-Language/Expressions/Type_Test/evaluation_t10: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/deferred_import_t01: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/deferred_import_t02: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t03: Skip # Requires deferred libraries
-Language/Libraries_and_Scripts/Imports/static_type_t01: Skip # Requires deferred libraries
-Language/Types/Dynamic_Type_System/deferred_type_error_t01: Skip # Requires deferred libraries
-Language/Types/Static_Types/deferred_type_t01: Skip # Requires deferred libraries
-LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Skip # Requires deferred libraries
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Pass, Slow
-LibTest/collection/IterableBase/IterableBase_class_A01_t02: Pass, Timeout
-LibTest/collection/IterableMixin/IterableMixin_class_A02_t01: Pass, Timeout
-LibTest/collection/ListBase/ListBase_class_A01_t01: Pass, Timeout
-LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Timeout
-LibTest/collection/ListMixin/ListMixin_class_A01_t01: Pass, Timeout
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Timeout
-LibTest/core/List/List_class_A01_t01: Pass, Timeout
-LibTest/core/List/List_class_A01_t02: Pass, Timeout
-LibTest/core/Map/Map_class_A01_t04: Pass, Timeout
-LibTest/core/Uri/Uri_A06_t03: Pass, Timeout
-LibTest/core/Uri/encodeQueryComponent_A01_t02: Pass, Timeout
-LibTest/isolate/Isolate/spawn_A01_t04: Pass, Timeout
-LibTest/isolate/ReceivePort/take_A01_t02: Skip # Issue 27773
-
-[ $hot_reload || $hot_reload_rollback ]
-LibTest/isolate/ReceivePort/firstWhere_A01_t01: Crash # Issue 33363
-LibTest/isolate/ReceivePort/firstWhere_A02_t01: Crash # Issue 33363
-LibTest/isolate/ReceivePort/lastWhere_A02_t01: Crash # Issue 33363
+*: SkipByDesign # Deprecating Dart1 tests.
diff --git a/tests/co19_2/co19_2-analyzer.status b/tests/co19_2/co19_2-analyzer.status
index 8eaefac..054926b 100644
--- a/tests/co19_2/co19_2-analyzer.status
+++ b/tests/co19_2/co19_2-analyzer.status
@@ -170,15 +170,14 @@
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t19: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t20: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t21: MissingCompileTimeError # Issue 34087
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l3_t01: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l3_t02: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t01: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t02: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t03: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t04: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t05: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t06: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t07: Crash # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l3_t01: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l3_t02: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t01: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t02: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t03: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t05: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t06: MissingCompileTimeError # Issue 33152, 33477
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t07: MissingCompileTimeError # Issue 33152, 33477
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t10: CompileTimeError # Issue 33995
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t04: CompileTimeError # Issue 33995
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t05: CompileTimeError # Issue 33995
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index fdd22f1..b4cff1a 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -14,9 +14,6 @@
 Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: MissingCompileTimeError # Issue 34192
-Language/Classes/Constructors/Factories/arguments_type_t01: MissingCompileTimeError # Issue 33308
-Language/Classes/Constructors/Factories/function_type_t01: MissingCompileTimeError # Issue 31590
-Language/Classes/Constructors/Factories/function_type_t02: MissingCompileTimeError # Issue 31590
 Language/Classes/Constructors/Generative_Constructors/final_variables_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
 Language/Classes/Constructors/Generative_Constructors/initializers_t15: CompileTimeError
 Language/Classes/Constructors/name_t01: MissingCompileTimeError # Legal, see #33235
@@ -116,8 +113,7 @@
 Language/Generics/syntax_t02: CompileTimeError
 Language/Generics/syntax_t03: CompileTimeError
 Language/Generics/upper_bound_t01: MissingCompileTimeError # Issue 33308
-Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError # Issue 12916
-Language/Libraries_and_Scripts/Exports/same_name_t01: MissingCompileTimeError # Issue 12916
+Language/Libraries_and_Scripts/Imports/library_name_t01: CompileTimeError # Test is wrong. Spec says error not warning.
 Language/Mixins/Mixin_Application/deferred_t01: MissingCompileTimeError # Issue 30273
 Language/Mixins/Mixin_Application/static_warning_t01: MissingCompileTimeError # Mixin super equirement
 Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # The test even says in the comment it should be a compile time error
diff --git a/tests/compiler/dart2js/analyses/analysis_helper.dart b/tests/compiler/dart2js/analyses/analysis_helper.dart
index 9c6a5d9..3c16c3b 100644
--- a/tests/compiler/dart2js/analyses/analysis_helper.dart
+++ b/tests/compiler/dart2js/analyses/analysis_helper.dart
@@ -2,65 +2,195 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:convert' as json;
+import 'dart:io';
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/diagnostics/messages.dart';
 import 'package:compiler/src/diagnostics/source_span.dart';
 import 'package:compiler/src/library_loader.dart';
+import 'package:compiler/src/ir/static_type.dart';
 import 'package:compiler/src/ir/util.dart';
+import 'package:compiler/src/util/uri_extras.dart';
 import 'package:expect/expect.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
+import 'package:kernel/type_algebra.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
 
 import '../helpers/memory_compiler.dart';
 
-// TODO(johnniwinther): Update allowed-listing to mention specific properties.
-run(Uri entryPoint,
+run(Uri entryPoint, String allowedListPath, List<String> analyzedPaths,
     {Map<String, String> memorySourceFiles = const {},
-    Map<String, List<String>> allowedList,
-    bool verbose = false}) {
+    bool verbose = false,
+    bool generate = false}) {
   asyncTest(() async {
     Compiler compiler = await compilerFor(memorySourceFiles: memorySourceFiles);
     LoadedLibraries loadedLibraries =
         await compiler.libraryLoader.loadLibraries(entryPoint);
-    new DynamicVisitor(
-            compiler.reporter, loadedLibraries.component, allowedList)
-        .run(verbose: verbose);
+    new DynamicVisitor(compiler.reporter, loadedLibraries.component,
+            allowedListPath, analyzedPaths)
+        .run(verbose: verbose, generate: generate);
   });
 }
 
-// TODO(johnniwinther): Add improved type promotion to handle negative
-// reasoning.
-// TODO(johnniwinther): Use this visitor in kernel impact computation.
-abstract class StaticTypeVisitor extends ir.Visitor<ir.DartType> {
-  ir.Component get component;
-  ir.TypeEnvironment _typeEnvironment;
-  bool _isStaticTypePrepared = false;
+// TODO(johnniwinther): Handle dynamic access of Object properties/methods
+// separately.
+class DynamicVisitor extends StaticTypeTraversalVisitor {
+  final DiagnosticReporter reporter;
+  final ir.Component component;
+  final String _allowedListPath;
+  final List<String> analyzedPaths;
 
-  @override
-  ir.DartType defaultNode(ir.Node node) {
-    node.visitChildren(this);
-    return null;
-  }
+  Map _expectedJson = {};
+  Map<String, Map<String, List<DiagnosticMessage>>> _actualMessages = {};
 
-  @override
-  ir.DartType defaultExpression(ir.Expression node) {
-    defaultNode(node);
-    return getStaticType(node);
-  }
+  DynamicVisitor(
+      this.reporter, this.component, this._allowedListPath, this.analyzedPaths)
+      : super(new ir.TypeEnvironment(
+            new ir.CoreTypes(component), new ir.ClassHierarchy(component)));
 
-  ir.DartType getStaticType(ir.Expression node) {
-    if (!_isStaticTypePrepared) {
-      _isStaticTypePrepared = true;
-      try {
-        _typeEnvironment ??= new ir.TypeEnvironment(
-            new ir.CoreTypes(component), new ir.ClassHierarchy(component));
-      } catch (e) {}
+  void run({bool verbose = false, bool generate = false}) {
+    if (!generate) {
+      File file = new File(_allowedListPath);
+      if (file.existsSync()) {
+        try {
+          _expectedJson = json.jsonDecode(file.readAsStringSync());
+        } catch (e) {
+          Expect.fail('Error reading allowed list from $_allowedListPath: $e');
+        }
+      }
     }
-    if (_typeEnvironment == null) {
+    component.accept(this);
+    if (generate) {
+      Map<String, Map<String, int>> actualJson = {};
+      _actualMessages.forEach(
+          (String uri, Map<String, List<DiagnosticMessage>> actualMessagesMap) {
+        Map<String, int> map = {};
+        actualMessagesMap
+            .forEach((String message, List<DiagnosticMessage> actualMessages) {
+          map[message] = actualMessages.length;
+        });
+        actualJson[uri] = map;
+      });
+
+      new File(_allowedListPath).writeAsStringSync(
+          new json.JsonEncoder.withIndent('  ').convert(actualJson));
+      return;
+    }
+
+    int errorCount = 0;
+    _expectedJson.forEach((uri, expectedMessages) {
+      Map<String, List<DiagnosticMessage>> actualMessagesMap =
+          _actualMessages[uri];
+      if (actualMessagesMap == null) {
+        print("Error: Allowed-listing of uri '$uri' isn't used. "
+            "Remove it from the allowed-list.");
+        errorCount++;
+      } else {
+        expectedMessages.forEach((expectedMessage, expectedCount) {
+          List<DiagnosticMessage> actualMessages =
+              actualMessagesMap[expectedMessage];
+          if (actualMessages == null) {
+            print("Error: Allowed-listing of message '$expectedMessage' "
+                "in uri '$uri' isn't used. Remove it from the allowed-list.");
+            errorCount++;
+          } else {
+            int actualCount = actualMessages.length;
+            if (actualCount != expectedCount) {
+              print("Error: Unexpected count of allowed message "
+                  "'$expectedMessage' in uri '$uri'. "
+                  "Expected $expectedCount, actual $actualCount:");
+              print(
+                  '----------------------------------------------------------');
+              for (DiagnosticMessage message in actualMessages) {
+                reporter.reportError(message);
+              }
+              print(
+                  '----------------------------------------------------------');
+              errorCount++;
+            }
+          }
+        });
+        actualMessagesMap
+            .forEach((String message, List<DiagnosticMessage> actualMessages) {
+          if (!expectedMessages.containsKey(message)) {
+            for (DiagnosticMessage message in actualMessages) {
+              reporter.reportError(message);
+              errorCount++;
+            }
+          }
+        });
+        _actualMessages.forEach((String uri,
+            Map<String, List<DiagnosticMessage>> actualMessagesMap) {
+          if (!_expectedJson.containsKey(uri)) {
+            actualMessagesMap.forEach(
+                (String message, List<DiagnosticMessage> actualMessages) {
+              if (!expectedMessages.containsKey(message)) {
+                for (DiagnosticMessage message in actualMessages) {
+                  reporter.reportError(message);
+                  errorCount++;
+                }
+              }
+            });
+          }
+        });
+      }
+    });
+    if (errorCount != 0) {
+      print('$errorCount error(s) found.');
+      print("""
+
+********************************************************************************
+*  Unexpected dynamic invocations found by test:
+*
+*    ${relativize(Uri.base, Platform.script, Platform.isWindows)}
+*
+*  Please address the reported errors, or, if the errors are as expected, run
+*
+*    dart ${relativize(Uri.base, Platform.script, Platform.isWindows)} -g
+*
+*  to update the expectation file.
+********************************************************************************
+""");
+      exit(-1);
+    }
+    if (verbose) {
+      _actualMessages.forEach(
+          (String uri, Map<String, List<DiagnosticMessage>> actualMessagesMap) {
+        actualMessagesMap
+            .forEach((String message, List<DiagnosticMessage> actualMessages) {
+          for (DiagnosticMessage message in actualMessages) {
+            reporter.reportErrorMessage(message.sourceSpan, MessageKind.GENERIC,
+                {'text': '${message.message} (allowed)'});
+          }
+        });
+      });
+    } else {
+      int total = 0;
+      _actualMessages.forEach(
+          (String uri, Map<String, List<DiagnosticMessage>> actualMessagesMap) {
+        int count = 0;
+        actualMessagesMap
+            .forEach((String message, List<DiagnosticMessage> actualMessages) {
+          count += actualMessages.length;
+        });
+
+        print('${count} error(s) allowed in $uri');
+        total += count;
+      });
+      if (total > 0) {
+        print('${total} error(s) allowed in total.');
+      }
+    }
+  }
+
+  /// Pulls the static type from `getStaticType` on [node].
+  ir.DartType _getStaticTypeFromExpression(ir.Expression node) {
+    if (typeEnvironment == null) {
       // The class hierarchy crashes on multiple inheritance. Use `dynamic`
       // as static type.
       return const ir.DynamicType();
@@ -70,77 +200,36 @@
       enclosingClass = enclosingClass.parent;
     }
     try {
-      _typeEnvironment.thisType =
+      typeEnvironment.thisType =
           enclosingClass is ir.Class ? enclosingClass.thisType : null;
-      return node.getStaticType(_typeEnvironment);
+      return node.getStaticType(typeEnvironment);
     } catch (e) {
       // The static type computation crashes on type errors. Use `dynamic`
       // as static type.
       return const ir.DynamicType();
     }
   }
-}
 
-// TODO(johnniwinther): Handle dynamic access of Object properties/methods
-// separately.
-class DynamicVisitor extends StaticTypeVisitor {
-  final DiagnosticReporter reporter;
-  final ir.Component component;
-  final Map<String, List<String>> allowedList;
-  int _errorCount = 0;
-  Map<String, Set<String>> _encounteredAllowedListedErrors =
-      <String, Set<String>>{};
-  Map<Uri, List<DiagnosticMessage>> _allowedListedErrors =
-      <Uri, List<DiagnosticMessage>>{};
+  ir.DartType visitNode(ir.Node node) {
+    ir.DartType staticType = node?.accept(this);
+    assert(node is! ir.Expression ||
+        staticType == _getStaticTypeFromExpression(node));
+    return staticType;
+  }
 
-  DynamicVisitor(this.reporter, this.component, this.allowedList);
-
-  void run({bool verbose = false}) {
-    component.accept(this);
-    bool failed = false;
-    if (_errorCount != 0) {
-      print('$_errorCount error(s) found.');
-      failed = true;
-    }
-    allowedList.forEach((String file, List<String> messageParts) {
-      Set<String> encounteredParts = _encounteredAllowedListedErrors[file];
-      if (encounteredParts == null) {
-        print("Allowed-listing of path '$file' isn't used. "
-            "Remove it from the allowed-list.");
-        failed = true;
-      } else if (messageParts != null) {
-        for (String messagePart in messageParts) {
-          if (!encounteredParts.contains(messagePart)) {
-            print("Allowed-listing of message '$messagePart' in path '$file' "
-                "isn't used. Remove it from the allowed-list.");
-          }
-          failed = true;
-        }
-      }
-    });
-    Expect.isFalse(failed, "Errors occurred.");
-    if (verbose) {
-      _allowedListedErrors.forEach((Uri uri, List<DiagnosticMessage> messages) {
-        for (DiagnosticMessage message in messages) {
-          reporter.reportError(message);
-        }
-      });
-    } else {
-      int total = 0;
-      _allowedListedErrors.forEach((Uri uri, List<DiagnosticMessage> messages) {
-        print('${messages.length} error(s) allowed in $uri');
-        total += messages.length;
-      });
-      if (total > 0) {
-        print('${total} error(s) allowed in total.');
+  @override
+  Null visitLibrary(ir.Library node) {
+    for (String path in analyzedPaths) {
+      if ('${node.importUri}'.startsWith(path)) {
+        return super.visitLibrary(node);
       }
     }
   }
 
   @override
   ir.DartType visitPropertyGet(ir.PropertyGet node) {
-    ir.DartType result = super.visitPropertyGet(node);
-    ir.DartType type = node.receiver.accept(this);
+    ir.DartType type = visitNode(node.receiver);
+    ir.DartType result = computePropertyGetType(node, type);
     if (type is ir.DynamicType) {
       reportError(node, "Dynamic access of '${node.name}'.");
     }
@@ -149,8 +238,8 @@
 
   @override
   ir.DartType visitPropertySet(ir.PropertySet node) {
-    ir.DartType result = super.visitPropertySet(node);
-    ir.DartType type = node.receiver.accept(this);
+    ir.DartType type = visitNode(node.receiver);
+    ir.DartType result = visitNode(node.value);
     if (type is ir.DynamicType) {
       reportError(node, "Dynamic update to '${node.name}'.");
     }
@@ -159,12 +248,16 @@
 
   @override
   ir.DartType visitMethodInvocation(ir.MethodInvocation node) {
-    ir.DartType result = super.visitMethodInvocation(node);
+    ir.DartType type = visitNode(node.receiver);
+    ir.DartType result = computeMethodInvocationType(node, type);
+    if (!isSpecialCasedBinaryOperator(node.interfaceTarget)) {
+      visitNodes(node.arguments.positional);
+      visitNodes(node.arguments.named);
+    }
     if (node.name.name == '==' &&
         node.arguments.positional.single is ir.NullLiteral) {
       return result;
     }
-    ir.DartType type = node.receiver.accept(this);
     if (type is ir.DynamicType) {
       reportError(node, "Dynamic invocation of '${node.name}'.");
     }
@@ -174,41 +267,17 @@
   void reportError(ir.Node node, String message) {
     SourceSpan span = computeSourceSpanFromTreeNode(node);
     Uri uri = span.uri;
+    String uriString = relativize(Uri.base, uri, Platform.isWindows);
+    Map<String, List<DiagnosticMessage>> actualMap = _actualMessages
+        .putIfAbsent(uriString, () => <String, List<DiagnosticMessage>>{});
     if (uri.scheme == 'org-dartlang-sdk') {
-      uri = Uri.base.resolve(uri.path.substring(1));
-      span = new SourceSpan(uri, span.begin, span.end);
+      span = new SourceSpan(
+          Uri.base.resolve(uri.path.substring(1)), span.begin, span.end);
     }
-    bool whiteListed = false;
-    allowedList.forEach((String file, List<String> messageParts) {
-      if (uri.path.endsWith(file)) {
-        if (messageParts == null) {
-          // All errors are whitelisted.
-          whiteListed = true;
-          message += ' (white-listed)';
-          _encounteredAllowedListedErrors.putIfAbsent(
-              file, () => new Set<String>());
-        } else {
-          for (String messagePart in messageParts) {
-            if (message.contains(messagePart)) {
-              _encounteredAllowedListedErrors
-                  .putIfAbsent(file, () => new Set<String>())
-                  .add(messagePart);
-              message += ' (allowed)';
-              whiteListed = true;
-            }
-          }
-        }
-      }
-    });
     DiagnosticMessage diagnosticMessage =
         reporter.createMessage(span, MessageKind.GENERIC, {'text': message});
-    if (whiteListed) {
-      _allowedListedErrors
-          .putIfAbsent(uri, () => <DiagnosticMessage>[])
-          .add(diagnosticMessage);
-    } else {
-      reporter.reportError(diagnosticMessage);
-      _errorCount++;
-    }
+    actualMap
+        .putIfAbsent(message, () => <DiagnosticMessage>[])
+        .add(diagnosticMessage);
   }
 }
diff --git a/tests/compiler/dart2js/analyses/api_allowed.json b/tests/compiler/dart2js/analyses/api_allowed.json
new file mode 100644
index 0000000..75f95cb
--- /dev/null
+++ b/tests/compiler/dart2js/analyses/api_allowed.json
@@ -0,0 +1,373 @@
+{
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/interceptors.dart": {
+    "Dynamic invocation of 'toString'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_number.dart": {
+    "Dynamic invocation of '[]'.": 5,
+    "Dynamic invocation of '<'.": 4,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of '<='.": 1,
+    "Dynamic invocation of '>'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_helper.dart": {
+    "Dynamic invocation of '[]'.": 3,
+    "Dynamic access of 'isNaN'.": 3,
+    "Dynamic invocation of '<='.": 4,
+    "Dynamic invocation of '-'.": 4,
+    "Dynamic invocation of '>>'.": 2,
+    "Dynamic invocation of '&'.": 3,
+    "Dynamic invocation of '<'.": 6,
+    "Dynamic invocation of '>'.": 4,
+    "Dynamic invocation of '+'.": 1,
+    "Dynamic invocation of 'noSuchMethod'.": 1,
+    "Dynamic access of '_js_helper::_self'.": 1,
+    "Dynamic access of '_js_helper::_target'.": 1,
+    "Dynamic access of '_js_helper::_receiver'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'hashCode'.": 2,
+    "Dynamic invocation of 'toString'.": 2,
+    "Dynamic access of 'length'.": 3,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of 'substring'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/constant_map.dart": {
+    "Dynamic invocation of '=='.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/string_helper.dart": {
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '+'.": 1,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of 'substring'.": 7,
+    "Dynamic invocation of 'allMatches'.": 4,
+    "Dynamic access of 'isNotEmpty'.": 1,
+    "Dynamic invocation of '_js_helper::_execGlobal'.": 1,
+    "Dynamic access of 'start'.": 1,
+    "Dynamic access of 'end'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'length'.": 4,
+    "Dynamic invocation of '[]'.": 2,
+    "Dynamic invocation of 'call'.": 13,
+    "Dynamic invocation of 'codeUnitAt'.": 2,
+    "Dynamic access of 'iterator'.": 2,
+    "Dynamic invocation of 'replaceRange'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart": {
+    "Dynamic access of 'hashCode'.": 1,
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic access of '_js_helper::_length'.": 2,
+    "Dynamic access of '_js_helper::_modifications'.": 4,
+    "Dynamic invocation of 'containsKey'.": 1,
+    "Dynamic access of '_js_helper::_first'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_rti.dart": {
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '-'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/native_helper.dart": {
+    "Dynamic invocation of '=='.": 6,
+    "Dynamic access of 'length'.": 2,
+    "Dynamic invocation of '[]'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/regexp_helper.dart": {
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '-'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/native_typed_data.dart": {
+    "Dynamic invocation of '>'.": 1,
+    "Dynamic invocation of '|'.": 3,
+    "Dynamic invocation of '>='.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/async_patch.dart": {
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic access of 'iterator'.": 1,
+    "Dynamic invocation of 'call'.": 4,
+    "Dynamic invocation of 'then'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/async/future.dart": {
+    "Dynamic invocation of 'call'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/async/stream.dart": {
+    "Dynamic invocation of 'dart.async::_addError'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/async/async_error.dart": {
+    "Dynamic invocation of 'call'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/collection_patch.dart": {
+    "Dynamic access of 'hashCode'.": 3,
+    "Dynamic invocation of '=='.": 4,
+    "Dynamic access of 'dart.collection::_length'.": 2,
+    "Dynamic invocation of 'dart.collection::_computeKeys'.": 2,
+    "Dynamic invocation of 'containsKey'.": 2,
+    "Dynamic access of 'dart.collection::_keys'.": 2,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'dart.collection::_modifications'.": 5,
+    "Dynamic access of 'dart.collection::_map'.": 4,
+    "Dynamic access of 'dart.collection::_elements'.": 1,
+    "Dynamic access of 'dart.collection::_element'.": 1,
+    "Dynamic access of 'dart.collection::_first'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/collection/splay_tree.dart": {
+    "Dynamic invocation of '=='.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/collection/hash_map.dart": {
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'hashCode'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/collection/iterable.dart": {
+    "Dynamic access of 'length'.": 2,
+    "Dynamic invocation of '+'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/html/dart2js/html_dart2js.dart": {
+    "Dynamic access of 'style'.": 1,
+    "Dynamic invocation of '=='.": 4,
+    "Dynamic access of 'left'.": 3,
+    "Dynamic access of 'top'.": 3,
+    "Dynamic access of 'width'.": 2,
+    "Dynamic access of 'height'.": 2,
+    "Dynamic invocation of 'remove'.": 2,
+    "Dynamic update to 'dart.dom.html::_innerHtml'.": 1,
+    "Dynamic access of 'firstChild'.": 2,
+    "Dynamic invocation of 'append'.": 1,
+    "Dynamic access of 'tagName'.": 2,
+    "Dynamic invocation of 'round'.": 20,
+    "Dynamic invocation of 'toList'.": 1,
+    "Dynamic access of 'right'.": 1,
+    "Dynamic access of 'bottom'.": 1,
+    "Dynamic invocation of 'call'.": 1,
+    "Dynamic invocation of 'dart.dom.html::_initKeyboardEvent'.": 1,
+    "Dynamic access of 'attributes'.": 1,
+    "Dynamic invocation of '[]'.": 1,
+    "Dynamic invocation of 'toString'.": 1,
+    "Dynamic invocation of 'toLowerCase'.": 1,
+    "Dynamic invocation of 'attached'.": 1,
+    "Dynamic invocation of 'detached'.": 1,
+    "Dynamic invocation of 'attributeChanged'.": 1,
+    "Dynamic invocation of 'createElement'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/html/html_common/conversions.dart": {
+    "Dynamic invocation of '[]='.": 2,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '[]'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/html/html_common/filtered_element_list.dart": {
+    "Dynamic invocation of 'remove'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/html/html_common/lists.dart": {
+    "Dynamic invocation of '=='.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart": {
+    "Dynamic access of 'onUpgradeNeeded'.": 1,
+    "Dynamic invocation of 'listen'.": 2,
+    "Dynamic access of 'onBlocked'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/io/directory_impl.dart": {
+    "Dynamic invocation of '=='.": 5,
+    "Dynamic invocation of '[]'.": 10
+  },
+  "org-dartlang-sdk:///sdk/lib/io/file_impl.dart": {
+    "Dynamic invocation of 'cancel'.": 1,
+    "Dynamic invocation of 'pause'.": 1,
+    "Dynamic invocation of 'resume'.": 1,
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic invocation of '[]'.": 4,
+    "Dynamic access of 'length'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/io/file_system_entity.dart": {
+    "Dynamic invocation of '[]'.": 7
+  },
+  "org-dartlang-sdk:///sdk/lib/io/io_resource_info.dart": {
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic invocation of 'containsKey'.": 1,
+    "Dynamic invocation of '[]'.": 1,
+    "Dynamic access of 'path'.": 1,
+    "Dynamic access of 'dart.io::_path'.": 1,
+    "Dynamic access of 'pid'.": 1,
+    "Dynamic access of 'dart.io::_arguments'.": 1,
+    "Dynamic access of 'dart.io::_workingDirectory'.": 2,
+    "Dynamic access of 'isListening'.": 3,
+    "Dynamic access of 'address'.": 4,
+    "Dynamic access of 'host'.": 5,
+    "Dynamic access of 'port'.": 3,
+    "Dynamic access of 'remoteAddress'.": 2,
+    "Dynamic access of 'remotePort'.": 2,
+    "Dynamic access of 'isTcp'.": 1,
+    "Dynamic access of 'type'.": 1,
+    "Dynamic access of 'name'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/io/link.dart": {
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of '[]'.": 3
+  },
+  "org-dartlang-sdk:///sdk/lib/io/platform_impl.dart": {
+    "Dynamic invocation of 'indexOf'.": 1,
+    "Dynamic invocation of '>'.": 1,
+    "Dynamic invocation of 'substring'.": 2,
+    "Dynamic invocation of '+'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/io/secure_server_socket.dart": {
+    "Dynamic update to 'dart.io::_owner'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/io/secure_socket.dart": {
+    "Dynamic invocation of 'dart.io::_detachRaw'.": 2,
+    "Dynamic invocation of '[]'.": 10,
+    "Dynamic access of 'dart.io::_socket'.": 1,
+    "Dynamic access of 'closedReadEventSent'.": 1,
+    "Dynamic access of 'host'.": 1,
+    "Dynamic update to 'dart.io::_owner'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of '~/'.": 1,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '-'.": 7
+  },
+  "org-dartlang-sdk:///sdk/lib/io/stdio.dart": {
+    "Dynamic invocation of 'writeFromSync'.": 1,
+    "Dynamic invocation of 'cancel'.": 1,
+    "Dynamic invocation of 'closeSync'.": 1,
+    "Dynamic access of 'dart.io::_stream'.": 1,
+    "Dynamic invocation of '=='.": 3
+  },
+  "org-dartlang-sdk:///sdk/lib/io/common.dart": {
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of '[]'.": 3
+  },
+  "org-dartlang-sdk:///sdk/lib/js/dart2js/js_dart2js.dart": {
+    "Dynamic invocation of '[]'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/svg/dart2js/svg_dart2js.dart": {
+    "Dynamic invocation of 'createFragment'.": 1,
+    "Dynamic access of 'nodes'.": 1,
+    "Dynamic invocation of 'where'.": 1,
+    "Dynamic access of 'single'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/core_patch.dart": {
+    "Dynamic access of 'dart.core::_digits'.": 2,
+    "Dynamic invocation of '<'.": 2,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '[]'.": 19,
+    "Dynamic invocation of 'dart.core::_absSubSetSign'.": 3,
+    "Dynamic invocation of 'dart.core::_absAndNotSetSign'.": 2,
+    "Dynamic invocation of 'dart.core::_absAddSetSign'.": 2,
+    "Dynamic invocation of 'dart.core::_absXorSetSign'.": 1,
+    "Dynamic invocation of '[]='.": 2,
+    "Dynamic invocation of '&'.": 6,
+    "Dynamic invocation of '=='.": 16,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of '>='.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/core/date_time.dart": {
+    "Dynamic access of 'dart.core::_value'.": 1,
+    "Dynamic access of 'isUtc'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/core/duration.dart": {
+    "Dynamic access of 'dart.core::_duration'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/core/errors.dart": {
+    "Dynamic access of 'length'.": 2,
+    "Dynamic invocation of '<'.": 2,
+    "Dynamic invocation of '~'.": 1,
+    "Dynamic invocation of '^'.": 1,
+    "Dynamic invocation of '&'.": 1,
+    "Dynamic invocation of '|'.": 1,
+    "Dynamic invocation of '>>'.": 1,
+    "Dynamic invocation of '<<'.": 1,
+    "Dynamic invocation of '+'.": 1,
+    "Dynamic invocation of 'unary-'.": 1,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of '*'.": 1,
+    "Dynamic invocation of '/'.": 1,
+    "Dynamic invocation of '~/'.": 1,
+    "Dynamic invocation of '>'.": 1,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of '<='.": 1,
+    "Dynamic invocation of '%'.": 1,
+    "Dynamic invocation of 'length'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/core/exceptions.dart": {
+    "Dynamic access of 'length'.": 3,
+    "Dynamic invocation of 'codeUnitAt'.": 2,
+    "Dynamic invocation of 'substring'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/core/uri.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of 'startsWith'.": 1,
+    "Dynamic invocation of 'add'.": 1,
+    "Dynamic invocation of '=='.": 8
+  },
+  "org-dartlang-sdk:///sdk/lib/math/point.dart": {
+    "Dynamic access of 'x'.": 1,
+    "Dynamic access of 'y'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/math/rectangle.dart": {
+    "Dynamic access of 'left'.": 1,
+    "Dynamic access of 'top'.": 1,
+    "Dynamic access of 'right'.": 1,
+    "Dynamic access of 'bottom'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/convert_patch.dart": {
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'clear'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/convert/encoding.dart": {
+    "Dynamic invocation of 'write'.": 1,
+    "Dynamic invocation of 'toString'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/convert/string_conversion.dart": {
+    "Dynamic invocation of 'toString'.": 3
+  },
+  "org-dartlang-sdk:///sdk/lib/convert/json.dart": {
+    "Dynamic invocation of 'toJson'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/isolate/isolate.dart": {
+    "Dynamic invocation of '[]'.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/crypto.dart": {
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '&'.": 3,
+    "Dynamic invocation of '-'.": 2,
+    "Dynamic invocation of 'unary-'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/http_date.dart": {
+    "Dynamic access of 'length'.": 3,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '>='.": 2,
+    "Dynamic invocation of '[]'.": 7,
+    "Dynamic invocation of '=='.": 2
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/http_headers.dart": {
+    "Dynamic invocation of '=='.": 3,
+    "Dynamic invocation of 'toLowerCase'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of 'codeUnitAt'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/http_impl.dart": {
+    "Dynamic access of 'message'.": 3,
+    "Dynamic invocation of 'split'.": 1,
+    "Dynamic invocation of 'trim'.": 1,
+    "Dynamic invocation of 'toLowerCase'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'call'.": 1,
+    "Dynamic invocation of 'destroy'.": 2,
+    "Dynamic invocation of 'setOption'.": 1,
+    "Dynamic access of 'address'.": 2,
+    "Dynamic access of 'host'.": 2,
+    "Dynamic access of 'port'.": 2,
+    "Dynamic access of 'remoteAddress'.": 1,
+    "Dynamic access of 'remotePort'.": 1,
+    "Dynamic invocation of 'dart._http::_toJSON'.": 3,
+    "Dynamic invocation of 'listen'.": 1,
+    "Dynamic invocation of 'close'.": 1
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/http_parser.dart": {
+    "Dynamic invocation of '=='.": 4
+  },
+  "org-dartlang-sdk:///sdk/lib/_http/websocket_impl.dart": {
+    "Dynamic invocation of 'transform'.": 1,
+    "Dynamic invocation of 'listen'.": 1,
+    "Dynamic access of 'address'.": 1,
+    "Dynamic access of 'host'.": 1,
+    "Dynamic access of 'port'.": 1,
+    "Dynamic invocation of 'dart._http::_toJSON'.": 1
+  }
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/analyses/api_dynamic_test.dart b/tests/compiler/dart2js/analyses/api_dynamic_test.dart
index 0737162..bb1564a 100644
--- a/tests/compiler/dart2js/analyses/api_dynamic_test.dart
+++ b/tests/compiler/dart2js/analyses/api_dynamic_test.dart
@@ -5,69 +5,14 @@
 import 'package:async_helper/async_helper.dart';
 import 'analysis_helper.dart';
 
-// TODO(johnniwinther): Remove unneeded dynamic accesses.
-const Map<String, List<String>> allowedList = {
-  'sdk/lib/_http/crypto.dart': null,
-  'sdk/lib/_http/http_date.dart': null,
-  'sdk/lib/_http/http_headers.dart': null,
-  'sdk/lib/_http/http_impl.dart': null,
-  'sdk/lib/_http/http_parser.dart': null,
-  'sdk/lib/_http/websocket_impl.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/async_patch.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/collection_patch.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/constant_map.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/convert_patch.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/core_patch.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/interceptors.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/js_helper.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/js_number.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/js_rti.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/native_helper.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/native_typed_data.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/regexp_helper.dart': null,
-  'sdk/lib/_internal/js_runtime/lib/string_helper.dart': null,
-  'sdk/lib/async/async_error.dart': null,
-  'sdk/lib/async/future.dart': null,
-  'sdk/lib/async/stream.dart': null,
-  'sdk/lib/collection/hash_map.dart': null,
-  'sdk/lib/collection/iterable.dart': null,
-  'sdk/lib/collection/splay_tree.dart': null,
-  'sdk/lib/convert/encoding.dart': null,
-  'sdk/lib/convert/json.dart': null,
-  'sdk/lib/convert/string_conversion.dart': null,
-  'sdk/lib/core/date_time.dart': null,
-  'sdk/lib/core/duration.dart': null,
-  'sdk/lib/core/errors.dart': null,
-  'sdk/lib/core/exceptions.dart': null,
-  'sdk/lib/core/uri.dart': null,
-  'sdk/lib/html/dart2js/html_dart2js.dart': null,
-  'sdk/lib/html/html_common/conversions.dart': null,
-  'sdk/lib/html/html_common/filtered_element_list.dart': null,
-  'sdk/lib/html/html_common/lists.dart': null,
-  'sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart': null,
-  'sdk/lib/io/common.dart': null,
-  'sdk/lib/io/directory_impl.dart': null,
-  'sdk/lib/io/file_impl.dart': null,
-  'sdk/lib/io/file_system_entity.dart': null,
-  'sdk/lib/io/io_resource_info.dart': null,
-  'sdk/lib/io/link.dart': null,
-  'sdk/lib/io/platform_impl.dart': null,
-  'sdk/lib/io/secure_server_socket.dart': null,
-  'sdk/lib/io/secure_socket.dart': null,
-  'sdk/lib/io/stdio.dart': null,
-  'sdk/lib/isolate/isolate.dart': null,
-  'sdk/lib/js/dart2js/js_dart2js.dart': null,
-  'sdk/lib/math/point.dart': null,
-  'sdk/lib/math/rectangle.dart': null,
-  'sdk/lib/svg/dart2js/svg_dart2js.dart': null,
-};
-
+// TODO(johnniwinther): Remove unneeded dynamic accesses from platform source
+// code.
 main(List<String> args) {
   asyncTest(() async {
     await run(Uri.parse('memory:main.dart'),
+        'tests/compiler/dart2js/analyses/api_allowed.json', ['dart:'],
         memorySourceFiles: {'main.dart': 'main() {}'},
-        allowedList: allowedList,
-        verbose: args.contains('-v'));
+        verbose: args.contains('-v'),
+        generate: args.contains('-g'));
   });
 }
diff --git a/tests/compiler/dart2js/analyses/dart2js_allowed.json b/tests/compiler/dart2js/analyses/dart2js_allowed.json
new file mode 100644
index 0000000..6796477
--- /dev/null
+++ b/tests/compiler/dart2js/analyses/dart2js_allowed.json
@@ -0,0 +1,497 @@
+{
+  "pkg/compiler/lib/src/dart2js.dart": {
+    "Dynamic invocation of 'call'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'pause'.": 1,
+    "Dynamic invocation of 'resume'.": 1
+  },
+  "pkg/compiler/lib/src/source_file_provider.dart": {
+    "Dynamic invocation of 'call'.": 3
+  },
+  "pkg/compiler/lib/src/util/util.dart": {
+    "Dynamic access of 'hashCode'.": 8,
+    "Dynamic access of 'a'.": 1,
+    "Dynamic access of 'b'.": 1,
+    "Dynamic invocation of 'write'.": 11,
+    "Dynamic invocation of 'writeCharCode'.": 1,
+    "Dynamic invocation of '=='.": 1
+  },
+  "pkg/compiler/lib/src/util/maplet.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of '=='.": 9,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of 'containsKey'.": 1,
+    "Dynamic invocation of '[]'.": 11,
+    "Dynamic invocation of '[]='.": 12,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of 'remove'.": 1,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic access of 'iterator'.": 1
+  },
+  "pkg/compiler/lib/src/util/setlet.dart": {
+    "Dynamic access of 'iterator'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of '=='.": 10,
+    "Dynamic invocation of 'contains'.": 1,
+    "Dynamic invocation of '[]'.": 7,
+    "Dynamic invocation of 'add'.": 1,
+    "Dynamic invocation of '[]='.": 6,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of 'lookup'.": 1,
+    "Dynamic invocation of 'remove'.": 1,
+    "Dynamic invocation of '-'.": 2,
+    "Dynamic invocation of 'removeWhere'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic invocation of 'toSet'.": 1,
+    "Dynamic invocation of 'toList'.": 1
+  },
+  "pkg/compiler/lib/src/common/tasks.dart": {
+    "Dynamic invocation of '=='.": 4
+  },
+  "pkg/compiler/lib/src/compiler.dart": {
+    "Dynamic invocation of 'toString'.": 1
+  },
+  "pkg/compiler/lib/src/diagnostics/messages.dart": {
+    "Dynamic access of 'template'.": 1,
+    "Dynamic invocation of 'toString'.": 1,
+    "Dynamic access of 'lexeme'.": 1,
+    "Dynamic invocation of 'toDartText'.": 1
+  },
+  "pkg/compiler/lib/src/diagnostics/source_span.dart": {
+    "Dynamic access of 'uri'.": 1,
+    "Dynamic access of 'begin'.": 1,
+    "Dynamic access of 'end'.": 1
+  },
+  "pkg/compiler/lib/src/deferred_load.dart": {
+    "Dynamic invocation of '[]='.": 1,
+    "Dynamic access of 'memberContext'.": 1,
+    "Dynamic access of 'name'.": 1
+  },
+  "pkg/compiler/lib/src/elements/entities.dart": {
+    "Dynamic access of 'requiredParameters'.": 1,
+    "Dynamic access of 'positionalParameters'.": 1,
+    "Dynamic access of 'typeParameters'.": 1,
+    "Dynamic access of 'namedParameters'.": 2,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '[]'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart": {
+    "Dynamic access of 'allocationNode'.": 2,
+    "Dynamic access of 'elementType'.": 3,
+    "Dynamic access of 'length'.": 2,
+    "Dynamic access of 'isNullable'.": 2,
+    "Dynamic access of 'isEmptyOrNull'.": 1,
+    "Dynamic access of 'isContainer'.": 1,
+    "Dynamic access of 'forwardTo'.": 1,
+    "Dynamic access of 'allocationElement'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart": {
+    "Dynamic access of 'allocationNode'.": 1,
+    "Dynamic access of 'keyType'.": 4,
+    "Dynamic access of 'valueType'.": 4,
+    "Dynamic access of 'masks::_typeMap'.": 5,
+    "Dynamic invocation of 'containsKey'.": 2,
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic invocation of '[]'.": 1,
+    "Dynamic invocation of 'every'.": 1,
+    "Dynamic access of 'isNullable'.": 2,
+    "Dynamic access of 'isEmptyOrNull'.": 1,
+    "Dynamic access of 'isDictionary'.": 1,
+    "Dynamic access of 'forwardTo'.": 2,
+    "Dynamic invocation of 'nullable'.": 2,
+    "Dynamic invocation of 'union'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic access of 'isMap'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart": {
+    "Dynamic access of 'forwardTo'.": 2,
+    "Dynamic invocation of 'nullable'.": 1,
+    "Dynamic invocation of 'nonNullable'.": 1,
+    "Dynamic access of 'isNullable'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart": {
+    "Dynamic access of 'allocationNode'.": 2,
+    "Dynamic access of 'keyType'.": 5,
+    "Dynamic access of 'valueType'.": 3,
+    "Dynamic access of 'isNullable'.": 2,
+    "Dynamic access of 'isEmptyOrNull'.": 1,
+    "Dynamic access of 'isMap'.": 1,
+    "Dynamic access of 'forwardTo'.": 2,
+    "Dynamic access of 'isDictionary'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'typeMap'.": 1,
+    "Dynamic access of 'values'.": 1,
+    "Dynamic invocation of 'union'.": 1,
+    "Dynamic invocation of 'fold'.": 1,
+    "Dynamic access of 'allocationElement'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart": {
+    "Dynamic access of 'isForwarding'.": 1,
+    "Dynamic access of 'forwardTo'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart": {
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'isUnion'.": 5,
+    "Dynamic access of 'disjointMasks'.": 4,
+    "Dynamic invocation of 'contains'.": 1,
+    "Dynamic invocation of 'nonNullable'.": 1,
+    "Dynamic invocation of 'every'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart": {
+    "Dynamic access of 'value'.": 1
+  },
+  "pkg/compiler/lib/src/io/source_information.dart": {
+    "Dynamic access of 'sourceUri'.": 1,
+    "Dynamic access of 'offset'.": 1,
+    "Dynamic access of 'sourceName'.": 1
+  },
+  "pkg/compiler/lib/src/js_model/js_strategy.dart": {
+    "Dynamic invocation of '=='.": 2
+  },
+  "pkg/compiler/lib/src/ssa/nodes.dart": {
+    "Dynamic invocation of 'replaceWith'.": 1
+  },
+  "pkg/compiler/lib/src/universe/world_builder.dart": {
+    "Dynamic access of 'cls'.": 1
+  },
+  "pkg/compiler/lib/src/universe/member_usage.dart": {
+    "Dynamic access of 'entity'.": 1
+  },
+  "pkg/compiler/lib/src/universe/resolution_world_builder.dart": {
+    "Dynamic access of 'type'.": 1,
+    "Dynamic access of 'kind'.": 1,
+    "Dynamic access of 'isRedirection'.": 1
+  },
+  "pkg/compiler/lib/src/constants/expressions.dart": {
+    "Dynamic access of 'kind'.": 1,
+    "Dynamic access of 'hashCode'.": 1
+  },
+  "pkg/compiler/lib/src/helpers/trace.dart": {
+    "Dynamic access of 'index'.": 1,
+    "Dynamic access of 'file'.": 1,
+    "Dynamic access of 'lineNo'.": 1,
+    "Dynamic access of 'columnNo'.": 1,
+    "Dynamic access of 'method'.": 1
+  },
+  "pkg/compiler/lib/src/helpers/debug_collection.dart": {
+    "Dynamic access of 'runtimeType'.": 4
+  },
+  "pkg/compiler/lib/src/helpers/expensive_map.dart": {
+    "Dynamic access of 'length'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'isNotEmpty'.": 1,
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic access of 'values'.": 1,
+    "Dynamic invocation of 'containsKey'.": 1,
+    "Dynamic invocation of 'containsValue'.": 1,
+    "Dynamic invocation of '[]'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic invocation of '[]='.": 1,
+    "Dynamic invocation of 'addAll'.": 1,
+    "Dynamic invocation of 'remove'.": 2,
+    "Dynamic invocation of 'clear'.": 1,
+    "Dynamic access of 'entries'.": 1,
+    "Dynamic invocation of 'addEntries'.": 1,
+    "Dynamic invocation of 'map'.": 1,
+    "Dynamic invocation of 'update'.": 1,
+    "Dynamic invocation of 'updateAll'.": 1,
+    "Dynamic invocation of 'removeWhere'.": 1
+  },
+  "pkg/compiler/lib/src/helpers/expensive_set.dart": {
+    "Dynamic access of 'length'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'isNotEmpty'.": 1,
+    "Dynamic access of 'iterator'.": 1,
+    "Dynamic invocation of 'contains'.": 1,
+    "Dynamic invocation of 'lookup'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic invocation of 'add'.": 2,
+    "Dynamic invocation of 'remove'.": 2,
+    "Dynamic invocation of 'clear'.": 1,
+    "Dynamic invocation of 'toSet'.": 1
+  },
+  "pkg/compiler/lib/src/helpers/track_map.dart": {
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '-'.": 1
+  },
+  "pkg/compiler/lib/src/closure.dart": {
+    "Dynamic access of 'typeVariable'.": 1
+  },
+  "pkg/compiler/lib/src/js_backend/native_data.dart": {
+    "Dynamic access of 'names'.": 1,
+    "Dynamic access of 'isNonLeaf'.": 1
+  },
+  "pkg/compiler/lib/src/elements/names.dart": {
+    "Dynamic access of 'library'.": 1
+  },
+  "pkg/compiler/lib/src/constants/values.dart": {
+    "Dynamic access of 'element'.": 1,
+    "Dynamic access of 'type'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'hashCode'.": 2
+  },
+  "pkg/compiler/lib/src/elements/types.dart": {
+    "Dynamic access of 'element'.": 1
+  },
+  "pkg/compiler/lib/src/js_backend/constant_system_javascript.dart": {
+    "Dynamic invocation of 'remainder'.": 1,
+    "Dynamic access of 'isString'.": 1,
+    "Dynamic access of 'stringValue'.": 1,
+    "Dynamic invocation of '=='.": 1
+  },
+  "pkg/compiler/lib/src/universe/use.dart": {
+    "Dynamic access of 'selector'.": 1,
+    "Dynamic access of 'receiverConstraint'.": 1,
+    "Dynamic access of 'typeArguments'.": 2,
+    "Dynamic access of 'element'.": 1,
+    "Dynamic access of 'kind'.": 2,
+    "Dynamic access of 'type'.": 2,
+    "Dynamic access of 'callStructure'.": 1,
+    "Dynamic access of 'value'.": 1
+  },
+  "third_party/pkg/dart2js_info/lib/json_info_codec.dart": {
+    "Dynamic invocation of '[]'.": 13,
+    "Dynamic invocation of 'forEach'.": 3,
+    "Dynamic invocation of 'map'.": 2,
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic access of 'length'.": 1
+  },
+  "pkg/compiler/lib/src/js/js.dart": {
+    "Dynamic invocation of '=='.": 1
+  },
+  "pkg/compiler/lib/src/util/enumset.dart": {
+    "Dynamic access of 'index'.": 4,
+    "Dynamic access of 'value'.": 1
+  },
+  "pkg/compiler/lib/src/native/enqueue.dart": {
+    "Dynamic access of 'isDynamic'.": 1,
+    "Dynamic access of 'runtimeType'.": 1
+  },
+  "pkg/compiler/lib/src/js/rewrite_async.dart": {
+    "Dynamic invocation of '=='.": 1
+  },
+  "pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart": {
+    "Dynamic access of 'name'.": 1
+  },
+  "pkg/compiler/lib/src/js_backend/namer_names.dart": {
+    "Dynamic access of 'js_backend.namer::_target'.": 4,
+    "Dynamic access of 'base'.": 1,
+    "Dynamic invocation of '=='.": 4,
+    "Dynamic access of 'prefix'.": 1,
+    "Dynamic access of 'js_backend.namer::_parts'.": 2,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '[]'.": 1
+  },
+  "pkg/compiler/lib/src/universe/side_effects.dart": {
+    "Dynamic access of 'universe.side_effects::_flags'.": 1
+  },
+  "pkg/compiler/lib/src/native/behavior.dart": {
+    "Dynamic invocation of 'add'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/builder_kernel.dart": {
+    "Dynamic update to 'instantiatedTypes'.": 1,
+    "Dynamic update to 'sideEffects'.": 1,
+    "Dynamic access of 'name'.": 1,
+    "Dynamic access of 'id'.": 1,
+    "Dynamic invocation of 'addSuccessor'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/types.dart": {
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic access of 'isVoid'.": 1,
+    "Dynamic access of 'isDynamic'.": 1,
+    "Dynamic access of 'treatAsDynamic'.": 1,
+    "Dynamic access of 'element'.": 1
+  },
+  "pkg/compiler/lib/src/universe/feature.dart": {
+    "Dynamic access of 'type'.": 2,
+    "Dynamic access of 'isConstant'.": 2,
+    "Dynamic access of 'isEmpty'.": 2,
+    "Dynamic access of 'kind'.": 1,
+    "Dynamic access of 'receiverType'.": 1,
+    "Dynamic access of 'argumentType'.": 1,
+    "Dynamic access of 'functionType'.": 1,
+    "Dynamic access of 'typeArguments'.": 1
+  },
+  "pkg/compiler/lib/src/js_model/closure.dart": {
+    "Dynamic access of 'kind'.": 1,
+    "Dynamic access of 'member'.": 1,
+    "Dynamic access of 'localFunction'.": 1,
+    "Dynamic access of 'invocation'.": 1,
+    "Dynamic access of 'instantiation'.": 1,
+    "Dynamic access of 'type'.": 1,
+    "Dynamic access of 'context'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/validate.dart": {
+    "Dynamic invocation of 'isInBasicBlock'.": 2,
+    "Dynamic access of 'usedBy'.": 2,
+    "Dynamic access of 'inputs'.": 1
+  },
+  "pkg/compiler/lib/src/universe/function_set.dart": {
+    "Dynamic access of 'selector'.": 1,
+    "Dynamic access of 'receiver'.": 1
+  },
+  "pkg/compiler/lib/src/constants/constructors.dart": {
+    "Dynamic access of 'type'.": 1,
+    "Dynamic access of 'superConstructorInvocation'.": 1,
+    "Dynamic access of 'defaultValues'.": 2,
+    "Dynamic access of 'fieldMap'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic access of 'thisConstructorInvocation'.": 1,
+    "Dynamic access of 'targetConstructorInvocation'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/optimize.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of 'replaceWith'.": 1,
+    "Dynamic access of 'inputs'.": 2,
+    "Dynamic invocation of '[]'.": 2,
+    "Dynamic invocation of 'isInteger'.": 1,
+    "Dynamic invocation of 'isConstantList'.": 1,
+    "Dynamic invocation of 'isConstantString'.": 1,
+    "Dynamic access of 'constant'.": 1,
+    "Dynamic access of 'length'.": 4,
+    "Dynamic access of 'instructionType'.": 2,
+    "Dynamic access of 'isContainer'.": 2,
+    "Dynamic access of 'isNullable'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'containsOnly'.": 2,
+    "Dynamic invocation of 'containsOnlyString'.": 1
+  },
+  "pkg/compiler/lib/src/constant_system_dart.dart": {
+    "Dynamic invocation of '|'.": 1,
+    "Dynamic invocation of '&'.": 1,
+    "Dynamic invocation of '^'.": 1,
+    "Dynamic invocation of '<<'.": 1,
+    "Dynamic invocation of '>>'.": 1,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of '*'.": 1,
+    "Dynamic invocation of '%'.": 1,
+    "Dynamic invocation of 'remainder'.": 1,
+    "Dynamic invocation of '~/'.": 1,
+    "Dynamic invocation of '/'.": 1,
+    "Dynamic invocation of '+'.": 1,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '<='.": 1,
+    "Dynamic invocation of '>'.": 1,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'codeUnitAt'.": 1
+  },
+  "pkg/compiler/lib/src/native/js.dart": {
+    "Dynamic invocation of '=='.": 1
+  },
+  "third_party/pkg/dart2js_info/lib/src/measurements.dart": {
+    "Dynamic access of 'name'.": 1,
+    "Dynamic invocation of 'call'.": 1
+  },
+  "third_party/pkg/dart2js_info/lib/src/util.dart": {
+    "Dynamic access of 'name'.": 1,
+    "Dynamic invocation of '-'.": 1
+  },
+  "pkg/js_ast/lib/src/builder.dart": {
+    "Dynamic invocation of 'call'.": 2
+  },
+  "pkg/js_ast/lib/src/template.dart": {
+    "Dynamic access of 'length'.": 1,
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic invocation of 'where'.": 1,
+    "Dynamic invocation of 'join'.": 1,
+    "Dynamic invocation of 'containsKey'.": 2,
+    "Dynamic invocation of '[]'.": 9,
+    "Dynamic invocation of 'toStatement'.": 3
+  },
+  "pkg/compiler/lib/src/inferrer/inferrer_engine.dart": {
+    "Dynamic invocation of '=='.": 7,
+    "Dynamic access of 'isVoid'.": 1,
+    "Dynamic access of 'isDynamic'.": 1,
+    "Dynamic access of 'isInterfaceType'.": 1,
+    "Dynamic access of 'element'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/type_graph_nodes.dart": {
+    "Dynamic invocation of 'add'.": 1,
+    "Dynamic invocation of 'remove'.": 1,
+    "Dynamic access of 'type'.": 4,
+    "Dynamic invocation of 'containsOnlyInt'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of 'satisfies'.": 2
+  },
+  "pkg/compiler/lib/src/io/position_information.dart": {
+    "Dynamic access of 'startPosition'.": 1,
+    "Dynamic access of 'innerPosition'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/variable_allocator.dart": {
+    "Dynamic access of 'checkedInput'.": 1,
+    "Dynamic access of 'usedBy'.": 1,
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic invocation of 'nonCheck'.": 1,
+    "Dynamic invocation of 'isCodeMotionInvariant'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/interceptor_simplifier.dart": {
+    "Dynamic access of 'interceptedClasses'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/value_range_analyzer.dart": {
+    "Dynamic access of 'isZero'.": 2,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic access of 'value'.": 7,
+    "Dynamic access of 'isInt'.": 3,
+    "Dynamic access of 'intValue'.": 4,
+    "Dynamic invocation of 'unary-'.": 1,
+    "Dynamic invocation of 'min'.": 1,
+    "Dynamic invocation of 'max'.": 1,
+    "Dynamic access of 'instruction'.": 1,
+    "Dynamic access of 'left'.": 4,
+    "Dynamic access of 'right'.": 4,
+    "Dynamic access of 'lower'.": 1,
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic access of 'upper'.": 1,
+    "Dynamic invocation of 'operation'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/value_set.dart": {
+    "Dynamic invocation of 'add'.": 2
+  },
+  "pkg/compiler/lib/src/inferrer/locals_handler.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'positional'.": 2,
+    "Dynamic access of 'length'.": 2,
+    "Dynamic access of 'named'.": 2,
+    "Dynamic invocation of '[]'.": 2,
+    "Dynamic invocation of '=='.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/type_graph_dump.dart": {
+    "Dynamic invocation of 'contains'.": 2
+  },
+  "pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart": {
+    "Dynamic access of 'scheme'.": 1,
+    "Dynamic invocation of '=='.": 1,
+    "Dynamic invocation of 'toString'.": 1,
+    "Dynamic invocation of 'finalizeTokens'.": 1
+  },
+  "pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart": {
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic invocation of 'toSet'.": 1,
+    "Dynamic invocation of '[]='.": 1,
+    "Dynamic invocation of 'add'.": 1
+  },
+  "pkg/compiler/lib/src/inferrer/node_tracer.dart": {
+    "Dynamic access of 'receiver'.": 2,
+    "Dynamic invocation of '=='.": 2,
+    "Dynamic access of 'selector'.": 6,
+    "Dynamic access of 'name'.": 4,
+    "Dynamic access of 'isIndex'.": 1
+  },
+  "pkg/compiler/lib/src/hash/sha1.dart": {
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '&'.": 2,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of 'unary-'.": 1
+  },
+  "pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart": {
+    "Dynamic access of 'superclass'.": 1,
+    "Dynamic access of 'needsTearOff'.": 1
+  }
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart b/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
index 82964d8..43ba39a 100644
--- a/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
+++ b/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
@@ -4,118 +4,21 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'analysis_helper.dart';
-import 'api_dynamic_test.dart' as api;
 
-// TODO(johnniwinther): Remove unneeded dynamic accesses.
-const Map<String, List<String>> allowedList = {
-  'pkg/compiler/lib/src/closure.dart': null,
-  'pkg/compiler/lib/src/common/tasks.dart': null,
-  'pkg/compiler/lib/src/compiler.dart': null,
-  'pkg/compiler/lib/src/constant_system_dart.dart': null,
-  'pkg/compiler/lib/src/constants/constructors.dart': null,
-  'pkg/compiler/lib/src/constants/expressions.dart': null,
-  'pkg/compiler/lib/src/constants/values.dart': null,
-  'pkg/compiler/lib/src/dart2js.dart': null,
-  'pkg/compiler/lib/src/deferred_load.dart': null,
-  'pkg/compiler/lib/src/diagnostics/messages.dart': null,
-  'pkg/compiler/lib/src/diagnostics/source_span.dart': null,
-  'pkg/compiler/lib/src/elements/entities.dart': null,
-  'pkg/compiler/lib/src/elements/names.dart': null,
-  'pkg/compiler/lib/src/elements/types.dart': null,
-  'pkg/compiler/lib/src/hash/sha1.dart': null,
-  'pkg/compiler/lib/src/helpers/debug_collection.dart': null,
-  'pkg/compiler/lib/src/helpers/expensive_map.dart': null,
-  'pkg/compiler/lib/src/helpers/expensive_set.dart': null,
-  'pkg/compiler/lib/src/helpers/trace.dart': null,
-  'pkg/compiler/lib/src/helpers/track_map.dart': null,
-  'pkg/compiler/lib/src/inferrer/inferrer_engine.dart': null,
-  'pkg/compiler/lib/src/inferrer/locals_handler.dart': null,
-  'pkg/compiler/lib/src/inferrer/node_tracer.dart': null,
-  'pkg/compiler/lib/src/inferrer/type_graph_dump.dart': null,
-  'pkg/compiler/lib/src/inferrer/type_graph_nodes.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart': null,
-  'pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart': null,
-  'pkg/compiler/lib/src/io/position_information.dart': null,
-  'pkg/compiler/lib/src/io/source_information.dart': null,
-  'pkg/compiler/lib/src/js/js.dart': null,
-  'pkg/compiler/lib/src/js/rewrite_async.dart': null,
-  'pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart': null,
-  'pkg/compiler/lib/src/js_backend/constant_system_javascript.dart': null,
-  'pkg/compiler/lib/src/js_backend/namer_names.dart': null,
-  'pkg/compiler/lib/src/js_backend/native_data.dart': null,
-  'pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart': null,
-  'pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart': null,
-  'pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart': null,
-  'pkg/compiler/lib/src/js_model/closure.dart': null,
-  'pkg/compiler/lib/src/js_model/js_strategy.dart': null,
-  'pkg/compiler/lib/src/native/behavior.dart': null,
-  'pkg/compiler/lib/src/native/enqueue.dart': null,
-  'pkg/compiler/lib/src/native/js.dart': null,
-  'pkg/compiler/lib/src/source_file_provider.dart': null,
-  'pkg/compiler/lib/src/ssa/builder_kernel.dart': null,
-  'pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': null,
-  'pkg/compiler/lib/src/ssa/nodes.dart': null,
-  'pkg/compiler/lib/src/ssa/optimize.dart': null,
-  'pkg/compiler/lib/src/ssa/types.dart': null,
-  'pkg/compiler/lib/src/ssa/validate.dart': null,
-  'pkg/compiler/lib/src/ssa/value_range_analyzer.dart': null,
-  'pkg/compiler/lib/src/ssa/value_set.dart': null,
-  'pkg/compiler/lib/src/ssa/variable_allocator.dart': null,
-  'pkg/compiler/lib/src/universe/feature.dart': null,
-  'pkg/compiler/lib/src/universe/function_set.dart': null,
-  'pkg/compiler/lib/src/universe/member_usage.dart': null,
-  'pkg/compiler/lib/src/universe/resolution_world_builder.dart': null,
-  'pkg/compiler/lib/src/universe/side_effects.dart': null,
-  'pkg/compiler/lib/src/universe/use.dart': null,
-  'pkg/compiler/lib/src/universe/world_builder.dart': null,
-  'pkg/compiler/lib/src/util/enumset.dart': null,
-  'pkg/compiler/lib/src/util/maplet.dart': null,
-  'pkg/compiler/lib/src/util/setlet.dart': null,
-  'pkg/compiler/lib/src/util/util.dart': null,
-  'pkg/front_end/lib/src/base/libraries_specification.dart': null,
-  'pkg/front_end/lib/src/fasta/builder/function_type_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/colors.dart': null,
-  'pkg/front_end/lib/src/fasta/crash.dart': null,
-  'pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/body_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/expression_generator.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart':
-      null,
-  'pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/scanner/string_canonicalizer.dart': null,
-  'pkg/front_end/lib/src/fasta/scanner/token.dart': null,
-  'pkg/front_end/lib/src/fasta/source/diet_listener.dart': null,
-  'pkg/front_end/lib/src/fasta/source/outline_builder.dart': null,
-  'pkg/front_end/lib/src/fasta/util/link.dart': null,
-  'pkg/front_end/lib/src/fasta/util/link_implementation.dart': null,
-  'pkg/js_ast/lib/src/builder.dart': null,
-  'pkg/js_ast/lib/src/template.dart': null,
-  'pkg/kernel/lib/ast.dart': null,
-  'pkg/kernel/lib/clone.dart': null,
-  'pkg/kernel/lib/import_table.dart': null,
-  'pkg/kernel/lib/kernel.dart': null,
-  'pkg/kernel/lib/text/ast_to_text.dart': null,
-  'third_party/pkg/dart2js_info/lib/json_info_codec.dart': null,
-  'third_party/pkg/dart2js_info/lib/src/measurements.dart': null,
-  'third_party/pkg/dart2js_info/lib/src/util.dart': null,
-  'third_party/pkg/source_span/lib/src/file.dart': null,
-  'third_party/pkg/source_span/lib/src/span_mixin.dart': null,
-};
-
+// TODO(johnniwinther): Remove unneeded dynamic accesses from dart2js source
+// code.
 main(List<String> args) {
   asyncTest(() async {
-    Map<String, List<String>> allowed = {};
-    allowed.addAll(api.allowedList);
-    allowed.addAll(allowedList);
-    await run(Uri.parse('package:compiler/src/dart2js.dart'),
-        allowedList: allowed, verbose: args.contains('-v'));
+    await run(
+        Uri.parse('package:compiler/src/dart2js.dart'),
+        'tests/compiler/dart2js/analyses/dart2js_allowed.json',
+        [
+          'package:compiler/',
+          'package:js_ast/',
+          'package:dart2js_info/',
+          'package:js_runtime/'
+        ],
+        verbose: args.contains('-v'),
+        generate: args.contains('-g'));
   });
 }
diff --git a/tests/compiler/dart2js/analyses/static_type_visitor_test.dart b/tests/compiler/dart2js/analyses/static_type_visitor_test.dart
new file mode 100644
index 0000000..3a5fabe
--- /dev/null
+++ b/tests/compiler/dart2js/analyses/static_type_visitor_test.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/ir/static_type.dart';
+import 'package:compiler/src/library_loader.dart';
+import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/class_hierarchy.dart' as ir;
+import 'package:kernel/core_types.dart' as ir;
+import 'package:kernel/type_environment.dart' as ir;
+
+import '../helpers/memory_compiler.dart';
+
+const String source = '''
+main() {}
+''';
+
+main() {
+  asyncTest(() async {
+    Compiler compiler =
+        await compilerFor(memorySourceFiles: {'main.dart': source});
+    LoadedLibraries loadedLibraries = await compiler.libraryLoader
+        .loadLibraries(Uri.parse('memory:main.dart'));
+    ir.Component component = loadedLibraries.component;
+    StaticTypeVisitor visitor = new Visitor(component);
+    component.accept(visitor);
+  });
+}
+
+class Visitor extends StaticTypeTraversalVisitor {
+  Visitor(ir.Component component)
+      : super(new ir.TypeEnvironment(
+            new ir.CoreTypes(component), new ir.ClassHierarchy(component)));
+
+  ir.DartType getStaticType(ir.Expression node) {
+    if (typeEnvironment == null) {
+      // The class hierarchy crashes on multiple inheritance. Use `dynamic`
+      // as static type.
+      return const ir.DynamicType();
+    }
+    ir.TreeNode enclosingClass = node;
+    while (enclosingClass != null && enclosingClass is! ir.Class) {
+      enclosingClass = enclosingClass.parent;
+    }
+    try {
+      typeEnvironment.thisType =
+          enclosingClass is ir.Class ? enclosingClass.thisType : null;
+      return node.getStaticType(typeEnvironment);
+    } catch (e) {
+      // The static type computation crashes on type errors. Use `dynamic`
+      // as static type.
+      return const ir.DynamicType();
+    }
+  }
+}
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index b39dc5f4f..d510bbc 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -25,6 +25,7 @@
 inference/swarm_test: Slow, Pass, Fail #
 inference/type_mask2_test: RuntimeError # Issue 34095
 inlining/inlining_test: Slow, Pass
+model/in_user_code_test: RuntimeError # Two libraries with the same name -- actually a CompileTimeError
 model/native_test: Pass, Slow
 model/no_such_method_enabled_test: Pass, Slow
 model/subtype_test: Pass, Slow
diff --git a/tests/compiler/dart2js/helpers/element_lookup.dart b/tests/compiler/dart2js/helpers/element_lookup.dart
index 4a46d08..a0c97ba 100644
--- a/tests/compiler/dart2js/helpers/element_lookup.dart
+++ b/tests/compiler/dart2js/helpers/element_lookup.dart
@@ -2,13 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:compiler/src/common_elements.dart' show ElementEnvironment;
+import 'package:compiler/src/common_elements.dart' show JElementEnvironment;
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/world.dart' show JClosedWorld;
 
 ClassEntity findClass(JClosedWorld closedWorld, String name) {
-  ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+  JElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
   ClassEntity cls =
       elementEnvironment.lookupClass(elementEnvironment.mainLibrary, name);
   cls ??= elementEnvironment.lookupClass(
@@ -40,7 +40,7 @@
     memberName = memberName.substring(0, memberName.length - 1);
     isSetter = true;
   }
-  ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+  JElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
   ClassEntity cls = findClass(closedWorld, className);
   assert(cls != null, "Class '$className' not found.");
   MemberEntity member =
@@ -59,7 +59,7 @@
     name = name.substring(0, name.length - 1);
     isSetter = true;
   }
-  ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+  JElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
   MemberEntity member = elementEnvironment.lookupLibraryMember(
       elementEnvironment.mainLibrary, name,
       setter: isSetter);
diff --git a/tests/compiler/dart2js/helpers/program_lookup.dart b/tests/compiler/dart2js/helpers/program_lookup.dart
index ba7d268..ab3ecff 100644
--- a/tests/compiler/dart2js/helpers/program_lookup.dart
+++ b/tests/compiler/dart2js/helpers/program_lookup.dart
@@ -10,14 +10,14 @@
 import 'package:compiler/src/js_emitter/model.dart';
 import 'package:compiler/src/js/js.dart' as js;
 
-ClassEntity lookupClass(ElementEnvironment elementEnvironment, String name) {
+ClassEntity lookupClass(JElementEnvironment elementEnvironment, String name) {
   ClassEntity cls =
       elementEnvironment.lookupClass(elementEnvironment.mainLibrary, name);
   Expect.isNotNull(cls, "No class '$name' found in the main library.");
   return cls;
 }
 
-MemberEntity lookupMember(ElementEnvironment elementEnvironment, String name) {
+MemberEntity lookupMember(JElementEnvironment elementEnvironment, String name) {
   MemberEntity member;
   int dotIndex = name.indexOf('.');
   if (dotIndex != -1) {
diff --git a/tests/compiler/dart2js/helpers/type_test_helper.dart b/tests/compiler/dart2js/helpers/type_test_helper.dart
index c4304da..9576e09 100644
--- a/tests/compiler/dart2js/helpers/type_test_helper.dart
+++ b/tests/compiler/dart2js/helpers/type_test_helper.dart
@@ -99,7 +99,7 @@
   DartType getElementType(String name) {
     dynamic element = getElement(name);
     if (element is FieldEntity) {
-      return elementEnvironment.getFieldType(element);
+      return (elementEnvironment as JElementEnvironment).getFieldType(element);
     } else if (element is FunctionEntity) {
       return elementEnvironment.getFunctionType(element);
     } else if (element is ClassEntity) {
@@ -131,7 +131,7 @@
   DartType getMemberType(String name, [ClassEntity cls]) {
     MemberEntity member = _getMember(name, cls);
     if (member is FieldEntity) {
-      return elementEnvironment.getFieldType(member);
+      return (elementEnvironment as JElementEnvironment).getFieldType(member);
     } else if (member is FunctionEntity) {
       return elementEnvironment.getFunctionType(member);
     }
@@ -159,7 +159,7 @@
     FieldEntity field =
         elementEnvironment.lookupLibraryMember(mainLibrary, name);
     Expect.isNotNull(field);
-    return elementEnvironment.getFieldType(field);
+    return (elementEnvironment as JElementEnvironment).getFieldType(field);
   }
 
   bool isSubtype(DartType T, DartType S) {
diff --git a/tests/compiler/dart2js/impact/data/promotion.dart b/tests/compiler/dart2js/impact/data/promotion.dart
new file mode 100644
index 0000000..f7022a2
--- /dev/null
+++ b/tests/compiler/dart2js/impact/data/promotion.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class {}
+
+class SubClass extends Class {
+  method() {}
+}
+
+/*element: main:
+ static=[
+  dynamicToEquals(1),
+  dynamicToHashCode(1),
+  dynamicToNoSuchMethod(1),
+  dynamicToNoSuchMethodTearOff(1),
+  dynamicToNoSuchMethodWrong(1),
+  dynamicToString(1),
+  dynamicToStringTearOff(1),
+  dynamicToStringWrong(1),
+  negativeDynamic(1),
+  positiveDynamic(1),
+  positiveTyped(1)],
+ type=[inst:JSNull]
+*/
+main() {
+  positiveTyped(null);
+  positiveDynamic(null);
+  negativeDynamic(null);
+  dynamicToString(null);
+  dynamicToStringWrong(null);
+  dynamicToStringTearOff(null);
+  dynamicToEquals(null);
+  dynamicToHashCode(null);
+  dynamicToNoSuchMethod(null);
+  dynamicToNoSuchMethodWrong(null);
+  dynamicToNoSuchMethodTearOff(null);
+}
+
+/*element: positiveTyped:dynamic=[SubClass.method(0)],type=[inst:JSBool,is:SubClass,param:Class]*/
+positiveTyped(Class cls) {
+  if (cls is SubClass) cls.method();
+}
+
+/*element: positiveDynamic:dynamic=[SubClass.method(0)],type=[inst:JSBool,is:SubClass]*/
+positiveDynamic(dynamic cls) {
+  if (cls is SubClass) cls.method();
+}
+
+/*element: negativeDynamic:dynamic=[call(0),method(0)],type=[inst:JSBool,is:SubClass]*/
+negativeDynamic(dynamic cls) {
+  if (cls is! SubClass) return;
+  cls.method();
+}
+
+/*element: dynamicToString:dynamic=[toString(0)]*/
+dynamicToString(dynamic cls) {
+  cls.toString();
+}
+
+/*element: dynamicToStringWrong:dynamic=[call(1),toString(1)],type=[inst:JSNull]*/
+dynamicToStringWrong(dynamic cls) {
+  cls.toString(null);
+}
+
+/*element: dynamicToStringTearOff:dynamic=[toString]*/
+dynamicToStringTearOff(dynamic cls) {
+  cls.toString;
+}
+
+/*element: dynamicToEquals:dynamic=[==],type=[inst:JSNull]*/
+dynamicToEquals(dynamic cls) {
+  cls == null;
+}
+
+/*element: dynamicToHashCode:dynamic=[hashCode]*/
+dynamicToHashCode(dynamic cls) {
+  cls.hashCode;
+}
+
+/*element: dynamicToNoSuchMethod:dynamic=[noSuchMethod(1)],type=[inst:JSNull]*/
+dynamicToNoSuchMethod(dynamic cls) {
+  cls.noSuchMethod(null);
+}
+
+/*element: dynamicToNoSuchMethodWrong:dynamic=[call(0),noSuchMethod(0)]*/
+dynamicToNoSuchMethodWrong(dynamic cls) {
+  cls.noSuchMethod();
+}
+
+/*element: dynamicToNoSuchMethodTearOff:dynamic=[noSuchMethod]*/
+dynamicToNoSuchMethodTearOff(dynamic cls) {
+  cls.noSuchMethod;
+}
diff --git a/tests/compiler/dart2js/inlining/meta_annotations_test.dart b/tests/compiler/dart2js/inlining/meta_annotations_test.dart
index 600ae9d..3b31d3c 100644
--- a/tests/compiler/dart2js/inlining/meta_annotations_test.dart
+++ b/tests/compiler/dart2js/inlining/meta_annotations_test.dart
@@ -38,7 +38,7 @@
     Compiler compiler = result.compiler;
     KClosedWorld closedWorld =
         compiler.resolutionWorldBuilder.closedWorldForTesting;
-    ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+    KElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
     Expect.isFalse(compiler.compilationFailed, 'Unsuccessful compilation');
     Expect.isNotNull(closedWorld.commonElements.metaNoInlineClass,
         'NoInlineClass is unresolved.');
diff --git a/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
index 8a4f0d8..a76638c 100644
--- a/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
@@ -257,11 +257,11 @@
         'field3=IntConstant(99)))'),
   ]),
   const TestData('redirect', '''
-class A<T> implements B {
+class A<T> implements B<Null> {
   final field1;
   const A({this.field1:42});
 }
-class B<S> implements C {
+class B<S> implements C<Null> {
   const factory B({field1}) = A<B<S>>;
   const factory B.named() = A<S>;
 }
@@ -601,14 +601,14 @@
     CompilationResult result =
         await runCompiler(memorySourceFiles: {'main.dart': source});
     Compiler compiler = result.compiler;
-    ElementEnvironment elementEnvironment =
+    KElementEnvironment elementEnvironment =
         compiler.frontendStrategy.elementEnvironment;
     LibraryEntity library = elementEnvironment.mainLibrary;
     constants.forEach((String name, ConstantData data) {
       FieldEntity field = elementEnvironment.lookupLibraryMember(library, name);
       compiler.reporter.withCurrentElement(field, () {
         ConstantExpression constant =
-            elementEnvironment.getFieldConstant(field);
+            elementEnvironment.getFieldConstantForTesting(field);
 
         var expectedResults = data.expectedResults;
         if (expectedResults is String) {
diff --git a/tests/compiler/dart2js/model/constant_expression_test.dart b/tests/compiler/dart2js/model/constant_expression_test.dart
index 4ab5072..dee8ee5 100644
--- a/tests/compiler/dart2js/model/constant_expression_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_test.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
+import 'package:compiler/src/common_elements.dart' show KElementEnvironment;
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/constants/expressions.dart';
 import 'package:compiler/src/kernel/element_map_impl.dart';
@@ -233,11 +234,11 @@
         }),
   ]),
   const TestData('''
-class A<T> implements B {
+class A<T> implements B<Null> {
   final field1;
   const A({this.field1:42});
 }
-class B<S> implements C {
+class B<S> implements C<Null> {
   const factory B({field1}) = A<B<S>>;
   const factory B.named() = A<S>;
 }
@@ -340,7 +341,8 @@
   CompilationResult result =
       await runCompiler(memorySourceFiles: {'main.dart': source});
   Compiler compiler = result.compiler;
-  var elementEnvironment = compiler.frontendStrategy.elementEnvironment;
+  KElementEnvironment elementEnvironment =
+      compiler.frontendStrategy.elementEnvironment;
 
   MemoryEnvironment environment = new MemoryEnvironment(
       new KernelEvaluationEnvironment(
@@ -350,7 +352,7 @@
   dynamic library = elementEnvironment.mainLibrary;
   constants.forEach((String name, ConstantData data) {
     FieldEntity field = elementEnvironment.lookupLibraryMember(library, name);
-    dynamic constant = elementEnvironment.getFieldConstant(field);
+    dynamic constant = elementEnvironment.getFieldConstantForTesting(field);
     Expect.equals(
         data.kind,
         constant.kind,
diff --git a/tests/compiler/dart2js/model/instantiated_classes_test.dart b/tests/compiler/dart2js/model/instantiated_classes_test.dart
index 3c3e074..8b43948 100644
--- a/tests/compiler/dart2js/model/instantiated_classes_test.dart
+++ b/tests/compiler/dart2js/model/instantiated_classes_test.dart
@@ -71,8 +71,8 @@
                   class Class extends B with A {}""", ["Class", "A"],
         ["Class", "A"]);
 
-    await test("""class A {}
-                  class Class implements A {
+    await test("""class A implements Class {}
+                  class Class {
                     factory Class() = A;
                   }""", ["A"], ["Class"]);
   }
diff --git a/tests/compiler/dart2js/model/supermixin_test.dart b/tests/compiler/dart2js/model/supermixin_test.dart
index b0ed2a4..3533fe7 100644
--- a/tests/compiler/dart2js/model/supermixin_test.dart
+++ b/tests/compiler/dart2js/model/supermixin_test.dart
@@ -42,7 +42,7 @@
         options: <String>[Flags.disableInlining]);
     Expect.isTrue(result.isSuccess);
 
-    ElementEnvironment elementEnvironment =
+    JElementEnvironment elementEnvironment =
         result.compiler.backendClosedWorldForTesting.elementEnvironment;
 
     ClassEntity cls = lookupClass(elementEnvironment, 'Class');
diff --git a/tests/compiler/dart2js/rti/data/generic_bounds_strong.dart b/tests/compiler/dart2js/rti/data/generic_bounds_strong.dart
index e26c0a2..d045fa7 100644
--- a/tests/compiler/dart2js/rti/data/generic_bounds_strong.dart
+++ b/tests/compiler/dart2js/rti/data/generic_bounds_strong.dart
@@ -32,6 +32,12 @@
   method6<T>() => null;
 }
 
+/*strong.class: Class4:explicit=[Class4]*/
+class Class4 {}
+
+/*strong.element: method10:needsArgs*/
+method10<T extends Class4>() => null;
+
 main() {
   /*strong.needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
   method7<T extends Class1a>() => null;
@@ -75,4 +81,6 @@
     f7<Class2a<num>>();
     f8<Class2b<String>>();
   }
+
+  method10();
 }
diff --git a/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart b/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart
new file mode 100644
index 0000000..421d6bd
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T method1a<T>() => null;
+T method1b<T>() => null;
+
+class Class {
+  T method2a<T>() => null;
+  T method2b<T>() => null;
+}
+
+main() {
+  method1a();
+  T Function<T>() f1 = method1b;
+
+  Class c = new Class();
+  c.method2a();
+  T Function<T>() f2 = c.method2b;
+
+  print(f1.runtimeType == f2.runtimeType);
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
index 4d501bb..ac7d406 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
@@ -4,16 +4,14 @@
 
 import 'package:expect/expect.dart';
 
-/*strong.element: method1a:needsArgs*/
-/*omit.element: method1a:needsArgs*/
+/*element: method1a:*/
 T method1a<T>() => null;
 
-/*strong.element: method1b:needsArgs*/
-/*omit.element: method1b:needsArgs*/
+/*element: method1b:*/
 T method1b<T>() => null;
 
 /*strong.element: method2:direct,explicit=[method2.T],needsArgs*/
-/*omit.element: method2:needsArgs*/
+/*omit.element: method2:*/
 T method2<T>(T t, String s) => t;
 
 /*strong.class: Class:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
index 2735441..d597301 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
@@ -11,16 +11,14 @@
   /*omit.element: Class1.:*/
   Class1();
 
-  /*strong.element: Class1.method1a:needsArgs*/
-  /*omit.element: Class1.method1a:needsArgs*/
+  /*element: Class1.method1a:*/
   T method1a<T>() => null;
 
-  /*strong.element: Class1.method1b:needsArgs*/
-  /*omit.element: Class1.method1b:needsArgs*/
+  /*element: Class1.method1b:*/
   T method1b<T>() => null;
 
   /*strong.element: Class1.method2:direct,explicit=[method2.T],needsArgs*/
-  /*omit.element: Class1.method2:needsArgs*/
+  /*omit.element: Class1.method2:*/
   T method2<T>(T t, String s) => t;
 }
 
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
index 318d8e8..907e515 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
@@ -4,25 +4,20 @@
 
 /*class: Class1:*/
 class Class1 {
-  /*strong.element: Class1.:*/
-  /*omit.element: Class1.:*/
+  /*element: Class1.:*/
   Class1();
 
-  /*strong.element: Class1.method:needsArgs*/
-  /*omit.element: Class1.method:*/
+  /*element: Class1.method:*/
   T method<T>() => null;
 }
 
-/*strong.class: Class2:*/
-/*omit.class: Class2:*/
+/*class: Class2:*/
 class Class2<T> {
-  /*strong.element: Class2.:*/
-  /*omit.element: Class2.:*/
+  /*element: Class2.:*/
   Class2();
 }
 
-/*strong.element: main:*/
-/*omit.element: main:*/
+/*element: main:*/
 main() {
   Class1 cls1 = new Class1();
   print(cls1.method.runtimeType.toString());
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
index 1fcaa30..b684856 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
@@ -2,24 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*strong.class: Class:*/
-/*omit.class: Class:*/
+/*class: Class:*/
 class Class<T> {
-  /*strong.element: Class.:*/
-  /*omit.element: Class.:*/
+  /*element: Class.:*/
   Class();
 }
 
-/*strong.element: method1:needsArgs*/
-/*omit.element: method1:*/
+/*element: method1:*/
 method1<T>() {}
 
-/*strong.element: method2:needsArgs*/
-/*omit.element: method2:*/
+/*element: method2:*/
 method2<T>(t, s) => t;
 
-/*strong.element: main:*/
-/*omit.element: main:*/
+/*element: main:*/
 main() {
   print('${method1.runtimeType}');
   method2(0, '');
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index b933aad..c4749ad 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -77,7 +77,7 @@
     Expect.isTrue(result.isSuccess);
     Compiler compiler = result.compiler;
     JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
-    ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+    JElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
     RuntimeTypesNeed rtiNeed = closedWorld.rtiNeed;
     ProgramLookup programLookup = new ProgramLookup(compiler);
 
diff --git a/tests/compiler/dart2js/sourcemaps/name_test.dart b/tests/compiler/dart2js/sourcemaps/name_test.dart
index 257458e..3db6952 100644
--- a/tests/compiler/dart2js/sourcemaps/name_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/name_test.dart
@@ -7,6 +7,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common_elements.dart' show JElementEnvironment;
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/io/kernel_source_information.dart';
@@ -80,7 +81,8 @@
         options: [Flags.disableInlining]);
     Compiler compiler = result.compiler;
     JsBackendStrategy backendStrategy = compiler.backendStrategy;
-    var env = compiler.backendClosedWorldForTesting.elementEnvironment;
+    JElementEnvironment env =
+        compiler.backendClosedWorldForTesting.elementEnvironment;
     LibraryEntity mainApp = env.mainLibrary;
 
     check(MemberEntity element, String expectedName) {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
new file mode 100644
index 0000000..efd86c0
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA1 {
+  method1(a) => 'A1.m1$a';
+}
+
+class SuperA2 {
+  method2(a) => 'A2.m2$a';
+}
+
+class SuperA {
+  method1(a) => 'A.m1$a';
+  method2(a) => 'A.m2$a';
+}
+
+class SuperB1 extends SuperA implements SuperA1 {
+  method1(a) => 'B1.m1$a';
+}
+
+class SuperB2 extends SuperB1 implements SuperA2 {
+  method2(a) => 'B2.m2$a';
+}
+
+mixin Mixin on SuperA1, SuperA2 {
+  method1(a) => super.method1('M$a');
+  method2(a) => super.method2('M$a');
+}
+
+class Class extends SuperB2 with Mixin {}
+
+main() {
+  var c = new Class();
+  Expect.equals("B1.m1MC", c.method1('C'));
+  Expect.equals("B2.m2MC", c.method2('C'));
+}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
new file mode 100644
index 0000000..81fa7f29
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA {
+  method(a, [b = 'foo']) => 'A$a$b';
+}
+
+class SuperB extends SuperA {
+  method(a, [b = 'foo']) => 'B$a$b';
+}
+
+mixin Mixin on SuperA {
+  method2(a) => super.method('M$a');
+}
+
+class Class extends SuperB with Mixin {}
+
+main() {
+  var c = new Class();
+  Expect.equals("BMCfoo", c.method2('C'));
+}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
new file mode 100644
index 0000000..142e893
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA {
+  method(a) => 'A$a';
+}
+
+class SuperB extends SuperA {
+  method(a, [b = 'foo']) => 'B$a$b';
+}
+
+mixin Mixin on SuperA {
+  method2(a) => super.method('M$a');
+}
+
+class Class extends SuperB with Mixin {}
+
+main() {
+  var c = new Class();
+  Expect.equals("BMCfoo", c.method2('C'));
+}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
new file mode 100644
index 0000000..224baa4
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA {
+  method(a) => 'A$a';
+}
+
+class SuperB implements SuperA {
+  method(a) => 'B$a';
+}
+
+mixin Mixin on SuperA {
+  method(a) => super.method('M$a');
+}
+
+class Class extends SuperB with Mixin {}
+
+main() {
+  var c = new Class();
+  Expect.equals("BMC", c.method('C'));
+} 
\ No newline at end of file
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
new file mode 100644
index 0000000..a2df040
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA {
+  method(a) => 'A$a';
+}
+
+class SuperB extends SuperA {
+  method(a) => 'B$a';
+}
+
+mixin Mixin on SuperA {
+  method(a) => super.method('M$a');
+}
+
+class Class extends SuperB with Mixin {}
+
+main() {
+  var c = new Class();
+  Expect.equals("BMC", c.method('C'));
+} 
\ No newline at end of file
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
new file mode 100644
index 0000000..09e0267
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class SuperA1 {}
+
+class SuperA2 {}
+
+class InterfaceA {}
+
+mixin MixinA on SuperA1, SuperA2 implements InterfaceA {}
+
+class SuperB1<T> {}
+
+class SuperB2<T> {}
+
+class SuperB3<T> {}
+
+class InterfaceB<T> {}
+
+mixin MixinB<T> on SuperB1<List<T>>, SuperB2<int>, SuperB3<T>
+    implements InterfaceB<Map<int, T>> {}
+
+class C extends SuperA1 with SuperA2 {}
+
+main() {
+  var listA = <MixinA>[];
+  Expect.isTrue(listA is List<MixinA>);
+  Expect.isTrue(listA is List<SuperA1>);
+  Expect.isTrue(listA is List<SuperA2>);
+  Expect.isTrue(listA is List<InterfaceA>);
+
+  var listB = <MixinB<String>>[];
+  Expect.isTrue(listB is List<MixinB<String>>);
+  Expect.isTrue(listB is List<SuperB1<List<String>>>);
+  Expect.isTrue(listB is List<SuperB2<int>>);
+  Expect.isTrue(listB is List<SuperB3<String>>);
+  Expect.isTrue(listB is List<InterfaceB<Map<int, String>>>);
+
+} 
\ No newline at end of file
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
new file mode 100644
index 0000000..7752bc7
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class S {}
+class M {}
+
+class SuperC = S with M;
+
+class SuperA {
+}
+
+class SuperB extends SuperA {
+}
+
+mixin Mixin on SuperC, SuperA {
+}
+
+class Class extends SuperB with Mixin {}
+
+@AssumeDynamic()
+@NoInline()
+test(c) {
+  Expect.isTrue(c is Mixin, "Unexpected result for $c is Mixin");
+  Expect.isTrue(c is SuperC, "Unexpected result for $c is SuperC");
+  Expect.isTrue(c is SuperA, "Unexpected result for $c is SuperA");
+  Expect.isTrue(c is S, "Unexpected result for $c is S");
+  Expect.isTrue(c is M, "Unexpected result for $c is M");
+}
+
+main() {
+  new SuperC();
+  test(new Class());
+}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
new file mode 100644
index 0000000..8153da1
--- /dev/null
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class S {}
+class M {}
+
+class SuperC = S with M;
+
+class SuperA {
+}
+
+class SuperB extends SuperA {
+}
+
+mixin Mixin on SuperA, SuperC {
+}
+
+class Class extends SuperB with Mixin {}
+
+@AssumeDynamic()
+@NoInline()
+test(c) {
+  Expect.isTrue(c is Mixin, "Unexpected result for $c is Mixin");
+  Expect.isTrue(c is SuperC, "Unexpected result for $c is SuperC");
+  Expect.isTrue(c is SuperA, "Unexpected result for $c is SuperA");
+  Expect.isTrue(c is S, "Unexpected result for $c is S");
+  Expect.isTrue(c is M, "Unexpected result for $c is M");
+}
+
+main() {
+  new SuperC();
+  test(new Class());
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index a701a20..7be5f14 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -2,478 +2,4 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-core_runtime_types_test: RuntimeError # Does not expect bool to have operators.
-maps_test: Skip # Maps class no longer exists
-
-[ $compiler == dart2analyzer ]
-*: Skip
-
-[ $compiler == dart2js ]
-apply3_test: RuntimeError # mirrors not supported
-big_integer_arith_vm_test/add: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/div: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/gcd: CompileTimeError # Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/mod: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/modInv: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/modPow: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/mul: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/negate: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/none: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/overflow: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/shift: CompileTimeError # Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/sub: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/trunDiv: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-bit_twiddling_bigint_test: CompileTimeError #Large integer literal. Not representable in JS.
-bit_twiddling_test: CompileTimeError # Large integer literal. Not representable in JS.
-compare_to2_test: RuntimeError
-date_time_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_floor_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_parse_test/01: RuntimeError
-double_round_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
-error_stack_trace1_test: RuntimeError # Issue 12399
-growable_list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-hash_set_test/01: RuntimeError
-int_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_ceil_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_floor_test: CompileTimeError #Large integer literal. Not representable in JS.
-int_floor_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_from_environment_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/bignum: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/modPow: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/none: CompileTimeError # Large integer literal. Not representable in JS.
-int_parse_radix_test/01: RuntimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_round_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_to_int_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_truncate_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-integer_to_radix_string_test: CompileTimeError # Large integer literal. Not representable in JS.
-integer_to_string_test/01: CompileTimeError # Large integer literal. Not representable in JS.
-iterable_return_type_test/02: RuntimeError
-nan_infinity_test/01: RuntimeError
-num_parse_test/01: CompileTimeError # Large integer literal. Not representable in JS.
-num_parse_test/none: CompileTimeError # Large integer literal. Not representable in JS.
-num_sign_test: CompileTimeError # Large integer literal. Not representable in JS.
-regexp/pcre_test: Pass, Slow # Issue 21593
-regress_r21715_test: CompileTimeError # Large integer literal. Not representable in JS.
-string_base_vm_test: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
-
-[ $compiler == precompiler ]
-apply3_test: SkipByDesign # Imports dart:mirrors
-big_integer_huge_mul_vm_test: Pass, Timeout # --no_intrinsify
-big_integer_parsed_mul_div_vm_test: Pass, Timeout # --no_intrinsify
-error_stack_trace1_test: Skip # Dart 1 AOT to be retired soon.
-error_stack_trace2_test: Skip # Dart 1 AOT to be retired soon.
-error_stack_trace_test: Skip # Dart 1 AOT to be retired soon.
-int_parse_radix_test: Pass, Timeout # --no_intrinsify
-regexp/stack-overflow_test: RuntimeError, OK # Smaller limit with irregex interpreter
-
-[ $mode == debug ]
-regexp/pcre_test: Pass, Slow # Timeout. Issue 22008
-
-[ $runtime == d8 ]
-uri_base_test: RuntimeError # d8 preamble uses custom URI scheme "org-dartlang-d8-preamble:".
-
-[ $runtime == ff ]
-double_round3_test: Pass, Fail, OK # Fails on ff 34, passes on ff 35. Runtime rounds 0.49999999999999994 to 1.
-double_round_to_double2_test: Pass, Fail, OK # Fails on ff 34, passes on ff 35. Runtime rounds 0.49999999999999994 to 1.
-
-[ $runtime == flutter ]
-apply3_test: CompileTimeError # No support for mirrors
-bool_from_environment_test: Fail # Flutter Issue 9111
-format_exception_test: RuntimeError # Flutter Issue 9111
-from_environment_const_type_test/01: Fail # Flutter Issue 9111
-from_environment_const_type_test/02: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/03: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/04: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/05: Fail # Flutter Issue 9111
-from_environment_const_type_test/06: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/07: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/08: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/09: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/10: Fail # Flutter Issue 9111
-from_environment_const_type_test/11: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/12: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/13: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/14: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/15: Fail # Flutter Issue 9111
-from_environment_const_type_test/16: MissingCompileTimeError # Flutter Issue 9111
-from_environment_const_type_test/none: Fail # Flutter Issue 9111
-int_from_environment2_test: Fail # Flutter Issue 9111
-int_from_environment_test: Fail # Flutter Issue 9111
-main_test: RuntimeError # Flutter Issue 9111
-string_from_environment2_test: Fail # Flutter Issue 9111
-string_from_environment_test: Fail # Flutter Issue 9111
-
-[ $runtime == jsshell ]
-string_case_test/01: RuntimeError # jsshell does not recognize character 223 aka \xdf
-unicode_test: RuntimeError # jsshell does not recognize character 223 aka \xdf
-
-[ $runtime == none ]
-iterable_contains_test: CompileTimeError # Uppercase constants removed.
-map_test: CompileTimeError # Uppercase constants removed.
-
-[ $runtime != none ]
-compare_to_test: RuntimeError # Uppercase constants removed.
-data_uri_test: RuntimeError # Uppercase constants removed.
-date_time_test: RuntimeError # Uppercase constants removed.
-double_ceil2_test: RuntimeError # Uppercase constants removed.
-double_ceil_to_double_test: RuntimeError # Uppercase constants removed.
-double_compare_test: RuntimeError # Uppercase constants removed.
-double_floor2_test: RuntimeError # Uppercase constants removed.
-double_floor_to_double_test: RuntimeError # Uppercase constants removed.
-double_parse_test/01: RuntimeError # Uppercase constants removed.
-double_parse_test/02: RuntimeError # Uppercase constants removed.
-double_parse_test/03: RuntimeError # Uppercase constants removed.
-double_parse_test/none: RuntimeError # Uppercase constants removed.
-double_round2_test: RuntimeError # Uppercase constants removed.
-double_round_to_double_test: RuntimeError # Uppercase constants removed.
-double_truncate2_test: RuntimeError # Uppercase constants removed.
-double_truncate_to_double_test: RuntimeError # Uppercase constants removed.
-double_try_parse_test/01: RuntimeError # Uppercase constants removed.
-double_try_parse_test/02: RuntimeError # Uppercase constants removed.
-double_try_parse_test/03: RuntimeError # Uppercase constants removed.
-double_try_parse_test/none: RuntimeError # Uppercase constants removed.
-hash_set_test/01: RuntimeError # Uppercase constants removed.
-hash_set_test/none: RuntimeError # Uppercase constants removed.
-iterable_contains_test: CompileTimeError # Uppercase constants removed.
-json_map_test: RuntimeError # Uppercase constants removed.
-map_from_test: Fail # Assumes LinkedHashMap implements HashMap.
-map_test: CompileTimeError, RuntimeError # Uppercase constants removed.
-nan_infinity_test/01: RuntimeError # Uppercase constants removed.
-nan_infinity_test/none: RuntimeError # Uppercase constants removed.
-num_clamp_test: RuntimeError # Uppercase constants removed.
-string_source_test: RuntimeError # Uppercase constants removed.
-uri_test: RuntimeError # Uppercase constants removed.
-
-[ $runtime == safari ]
-double_round3_test: RuntimeError
-double_round_to_double2_test: Pass, Fail, OK
-string_trimlr_test/unicode63: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
-[ $fasta ]
-symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/07: MissingCompileTimeError
-symbol_reserved_word_test/10: MissingCompileTimeError
-symbol_test/02: MissingCompileTimeError
-symbol_test/03: MissingCompileTimeError
-
-[ $strong ]
-*: SkipByDesign # tests/corelib_2 has the strong mode versions of these tests.
-
-[ $arch == simarmv5te && ($runtime == dart_precompiled || $runtime == vm) ]
-big_integer_parsed_mul_div_vm_test: Pass, Slow
-int_parse_radix_test/*: Pass, Slow
-
-[ $arch == x64 && $system == windows ]
-stopwatch_test: Skip # Flaky test due to expected performance behaviour.
-
-[ $compiler != dart2analyzer && $runtime != dart_precompiled && $runtime != vm ]
-data_resource_test: RuntimeError # Issue 23825 (not implemented yet).
-file_resource_test: Skip, OK # VM specific test, uses dart:io.
-http_resource_test: Skip, OK # VM specific test, uses dart:io.
-
-[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-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 ]
-main_test: RuntimeError
-
-[ $compiler == dart2js && $runtime == none ]
-*: Fail, Pass # TODO(ahe): Triage these tests.
-
-[ $compiler == dart2js && !$browser ]
-package_resource_test: RuntimeError # Issue 26842
-
-[ $compiler == dart2js && $checked ]
-big_integer_arith_vm_test/add: CompileTimeError
-big_integer_arith_vm_test/div: CompileTimeError
-big_integer_arith_vm_test/gcd: CompileTimeError
-big_integer_arith_vm_test/mod: CompileTimeError
-big_integer_arith_vm_test/modInv: CompileTimeError
-big_integer_arith_vm_test/modPow: CompileTimeError
-big_integer_arith_vm_test/mul: CompileTimeError
-big_integer_arith_vm_test/negate: CompileTimeError
-big_integer_arith_vm_test/none: CompileTimeError
-big_integer_arith_vm_test/overflow: CompileTimeError
-big_integer_arith_vm_test/shift: CompileTimeError
-big_integer_arith_vm_test/sub: CompileTimeError
-big_integer_arith_vm_test/trunDiv: CompileTimeError
-bit_twiddling_bigint_test: CompileTimeError
-bit_twiddling_test: CompileTimeError
-double_ceil_test: CompileTimeError
-double_floor_test: CompileTimeError
-double_round_test: CompileTimeError
-double_truncate_test: CompileTimeError
-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
-int_ceil_test: CompileTimeError
-int_ceil_to_double_test: CompileTimeError
-int_floor_test: CompileTimeError
-int_floor_to_double_test: CompileTimeError
-int_from_environment_test: CompileTimeError
-int_modulo_arith_test/bignum: CompileTimeError
-int_modulo_arith_test/modPow: CompileTimeError
-int_modulo_arith_test/none: CompileTimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError
-int_round_to_double_test: CompileTimeError
-int_to_int_test: CompileTimeError
-int_truncate_test: CompileTimeError
-int_truncate_to_double_test: CompileTimeError
-integer_to_radix_string_test: CompileTimeError
-integer_to_string_test/01: CompileTimeError
-num_parse_test/01: CompileTimeError
-num_parse_test/none: CompileTimeError
-num_sign_test: CompileTimeError
-regress_r21715_test: CompileTimeError
-
-[ $compiler == dart2js && $fast_startup ]
-apply3_test: Fail # mirrors not supported
-
-[ $compiler == dart2js && $host_checked ]
-apply3_test: RuntimeError
-big_integer_arith_vm_test/add: CompileTimeError
-big_integer_arith_vm_test/div: CompileTimeError
-big_integer_arith_vm_test/gcd: CompileTimeError
-big_integer_arith_vm_test/mod: CompileTimeError
-big_integer_arith_vm_test/modInv: CompileTimeError
-big_integer_arith_vm_test/modPow: CompileTimeError
-big_integer_arith_vm_test/mul: CompileTimeError
-big_integer_arith_vm_test/negate: CompileTimeError
-big_integer_arith_vm_test/none: CompileTimeError
-big_integer_arith_vm_test/overflow: CompileTimeError
-big_integer_arith_vm_test/shift: CompileTimeError
-big_integer_arith_vm_test/sub: CompileTimeError
-big_integer_arith_vm_test/trunDiv: CompileTimeError
-bit_twiddling_bigint_test: CompileTimeError
-bit_twiddling_test: CompileTimeError
-double_ceil_test: CompileTimeError
-double_floor_test: CompileTimeError
-double_round_test: CompileTimeError
-double_truncate_test: CompileTimeError
-int_ceil_test: CompileTimeError
-int_ceil_to_double_test: CompileTimeError
-int_floor_test: CompileTimeError
-int_floor_to_double_test: CompileTimeError
-int_from_environment_test: CompileTimeError
-int_modulo_arith_test/bignum: CompileTimeError
-int_modulo_arith_test/modPow: CompileTimeError
-int_modulo_arith_test/none: CompileTimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError
-int_round_to_double_test: CompileTimeError
-int_to_int_test: CompileTimeError
-int_truncate_test: CompileTimeError
-int_truncate_to_double_test: CompileTimeError
-integer_to_radix_string_test: CompileTimeError
-integer_to_string_test/01: CompileTimeError
-num_parse_test/01: CompileTimeError
-num_parse_test/none: CompileTimeError
-num_sign_test: CompileTimeError
-regress_r21715_test: CompileTimeError
-
-[ $compiler == dart2js && $minified ]
-apply3_test: RuntimeError
-big_integer_arith_vm_test/add: CompileTimeError
-big_integer_arith_vm_test/div: CompileTimeError
-big_integer_arith_vm_test/gcd: CompileTimeError
-big_integer_arith_vm_test/mod: CompileTimeError
-big_integer_arith_vm_test/modInv: CompileTimeError
-big_integer_arith_vm_test/modPow: CompileTimeError
-big_integer_arith_vm_test/mul: CompileTimeError
-big_integer_arith_vm_test/negate: CompileTimeError
-big_integer_arith_vm_test/none: CompileTimeError
-big_integer_arith_vm_test/overflow: CompileTimeError
-big_integer_arith_vm_test/shift: CompileTimeError
-big_integer_arith_vm_test/sub: CompileTimeError
-big_integer_arith_vm_test/trunDiv: CompileTimeError
-bit_twiddling_bigint_test: CompileTimeError
-bit_twiddling_test: CompileTimeError
-double_ceil_test: CompileTimeError
-double_floor_test: CompileTimeError
-double_round_test: CompileTimeError
-double_truncate_test: CompileTimeError
-int_ceil_test: CompileTimeError
-int_ceil_to_double_test: CompileTimeError
-int_floor_test: CompileTimeError
-int_floor_to_double_test: CompileTimeError
-int_from_environment_test: CompileTimeError
-int_modulo_arith_test/bignum: CompileTimeError
-int_modulo_arith_test/modPow: CompileTimeError
-int_modulo_arith_test/none: CompileTimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError
-int_round_to_double_test: CompileTimeError
-int_to_int_test: CompileTimeError
-int_truncate_test: CompileTimeError
-int_truncate_to_double_test: CompileTimeError
-integer_to_radix_string_test: CompileTimeError
-integer_to_string_test/01: CompileTimeError
-num_parse_test/01: CompileTimeError
-num_parse_test/none: CompileTimeError
-num_sign_test: CompileTimeError
-regress_r21715_test: CompileTimeError
-symbol_operator_test/03: RuntimeError # Issue 27394
-symbol_operator_test/none: RuntimeError
-
-[ $compiler != dart2js && $fasta ]
-big_integer_arith_vm_test/add: CompileTimeError
-big_integer_arith_vm_test/div: CompileTimeError
-big_integer_arith_vm_test/gcd: CompileTimeError
-big_integer_arith_vm_test/mod: CompileTimeError
-big_integer_arith_vm_test/modInv: CompileTimeError
-big_integer_arith_vm_test/modPow: CompileTimeError
-big_integer_arith_vm_test/mul: CompileTimeError
-big_integer_arith_vm_test/negate: CompileTimeError
-big_integer_arith_vm_test/none: CompileTimeError
-big_integer_arith_vm_test/overflow: CompileTimeError
-big_integer_arith_vm_test/shift: CompileTimeError
-big_integer_arith_vm_test/sub: CompileTimeError
-big_integer_arith_vm_test/trunDiv: CompileTimeError
-bit_twiddling_bigint_test: CompileTimeError
-bit_twiddling_test: CompileTimeError
-bool_from_environment2_test/01: MissingCompileTimeError
-bool_from_environment2_test/02: MissingCompileTimeError
-bool_from_environment2_test/03: MissingCompileTimeError
-bool_from_environment2_test/04: MissingCompileTimeError
-bool_from_environment2_test/05: MissingCompileTimeError
-double_ceil_test: CompileTimeError
-double_floor_test: CompileTimeError
-double_round_test: CompileTimeError
-double_truncate_test: CompileTimeError
-int_ceil_test: CompileTimeError
-int_ceil_to_double_test: CompileTimeError
-int_floor_test: CompileTimeError
-int_floor_to_double_test: CompileTimeError
-int_from_environment3_test/01: MissingCompileTimeError
-int_from_environment3_test/02: MissingCompileTimeError
-int_from_environment3_test/03: MissingCompileTimeError
-int_from_environment3_test/04: MissingCompileTimeError
-int_from_environment3_test/05: MissingCompileTimeError
-int_from_environment_test: CompileTimeError
-int_modulo_arith_test/bignum: CompileTimeError
-int_modulo_arith_test/modPow: CompileTimeError
-int_modulo_arith_test/none: CompileTimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError
-int_round_to_double_test: CompileTimeError
-int_to_int_test: CompileTimeError
-int_truncate_test: CompileTimeError
-int_truncate_to_double_test: CompileTimeError
-integer_to_radix_string_test: CompileTimeError
-integer_to_string_test/01: CompileTimeError
-num_parse_test/01: CompileTimeError
-num_parse_test/none: CompileTimeError
-num_sign_test: CompileTimeError
-regress_r21715_test: CompileTimeError
-string_from_environment3_test/01: MissingCompileTimeError
-string_from_environment3_test/02: MissingCompileTimeError
-string_from_environment3_test/03: MissingCompileTimeError
-string_from_environment3_test/04: MissingCompileTimeError
-string_from_environment3_test/05: MissingCompileTimeError
-symbol_test/01: MissingCompileTimeError
-
-[ $runtime != d8 && $runtime != dart_precompiled && $runtime != vm ]
-regexp/*: Skip # The regexp tests are not verified to work on non d8/vm platforms yet.
-
-[ $arch == simdbc || $arch == simdbc64 ]
-regexp/stack-overflow_test: RuntimeError, OK # Smaller limit with irregex interpreter
-
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-compare_to2_test: Fail # Bug 4018
-string_case_test/01: Fail # Bug 18061
-symbol_operator_test/03: Fail # bug 11669
-symbol_reserved_word_test/02: CompileTimeError # bug 20191
-symbol_reserved_word_test/04: MissingCompileTimeError # bug 11669, 19972
-symbol_reserved_word_test/05: CompileTimeError # bug 20191
-symbol_reserved_word_test/06: RuntimeError # bug 11669
-symbol_reserved_word_test/07: MissingCompileTimeError # bug 11669, 19972
-symbol_reserved_word_test/09: RuntimeError # bug 11669
-symbol_reserved_word_test/10: MissingCompileTimeError # bug 11669, 19972
-symbol_reserved_word_test/12: RuntimeError # bug 11669
-symbol_test/01: Fail, Pass # bug 11669
-symbol_test/02: MissingCompileTimeError # bug 11669
-symbol_test/03: MissingCompileTimeError # bug 11669
-symbol_test/none: Fail # bug 11669
-unicode_test: Fail # Bug 6706
-
-[ $compiler == app_jit || $compiler == precompiler ]
-data_resource_test: Skip # Resolve URI not supported yet in product mode.
-file_resource_test: Skip # Resolve URI not supported yet in product mode.
-http_resource_test: Skip # Resolve URI not supported yet in product mode.
-package_resource_test: Skip # Resolve URI not supported yet in product mode.
-
-# We skip all the Dart 1.0 tests in dartk and dartkp mode as these
-# modes are intended only for Dart 2.0 with strong mode enabled.
-[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkp ]
-*: SkipByDesign
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
-big_integer_arith_vm_test: CompileTimeError # Large integer literal
-big_integer_parsed_arith_vm_test: RuntimeError # Large integers
-big_integer_parsed_div_rem_vm_test: RuntimeError # Large integers
-big_integer_parsed_mul_div_vm_test: RuntimeError # Large integers
-bit_twiddling_bigint_test: CompileTimeError # Large integer literal
-bit_twiddling_test: CompileTimeError # Large integer literal
-double_ceil_test: CompileTimeError # Large integer literal
-double_floor_test: CompileTimeError # Large integer literal
-double_round_test: CompileTimeError # Large integer literal
-double_truncate_test: CompileTimeError # Large integer literal
-int_ceil_test: CompileTimeError # Large integer literal
-int_ceil_to_double_test: CompileTimeError # Large integer literal
-int_floor_test: CompileTimeError # Large integer literal
-int_floor_to_double_test: CompileTimeError # Large integer literal
-int_from_environment_test: CompileTimeError # Large integer literal
-int_modulo_arith_test: CompileTimeError # Large integer literal
-int_parse_radix_test/02: CompileTimeError # Large integer literal
-int_round_test: CompileTimeError # Large integer literal
-int_round_to_double_test: CompileTimeError # Large integer literal
-int_to_int_test: CompileTimeError # Large integer literal
-int_truncate_test: CompileTimeError # Large integer literal
-int_truncate_to_double_test: CompileTimeError # Large integer literal
-integer_to_radix_string_test: CompileTimeError # Large integer literal
-integer_to_string_test/01: CompileTimeError # Large integer literal
-num_parse_test/01: CompileTimeError # Large integer literal
-num_parse_test/none: CompileTimeError # Large integer literal
-num_sign_test: CompileTimeError # Large integer literal
-regexp/capture-3: Pass, Slow, Timeout # Issues 21593 and 22008
-regexp/global_test: Skip # Timeout. Issue 21709 and 21708
-regexp/pcre_test: Pass, Slow, Timeout # Issues 21593 and 22008
-regress_r21715_test: CompileTimeError # Large integer literal
-
-# Firefox takes advantage of the ECMAScript number parsing cop-out clause
-# (presumably added to allow Mozilla's existing behavior)
-# and only looks at the first 20 significant digits.
-# The Dart VM and the other ECMAScript implementations follow the correct
-# IEEE-754 rounding algorithm.
-[ $runtime == ff || $runtime == jsshell ]
-double_parse_test/02: Fail, OK
-
-[ $hot_reload || $hot_reload_rollback ]
-big_integer_huge_mul_vm_test: Pass, Slow # Slow
-big_integer_parsed_mul_div_vm_test: Pass, Slow # Slow.
+*: SkipByDesign # Deprecating Dart1 tests.
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 8467f2f..caabc0d 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -59,6 +59,12 @@
 int_modulo_arith_test/none: RuntimeError
 string_from_environment3_test/03: Crash
 
+# These tests crash in mixed mode.
+[ $compiler == dartkb ]
+bigint_from_test: Pass, Crash # Please triage
+bigint_parse_radix_test: Pass, Crash # Please triage
+bigint_test: Pass, Crash, RuntimeError # Please triage
+
 [ $compiler == precompiler ]
 bigint_test: Pass, Timeout # --no_intrinsify
 int_parse_radix_test: Pass, Timeout # --no_intrinsify
@@ -400,6 +406,9 @@
 symbol_reserved_word_test/05: MissingCompileTimeError
 symbol_test/01: MissingCompileTimeError
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 # Sections for dartk and dartkp.
 #
 # Note: these sections are normalized so we can update them with automated
@@ -414,7 +423,7 @@
 [ !$strong && ($runtime == dart_precompiled || $runtime == vm) ]
 list_test/*: RuntimeError # VM doesn't implement strong mode covariance checks
 
-[ $arch == simarm || $arch == simarm64 || $arch == simdbc64 ]
+[ $arch == simarm || $arch == simarm64 || $arch == simdbc64 || $compiler == dartkb ]
 bigint_parse_radix_test: Pass, Slow # Bigint computations are slow on simulated architectures.
 bigint_test: Pass, Slow, Timeout # Bigint computations are slow on simulated architectures.
 
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index db0a720..a9613eb 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -2,137 +2,4 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-# No longer supported in dart 2
-scenarios/package_relative_root: Fail
-
-[ $compiler == dart2analyzer ]
-browser/typed_data_message_test: StaticWarning
-
-[ $compiler == dart2js ]
-*: SkipByDesign
-
-[ $compiler == fasta ]
-browser/compute_this_script_browser_test: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
-browser/package_resolve_browser_hook2_test: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
-browser/package_resolve_browser_hook_test: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
-browser/package_resolve_browser_test: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
-isolate_stress_test: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
-
-[ $mode == product ]
-issue_24243_parent_isolate_test: Skip # Requires checked mode
-
-[ $runtime == flutter ]
-isolate_import_test/01: Skip # Flutter Issue 9114
-issue_21398_parent_isolate2_test/01: Skip # Flutter Issue 9114
-simple_message_test/01: Skip # Flutter Issue 9114
-
-[ $runtime != none ]
-kill2_test: RuntimeError # Uppercase constants removed
-kill_self_synchronously_test: RuntimeError # Uppercase constants removed
-kill_test: RuntimeError # Uppercase constants removed
-
-[ $csp ]
-browser/package_resolve_browser_hook_test: SkipByDesign # Test written in a way that violates CSP.
-deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
-
-[ $jscl ]
-spawn_uri_multi_test/none: RuntimeError # Issue 13544
-
-# The isolate tests were moved to lib_2/isolate, and there they should be
-# made strong mode compliant. There's no sense in running the old versions
-# here.
-[ $strong ]
-*: SkipByDesign
-
-[ $compiler == none && $runtime == vm && $system == fuchsia ]
-*: Skip # Not yet triaged.
-
-[ $compiler == none && ($runtime == flutter || $runtime == vm) ]
-scenarios/short_package/short_package_test: Fail, OK # We do not plan to support the tested behavior anyway.
-
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-compile_time_error_test/01: Skip # Issue 12587
-kill3_test: Pass, Fail # Bad test: expects total message order
-ping_pause_test: Skip # Resolve test issues
-ping_test: Skip # Resolve test issues
-
-[ $compiler == app_jit || $mode == product || $runtime != vm ]
-checked_test: Skip # Unsupported.
-
-[ $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
-*: Skip # This directory has only Dart1 tests (Dart2 tests are in lib_2/isolate).
-
-[ $compiler != none || $runtime != vm ]
-package_config_test: SkipByDesign # Uses Isolate.packageConfig
-package_resolve_test: SkipByDesign # Uses Isolate.resolvePackageUri
-package_root_test: SkipByDesign # Uses Isolate.packageRoot
-scenarios/*: SkipByDesign # Use automatic package resolution, spawnFunction and .dart URIs.
-spawn_uri_fail_test: SkipByDesign # Uses dart:io.
-
-[ $compiler == precompiler || $runtime == flutter ]
-count_test: SkipByDesign # Imports dart:mirrors
-cross_isolate_message_test: SkipByDesign
-illegal_msg_function_test: SkipByDesign
-illegal_msg_mirror_test: SkipByDesign
-isolate_complex_messages_test: SkipByDesign
-mandel_isolate_test: SkipByDesign
-message2_test: SkipByDesign
-message_test: SkipByDesign
-mint_maker_test: SkipByDesign
-nested_spawn2_test: SkipByDesign
-nested_spawn_test: SkipByDesign
-raw_port_test: SkipByDesign
-request_reply_test: SkipByDesign
-spawn_function_custom_class_test: SkipByDesign
-spawn_function_test: SkipByDesign
-stacktrace_message_test: SkipByDesign
-static_function_test: SkipByDesign
-unresolved_ports_test: SkipByDesign
-
-[ $runtime == dart_precompiled || $runtime == flutter ]
-count_test: Skip # Isolate.spawnUri
-cross_isolate_message_test: Skip # Isolate.spawnUri
-deferred_in_isolate2_test: Skip # Isolate.spawnUri
-deferred_in_isolate_test: Skip # Isolate.spawnUri
-error_at_spawnuri_test: Skip # Isolate.spawnUri
-error_exit_at_spawnuri_test: Skip # Isolate.spawnUri
-exit_at_spawnuri_test: Skip # Isolate.spawnUri
-illegal_msg_function_test: Skip # Isolate.spawnUri
-illegal_msg_mirror_test: Skip # Isolate.spawnUri
-isolate_complex_messages_test: Skip # Isolate.spawnUri
-issue_21398_parent_isolate1_test: Skip # Isolate.spawnUri
-issue_21398_parent_isolate_test: Skip # Isolate.spawnUri
-issue_24243_parent_isolate_test: Skip # Isolate.spawnUri
-mandel_isolate_test: Skip # Isolate.spawnUri
-message2_test: Skip # Isolate.spawnUri
-message_test: Skip # Isolate.spawnUri
-mint_maker_test: Skip # Isolate.spawnUri
-nested_spawn2_test: Skip # Isolate.spawnUri
-nested_spawn_test: Skip # Isolate.spawnUri
-raw_port_test: Skip # Isolate.spawnUri
-request_reply_test: Skip # Isolate.spawnUri
-spawn_function_custom_class_test: Skip # Isolate.spawnUri
-spawn_function_test: Skip # Isolate.spawnUri
-spawn_uri_exported_main_test: Skip # Isolate.spawnUri
-spawn_uri_missing_from_isolate_test: Skip # Isolate.spawnUri
-spawn_uri_missing_test: Skip # Isolate.spawnUri
-spawn_uri_multi_test: Skip # Isolate.spawnUri
-spawn_uri_nested_vm_test: Skip # Isolate.spawnUri
-spawn_uri_test: Skip # Isolate.spawnUri
-spawn_uri_vm_test: Skip # Isolate.spawnUri
-stacktrace_message_test: Skip # Isolate.spawnUri
-static_function_test: Skip # Isolate.spawnUri
-unresolved_ports_test: Skip # Isolate.spawnUri
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
-browser/*: SkipByDesign # Browser specific tests
-isolate_stress_test: Skip # Issue 12588: Uses dart:html. This should be able to pass when we have wrapper-less tests.
-stacktrace_message_test: RuntimeError # Fails to send stacktrace object.
-
-[ $hot_reload || $hot_reload_rollback ]
-deferred_in_isolate2_test: Crash # Requires deferred libraries
-deferred_in_isolate_test: Crash # Requires deferred libraries
-function_send_test: Pass, Fail # Closure identity
-issue_21398_parent_isolate2_test: Crash # Requires deferred libraries
-message3_test/fun: Pass, Fail # Closure identity
-spawn_uri_nested_vm_test: Pass, Crash # Issue 28192
+*: SkipByDesign # Deprecating all Dart1 mode tests
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index 4602e94..fd35205 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -31,3 +31,6 @@
 
 [ $runtime == dart_precompiled && $minified ]
 unsorted/symbol_literal_test: Skip # Expects unobfuscated Symbol.toString.
+
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
diff --git a/tests/language/language.status b/tests/language/language.status
index a655de2..586ed90 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -4,560 +4,4 @@
 # This directory contains tests that are intended to show the
 # current state of the language.
 
-[ $compiler == app_jit ]
-deferred_inheritance_constraints_test/redirecting_constructor: Crash
-
-[ $compiler == dart2analyzer ]
-config_import_corelib_test: StaticWarning, OK
-vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
-
-[ $compiler == precompiler ]
-deferred_global_test: Skip # Deferred loading happens eagerly.
-deopt_inlined_function_lazy_test: Skip # Incompatible flag: --deoptimize-alot
-error_stacktrace_test: Skip # Dart 1 AOT to be retired soon.
-implicit_closure_test: Skip # Incompatible flag: --use_slow_path
-regress_23408_test: RuntimeError
-stacktrace_rethrow_error_test/*: Skip # Dart 1 AOT to be retired soon.
-vm/optimized_guarded_field_test: Skip # Dart 1 AOT to be retired soon.
-vm/regress_27201_test: Skip # Deferred loading happens eagerly.
-
-[ $mode == debug ]
-large_class_declaration_test: Slow, Pass
-
-[ $mode == product ]
-assertion_test: SkipByDesign # Requires checked mode.
-generic_test: SkipByDesign # Requires checked mode.
-issue13474_test: SkipByDesign # Requires checked mode.
-list_literal4_test: SkipByDesign # Requires checked mode.
-map_literal4_test: SkipByDesign # Requires checked mode.
-named_parameters_type_test/01: SkipByDesign # Requires checked mode.
-named_parameters_type_test/02: SkipByDesign # Requires checked mode.
-named_parameters_type_test/03: SkipByDesign # Requires checked mode.
-positional_parameters_type_test/01: SkipByDesign # Requires checked mode.
-positional_parameters_type_test/02: SkipByDesign # Requires checked mode.
-stacktrace_demangle_ctors_test: SkipByDesign # Names are not scrubbed.
-type_checks_in_factory_method_test: SkipByDesign # Requires checked mode.
-vm/type_vm_test: Fail, OK # Expects exact type name.
-
-[ $runtime == dart_precompiled ]
-const_evaluation_test: SkipByDesign # Imports dart:mirrors
-deferred_constraints_constants_test: SkipByDesign # Imports dart:mirrors
-enum_mirror_test: SkipByDesign # Imports dart:mirrors
-field_increment_bailout_test: SkipByDesign # Imports dart:mirrors
-instance_creation_in_function_annotation_test: SkipByDesign # Imports dart:mirrors
-invocation_mirror2_test: SkipByDesign # Imports dart:mirrors
-invocation_mirror_invoke_on2_test: SkipByDesign # Imports dart:mirrors
-invocation_mirror_invoke_on_test: SkipByDesign # Imports dart:mirrors
-issue21079_test: SkipByDesign # Imports dart:mirrors
-library_env_test/has_mirror_support: RuntimeError, OK # The test is supposed to fail.
-many_overridden_no_such_method_test: SkipByDesign # Imports dart:mirrors
-no_such_method_test: SkipByDesign # Imports dart:mirrors
-null_test/none: SkipByDesign # Imports dart:mirrors
-overridden_no_such_method_test: SkipByDesign # Imports dart:mirrors
-redirecting_factory_reflection_test: SkipByDesign # Imports dart:mirrors
-regress_13462_0_test: SkipByDesign # Imports dart:mirrors
-regress_13462_1_test: SkipByDesign # Imports dart:mirrors
-regress_18535_test: SkipByDesign # Imports dart:mirrors
-regress_28255_test: SkipByDesign # Imports dart:mirrors
-super_call4_test: SkipByDesign # Imports dart:mirrors
-super_getter_setter_test: SkipByDesign # Imports dart:mirrors
-vm/reflect_core_vm_test: SkipByDesign # Imports dart:mirrors
-
-# flutter uses --error_on_bad_type, --error_on_bad_override
-# and --await_is_keyword so # the following tests fail with
-# a Compilation Error
-[ $runtime == flutter ]
-async_await_syntax_test/a05c: CompileTimeError
-async_await_syntax_test/a05e: CompileTimeError
-async_await_syntax_test/d08c: CompileTimeError
-async_await_test: CompileTimeError
-async_return_types_test/nestedFuture: Skip # Flutter Issue 9110
-async_return_types_test/return_value_sync_star: Skip # Flutter Issue 9110
-async_return_types_test/tooManyTypeParameters: CompileTimeError
-async_return_types_test/wrongReturnType: Skip # Flutter Issue 9110
-async_return_types_test/wrongTypeParameter: Skip # Flutter Issue 9110
-async_star_cancel_while_paused_test: Skip # Flutter Issue 9110
-async_star_no_cancel_test: Skip # Flutter Issue 9110
-asyncstar_yield_test: Skip # Flutter Issue 9110
-await_backwards_compatibility_test/none: CompileTimeError
-await_for_cancel_test: Skip # Flutter Issue 9110
-await_for_test: Skip # Flutter Issue 9110
-await_test: CompileTimeError
-bad_override_test/06: CompileTimeError
-call_constructor_on_unresolvable_class_test/01: CompileTimeError
-call_constructor_on_unresolvable_class_test/02: CompileTimeError
-call_constructor_on_unresolvable_class_test/03: CompileTimeError
-call_constructor_on_unresolvable_class_test/07: CompileTimeError
-check_method_override_test/01: CompileTimeError
-check_method_override_test/02: CompileTimeError
-class_keyword_test/02: CompileTimeError
-class_override_test/00: CompileTimeError
-conditional_import_string_test: CompileTimeError
-conditional_import_test: CompileTimeError
-config_import_test: RuntimeError # Flutter Issue 9110
-const_evaluation_test/01: CompileTimeError
-const_evaluation_test/none: CompileTimeError
-const_types_test/01: CompileTimeError
-const_types_test/02: CompileTimeError
-const_types_test/03: CompileTimeError
-const_types_test/04: CompileTimeError
-const_types_test/05: CompileTimeError
-const_types_test/06: CompileTimeError
-const_types_test/13: CompileTimeError
-const_types_test/35: CompileTimeError
-const_types_test/40: CompileTimeError
-default_factory_test/01: CompileTimeError
-deferred_closurize_load_library_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_constant_list_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_constraints_constants_test/none: CompileTimeError
-deferred_constraints_constants_test/reference_after_load: CompileTimeError
-deferred_constraints_type_annotation_test/as_operation: CompileTimeError
-deferred_constraints_type_annotation_test/catch_check: CompileTimeError
-deferred_constraints_type_annotation_test/is_check: CompileTimeError
-deferred_constraints_type_annotation_test/new: CompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: CompileTimeError
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: CompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: CompileTimeError
-deferred_constraints_type_annotation_test/none: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_constraints_type_annotation_test/static_method: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_constraints_type_annotation_test/type_annotation_generic2: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: CompileTimeError
-deferred_global_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_inheritance_constraints_test/redirecting_constructor: CompileTimeError
-deferred_mixin_test: CompileTimeError
-deferred_no_such_method_test: CompileTimeError
-deferred_not_loaded_check_test: CompileTimeError
-deferred_redirecting_factory_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_shadow_load_library_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_shared_and_unshared_classes_test: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_static_seperate_test: CompileTimeError
-deferred_super_dependency_test/01: CompileTimeError
-deferred_type_dependency_test/as: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_type_dependency_test/is: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_type_dependency_test/none: Skip # Timeout, deferred loading is not supported by Flutter
-deferred_type_dependency_test/type_annotation: Skip # Timeout, deferred loading is not supported by Flutter
-enum_mirror_test: CompileTimeError
-f_bounded_quantification5_test: CompileTimeError
-f_bounded_quantification_test/01: CompileTimeError
-f_bounded_quantification_test/02: CompileTimeError
-factory2_test: CompileTimeError
-factory4_test: CompileTimeError
-factory6_test/00: CompileTimeError
-field_increment_bailout_test: CompileTimeError
-field_override_test/01: CompileTimeError
-function_malformed_result_type_test: CompileTimeError
-generic_function_typedef2_test/04: CompileTimeError
-instance_creation_in_function_annotation_test: CompileTimeError
-instanceof3_test: CompileTimeError
-internal_library_test/01: MissingCompileTimeError
-internal_library_test/01: CompileTimeError
-internal_library_test/02: CompileTimeError
-internal_library_test/02: MissingCompileTimeError
-invocation_mirror2_test: CompileTimeError
-invocation_mirror_invoke_on2_test: CompileTimeError
-invocation_mirror_invoke_on_test: CompileTimeError
-is_malformed_type_test/94: CompileTimeError
-is_malformed_type_test/95: CompileTimeError
-is_malformed_type_test/96: CompileTimeError
-is_malformed_type_test/97: CompileTimeError
-is_malformed_type_test/98: CompileTimeError
-is_malformed_type_test/99: CompileTimeError
-is_not_class2_test: RuntimeError
-isnot_malformed_type_test: RuntimeError
-issue21079_test: CompileTimeError
-issue_25671a_test/01: CompileTimeError
-issue_25671b_test/01: CompileTimeError
-library_env_test/has_mirror_support: RuntimeError, OK # No mirrors support in Flutter.
-library_env_test/has_no_mirror_support: Pass # No mirrors support in Flutter.
-list_literal_syntax_test/01: CompileTimeError
-list_literal_syntax_test/02: CompileTimeError
-list_literal_syntax_test/03: CompileTimeError
-malbounded_instantiation_test/01: CompileTimeError
-malbounded_redirecting_factory2_test/01: CompileTimeError
-malbounded_redirecting_factory2_test/none: CompileTimeError
-malbounded_redirecting_factory_test/01: CompileTimeError
-malbounded_redirecting_factory_test/none: CompileTimeError
-malbounded_type_cast_test: CompileTimeError
-malbounded_type_literal_test: CompileTimeError
-malbounded_type_test_test/02: CompileTimeError
-malformed2_test/00: CompileTimeError
-malformed_inheritance_test/02: CompileTimeError
-malformed_inheritance_test/04: CompileTimeError
-malformed_inheritance_test/06: CompileTimeError
-malformed_test/none: CompileTimeError
-malformed_type_test: CompileTimeError
-many_overridden_no_such_method_test: CompileTimeError
-method_override2_test/01: CompileTimeError
-method_override3_test/00: CompileTimeError
-method_override3_test/01: CompileTimeError
-method_override3_test/02: CompileTimeError
-method_override4_test: CompileTimeError
-method_override5_test: CompileTimeError
-method_override6_test: CompileTimeError
-mixin_invalid_bound2_test/01: CompileTimeError
-mixin_invalid_bound2_test/04: CompileTimeError
-mixin_invalid_bound2_test/07: CompileTimeError
-mixin_invalid_bound2_test/none: CompileTimeError
-mixin_invalid_bound_test/01: CompileTimeError
-mixin_invalid_bound_test/03: CompileTimeError
-mixin_invalid_bound_test/05: CompileTimeError
-mixin_invalid_bound_test/none: CompileTimeError
-mixin_super_bound2_test/01: CompileTimeError
-mixin_super_bound_test: CompileTimeError
-mixin_type_parameters_errors_test/01: CompileTimeError
-mixin_type_parameters_errors_test/02: CompileTimeError
-mixin_type_parameters_errors_test/03: CompileTimeError
-mixin_type_parameters_errors_test/04: CompileTimeError
-mixin_type_parameters_errors_test/05: CompileTimeError
-new_expression_type_args_test/02: CompileTimeError
-no_such_method_test: CompileTimeError
-non_parameterized_factory2_test: CompileTimeError
-non_parameterized_factory_test: CompileTimeError
-null_test/none: CompileTimeError
-on_catch_malformed_type_test: CompileTimeError
-overridden_no_such_method_test: CompileTimeError
-override_inheritance_field_test/05: CompileTimeError
-override_inheritance_field_test/06: CompileTimeError
-override_inheritance_field_test/07: CompileTimeError
-override_inheritance_field_test/08: CompileTimeError
-override_inheritance_field_test/09: CompileTimeError
-override_inheritance_field_test/10: CompileTimeError
-override_inheritance_field_test/11: CompileTimeError
-override_inheritance_field_test/28: CompileTimeError
-override_inheritance_field_test/29: CompileTimeError
-override_inheritance_field_test/30: CompileTimeError
-override_inheritance_field_test/31: CompileTimeError
-override_inheritance_field_test/32: CompileTimeError
-override_inheritance_field_test/33: CompileTimeError
-override_inheritance_field_test/33a: CompileTimeError
-override_inheritance_field_test/34: CompileTimeError
-override_inheritance_field_test/44: CompileTimeError
-override_inheritance_field_test/45: CompileTimeError
-override_inheritance_field_test/47: CompileTimeError
-override_inheritance_field_test/48: CompileTimeError
-override_inheritance_field_test/53: CompileTimeError
-override_inheritance_field_test/54: CompileTimeError
-override_inheritance_method_test/04: CompileTimeError
-override_inheritance_method_test/05: CompileTimeError
-override_inheritance_method_test/06: CompileTimeError
-override_inheritance_method_test/11: CompileTimeError
-override_inheritance_method_test/12: CompileTimeError
-override_inheritance_method_test/13: CompileTimeError
-override_inheritance_method_test/14: CompileTimeError
-override_inheritance_method_test/19: CompileTimeError
-override_inheritance_method_test/20: CompileTimeError
-override_inheritance_method_test/21: CompileTimeError
-override_inheritance_method_test/27: CompileTimeError
-override_inheritance_method_test/28: CompileTimeError
-override_inheritance_method_test/29: CompileTimeError
-override_inheritance_method_test/30: CompileTimeError
-override_inheritance_method_test/31: CompileTimeError
-override_inheritance_method_test/32: CompileTimeError
-override_inheritance_method_test/33: CompileTimeError
-prefix16_test: CompileTimeError
-prefix22_test: CompileTimeError
-private_access_test/03: CompileTimeError
-private_access_test/04: CompileTimeError
-redirecting_factory_incompatible_signature_test: CompileTimeError
-redirecting_factory_reflection_test: CompileTimeError
-regress_12561_test: CompileTimeError
-regress_13462_0_test: CompileTimeError
-regress_13462_1_test: CompileTimeError
-regress_18535_test: CompileTimeError
-regress_22438_test: CompileTimeError
-regress_23408_test: CompileTimeError
-regress_28255_test: CompileTimeError
-static_initializer_type_error_test: CompileTimeError
-super_call4_test: CompileTimeError
-super_getter_setter_test: CompileTimeError
-try_catch_on_syntax_test/07: CompileTimeError
-try_catch_syntax_test/08: CompileTimeError
-type_parameter_test/none: CompileTimeError
-type_variable_bounds_test/00: CompileTimeError
-type_variable_bounds_test/06: CompileTimeError
-type_variable_bounds_test/07: CompileTimeError
-type_variable_bounds_test/08: CompileTimeError
-type_variable_bounds_test/09: CompileTimeError
-type_variable_bounds_test/10: CompileTimeError
-type_variable_scope2_test: CompileTimeError
-type_variable_scope_test/00: CompileTimeError
-type_variable_scope_test/01: CompileTimeError
-type_variable_scope_test/02: CompileTimeError
-type_variable_scope_test/03: CompileTimeError
-type_variable_scope_test/04: CompileTimeError
-type_variable_scope_test/05: CompileTimeError
-type_variable_scope_test/none: CompileTimeError
-unicode_bom_test: CompileTimeError
-vm/debug_break_enabled_vm_test/01: CompileTimeError
-vm/debug_break_enabled_vm_test/none: CompileTimeError
-vm/no_such_method_error_message_callable_vm_test: RuntimeError # Flutter Issue 9110
-vm/reflect_core_vm_test: CompileTimeError
-vm/regress_27201_test: Fail # Flutter Issue 9110
-wrong_number_type_arguments_test/00: CompileTimeError
-wrong_number_type_arguments_test/01: CompileTimeError
-wrong_number_type_arguments_test/02: CompileTimeError
-
-[ $runtime != none ]
-arithmetic_canonicalization_test: RuntimeError # Uppercase constants removed
-double_nan_comparison_test: RuntimeError # Uppercase constants removed
-double_to_string_as_exponential_test: RuntimeError # Uppercase constants removed
-double_to_string_as_precision_test: RuntimeError # Uppercase constants removed
-double_to_string_test: RuntimeError # Uppercase constants removed
-import_combinators_test: RuntimeError # Uppercase constants removed
-infinity_test: RuntimeError # Uppercase constants removed
-intrinsified_methods_test: RuntimeError # Uppercase constants removed
-is_nan_test: RuntimeError # Uppercase constants removed
-mixin_prefix_test: RuntimeError # Uppercase constants removed
-nan_identical_test: RuntimeError # Uppercase constants removed
-null_test/none: RuntimeError # Uppercase constants removed
-number_identity2_test: RuntimeError # Uppercase constants removed
-ref_before_declaration_test/none: RuntimeError # Uppercase constants removed
-vm/load_to_load_forwarding_vm_test: RuntimeError # Uppercase constants removed
-vm/load_to_load_unaligned_forwarding_vm_test: RuntimeError # Uppercase constants removed
-vm/unaligned_float_access_literal_index_test: RuntimeError # Uppercase constants removed
-vm/unaligned_float_access_register_index_test: RuntimeError # Uppercase constants removed
-vm/unaligned_integer_access_literal_index_test: RuntimeError # Uppercase constants removed
-vm/unaligned_integer_access_register_index_test: RuntimeError # Uppercase constants removed
-
-[ $strong ]
-*: SkipByDesign # tests/language_2 has the strong mode versions of these tests.
-
-[ $arch == arm64 && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-closure_cycles_test: Pass, Slow
-large_class_declaration_test: SkipSlow # Uses too much memory.
-
-[ $arch == ia32 && $compiler == none && $runtime == vm && $system == windows ]
-vm/optimized_stacktrace_test: Pass, Crash # Issue 28276
-
-[ $arch == ia32 && $mode == release && $runtime == vm ]
-deep_nesting1_negative_test: Crash, Pass # Issue 31496
-
-[ $arch == ia32 && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
-vm/regress_24517_test: Pass, Fail # Issue 24517.
-
-[ $compiler == app_jit && $runtime == vm && !$checked ]
-assertion_initializer_const_error_test/01: MissingCompileTimeError
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-
-# Detection of compile-time errors that are related to constants can't be fully
-# done at the front end, because constants are evaluated at back ends.  So, some
-# errors aren't detected by fasta, but reported by back ends as compile-time
-# errors.
-[ $compiler != dart2js && $runtime != vm && $fasta ]
-deferred_constraints_constants_test/default_argument2: MissingCompileTimeError
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-abstract_beats_arguments2_test/01: Crash # Issue 29171
-
-[ $compiler == none && $runtime == vm && $system == fuchsia ]
-async_await_test: RuntimeError # Use package:unittest
-async_star_test: RuntimeError # Use package:unittest
-closure_cycles_test: Pass, Crash # TODO(zra): Investigate
-vm/causal_async_exception_stack2_test: RuntimeError # Use package:unittest
-vm/causal_async_exception_stack_test: RuntimeError # Use package:unittest
-vm/math_vm_test: Crash # TODO(zra): Investigate
-
-[ $compiler == none && $runtime == vm && !$checked ]
-assertion_initializer_const_error_test/01: MissingCompileTimeError
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-
-[ $compiler == none && $checked && ($runtime == flutter || $runtime == vm) ]
-assert_initializer_test/4*: MissingCompileTimeError # Issue 392. The VM doesn't enforce that potentially const expressions are actually const expressions when the constructor is called with `const`.
-
-[ $compiler == none && ($runtime == flutter || $runtime == vm) ]
-duplicate_part_test/01: MissingCompileTimeError # Issue 27516
-
-[ $compiler == precompiler && $mode == debug && $runtime == dart_precompiled ]
-regress_29025_test: Crash # Issue dartbug.com/29331
-
-[ $compiler == precompiler && $runtime == dart_precompiled ]
-export_ambiguous_main_negative_test: Skip # Issue 29895
-export_double_same_main_test: Skip # Issue 29895
-stacktrace_demangle_ctors_test: RuntimeError
-vm/optimized_stacktrace_test: Skip # Issue 30198
-vm/regress_27671_test: Skip # Unsupported
-
-[ $compiler == precompiler && $runtime == dart_precompiled && $checked ]
-assertion_initializer_const_error2_test/cc02: Crash
-
-[ $compiler == precompiler && $runtime == dart_precompiled && !$checked ]
-assertion_initializer_const_error_test/01: MissingCompileTimeError
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-
-[ $mode == debug && $hot_reload_rollback ]
-enum_duplicate_test/02: Pass, Crash # http://dartbug.com/33156
-enum_duplicate_test/none: Pass, Crash # http://dartbug.com/33156
-enum_private_test/01: Pass, Crash # http://dartbug.com/33156
-
-[ $mode == debug && ($hot_reload || $hot_reload_rollback) ]
-enum_duplicate_test/01: Pass, Crash # http://dartbug.com/33156
-enum_private_test/02: Pass, Crash # dartbug.com/33339
-
-[ $runtime == dart_precompiled && $minified ]
-cyclic_type_test/*: Skip # Tests below rely on Type.toString()
-enum_duplicate_test/*: Skip # Uses Enum.toString()
-enum_private_test/*: Skip # Uses Enum.toString()
-enum_test: Skip # Uses Enum.toString()
-f_bounded_quantification4_test: Skip # Tests below rely on Type.toString()
-f_bounded_quantification5_test: Skip # Tests below rely on Type.toString()
-full_stacktrace1_test: Skip # Tests below rely on Stacktrace.toString()
-full_stacktrace2_test: Skip # Tests below rely on Stacktrace.toString()
-full_stacktrace3_test: Skip # Tests below rely on Stacktrace.toString()
-mixin_generic_test: Skip # Tests below rely on Type.toString()
-mixin_mixin2_test: Skip # Tests below rely on Type.toString()
-mixin_mixin3_test: Skip # Tests below rely on Type.toString()
-mixin_mixin5_test: Skip # Tests below rely on Type.toString()
-mixin_mixin6_test: Skip # Tests below rely on Type.toString()
-mixin_mixin_bound2_test: Skip # Tests below rely on Type.toString()
-mixin_mixin_type_arguments_test: Skip # Tests below rely on Type.toString()
-mixin_super_2_test: Skip # Tests below rely on Type.toString()
-no_such_method_dispatcher_test: Skip # Uses new Symbol()
-stacktrace_rethrow_error_test: Skip # Tests below rely on Stacktrace.toString()
-stacktrace_rethrow_nonerror_test: Skip # Tests below rely on Stacktrace.toString()
-vm/no_such_args_error_message_vm_test: Skip # Tests below rely on Stacktrace.toString()
-vm/no_such_method_error_message_callable_vm_test: Skip # Tests below rely on Stacktrace.toString()
-vm/no_such_method_error_message_vm_test: Skip # Tests below rely on Stacktrace.toString()
-vm/regress_28325_test: Skip # Tests below rely on Stacktrace.toString()
-
-[ $browser && ($compiler == app_jit || $compiler == none || $compiler == precompiler) ]
-library_env_test/has_io_support: RuntimeError, OK # The test is supposed to fail.
-library_env_test/has_no_html_support: RuntimeError, OK # The test is supposed to fail.
-
-[ !$browser && ($compiler == app_jit || $compiler == none || $compiler == precompiler) ]
-library_env_test/has_html_support: RuntimeError, OK # The test is supposed to fail.
-library_env_test/has_no_io_support: RuntimeError, OK # The test is supposed to fail.
-
-[ $checked && ($compiler == app_jit || $compiler == none || $compiler == precompiler) ]
-generic_functions_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-generic_local_functions_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-generic_methods_function_type_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-generic_methods_generic_function_parameter_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-generic_methods_new_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-generic_methods_test: Pass # Issue 25869, These generic functions tests pass for the wrong reason in checked mode, because the parsed type parameters are mapped to dynamic type.
-type_variable_bounds4_test/01: Fail # Issue 14006
-
-[ ($compiler == app_jit || $compiler == dartk || $compiler == dartkb || $compiler == dartkp || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-dynamic_prefix_core_test/none: Fail # Issue 12478
-
-[ ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-await_for_test: RuntimeError # issue 28974
-class_keyword_test/02: MissingCompileTimeError # Issue 13627
-export_ambiguous_main_negative_test: Fail # Issue 14763
-syntax_test/none: CompileTimeError # Issue #30176.
-unicode_bom_test: Fail # Issue 16067
-vm/debug_break_enabled_vm_test/01: Crash, OK # Expected to hit breakpoint.
-
-# These test entries will be valid for vm (with and without kernel).
-[ $compiler == app_jit || $compiler == dartk || $compiler == dartkb || $compiler == none || $runtime == dart_precompiled ]
-async_star_cancel_while_paused_test: RuntimeError
-async_star_pause_test: Fail, OK # This is OK for now, but we may want to change the semantics to match the test.
-constructor2_test: Fail, OK # Failures related to super call in ctor initializer list
-constructor3_test: Fail, OK # Failures related to super call in ctor initializer list
-constructor5_test: Fail # Issue 6422, These bugs refer currently ongoing language discussions.
-constructor6_test: Fail # Issue 6422, These bugs refer currently ongoing language discussions.
-cyclic_type2_test: Fail, OK # Non-contractive types are not supported in the vm.
-cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
-cyclic_type_test/04: Fail, OK # Non-contractive types are not supported in the vm.
-duplicate_export_negative_test: Fail # Issue 6134
-example_constructor_test: Fail, OK # Failures related to super call in ctor initializer list
-field_initialization_order_test: Fail, OK # Failures related to super call in ctor initializer list
-final_field_initialization_order_test: Fail, OK # Failures related to super call in ctor initializer list
-generic_methods_type_expression_test: RuntimeError # Issue 25869 / 27460
-least_upper_bound_expansive_test/*: Fail, OK # Non-contractive types are not supported in the vm.
-main_not_a_function_test/01: Skip # Skipped temporaril until Issue 29895 is fixed.
-mixin_illegal_super_use_test: Skip # Issues 24478 and 23773, # These tests are skipped in the VM because it has "--supermixin" functionality enabled unconditionally.  The tests should be removed once the same is true for analyzer (#24478) and dart2js (#23773)
-mixin_illegal_superclass_test: Skip # Issues 24478 and 23773, # These tests are skipped in the VM because it has "--supermixin" functionality enabled unconditionally.  The tests should be removed once the same is true for analyzer (#24478) and dart2js (#23773)
-no_main_test/01: Skip # Skipped temporaril until Issue 29895 is fixed.
-super_test: Fail, OK # Failures related to super call in ctor initializer list
-vm/regress_29145_test: Skip # Issue 29145
-
-[ $compiler == app_jit || $compiler == none ]
-library_env_test/has_no_mirror_support: RuntimeError, OK # The test is supposed to fail.
-
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-async_star_regression_2238_test: CompileTimeError
-deferred_redirecting_factory_test: Fail, Crash # Issue 23408
-dynamic_prefix_core_test/01: RuntimeError # Issue 12478
-multiline_strings_test: Fail # Issue 23020
-redirecting_constructor_initializer_test: RuntimeError # Issue 23488
-
-[ $compiler == app_jit || $compiler == precompiler || $mode == product ]
-deferred_load_constants_test/02: Skip # Deferred loading happens eagerly.
-deferred_load_constants_test/03: Skip # Deferred loading happens eagerly.
-deferred_load_constants_test/05: Skip # Deferred loading happens eagerly.
-deferred_not_loaded_check_test: Skip # Deferred loading happens eagerly.
-vm/regress_27201_test: Fail
-
-[ $compiler == app_jit || $runtime == dart_precompiled ]
-ct_const2_test: Skip # Incompatible flag: --compile_all
-hello_dart_test: Skip # Incompatible flag: --compile_all
-vm/type_cast_vm_test: RuntimeError # Expects line and column numbers
-vm/type_vm_test: RuntimeError # Expects line and column numbers
-
-[ $mode == product || $runtime == dart_precompiled ]
-vm/causal_async_exception_stack2_test: SkipByDesign # Causal async stacks are not supported in product mode
-vm/causal_async_exception_stack_test: SkipByDesign # Causal async stacks are not supported in product mode
-
-[ $runtime == dart_precompiled || $runtime == vm ]
-arithmetic_test: CompileTimeError # Large integer literal
-bit_operations_test: CompileTimeError # Large integer literal
-deopt_inlined_function_lazy_test: CompileTimeError # Large integer literal
-guess_cid_test: CompileTimeError # Large integer literal
-identical_closure2_test: CompileTimeError # Large integer literal
-int2_test: CompileTimeError # Large integer literal
-mint_compares_test: CompileTimeError # Large integer literal
-number_identity_test: CompileTimeError # Large integer literal
-regress_24283_test: RuntimeError # Large integers
-vm/load_to_load_unaligned_forwarding_vm_test: Pass, Crash # Unaligned offset. Issue 22151
-vm/regress_14903_test: CompileTimeError # Large integer literal
-vm/regress_23117_vm_test: RuntimeError # Large integers
-vm/regress_23238_test: RuntimeError # Large integers
-vm/unaligned_float_access_literal_index_test: Pass, Crash # Unaligned offset. Issue 22151
-
-[ $hot_reload || $hot_reload_rollback ]
-cha_deopt1_test: Crash # Requires deferred libraries
-cha_deopt2_test: Crash # Requires deferred libraries
-cha_deopt3_test: Crash # Requires deferred libraries
-conditional_import_string_test: Crash # Requires deferred libraries
-conditional_import_test: Crash # Requires deferred libraries
-deferred_call_empty_before_load_test: Crash # Requires deferred libraries
-deferred_closurize_load_library_test: Crash # Requires deferred libraries
-deferred_constant_list_test: Crash # Requires deferred libraries
-deferred_constraints_constants_test: Crash # Requires deferred libraries
-deferred_constraints_type_annotation_test: Crash # Requires deferred libraries
-deferred_function_type_test: Crash # Requires deferred libraries
-deferred_global_test: Crash # Requires deferred libraries
-deferred_import_core_test: Crash # Requires deferred libraries
-deferred_inheritance_constraints_test: Crash # Requires deferred libraries
-deferred_inlined_test: Crash # Requires deferred libraries
-deferred_load_constants_test: Crash # Requires deferred libraries
-deferred_load_inval_code_test: Crash # Requires deferred libraries
-deferred_load_library_wrong_args_test: Crash # Requires deferred libraries
-deferred_mixin_test: Crash # Requires deferred libraries
-deferred_no_such_method_test: Crash # Requires deferred libraries
-deferred_not_loaded_check_test: Crash # Requires deferred libraries
-deferred_only_constant_test: Crash # Requires deferred libraries
-deferred_optimized_test: Crash # Requires deferred libraries
-deferred_redirecting_factory_test: Crash # Requires deferred libraries
-deferred_regression_22995_test: Crash # Requires deferred libraries
-deferred_regression_28678_test: Crash # Requires deferred libraries
-deferred_shadow_load_library_test: Crash # Requires deferred libraries
-deferred_shared_and_unshared_classes_test: Crash # Requires deferred libraries
-deferred_static_seperate_test: Crash # Requires deferred libraries
-deferred_super_dependency_test: Pass, Crash # Requires deferred libraries
-deferred_type_dependency_test: Crash # Requires deferred libraries
-issue21159_test: Pass, Crash # Issue 29094
-issue_1751477_test: Crash # Requires deferred libraries
-issue_22780_test/01: Pass, Crash # Issue 29094
-regress_22443_test: Crash # Requires deferred libraries
-regress_23408_test: Crash # Requires deferred libraries
-regress_28278_test: Crash # Requires deferred libraries
-static_closure_identical_test: Pass, Fail # Closure identity
-vm/optimized_stacktrace_test: Pass, Slow
-vm/regress_27201_test: Pass, Crash # Requires deferred libraries
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $compiler != none || $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $runtime != vm ]
-assert_initializer_test/*: Skip # not implemented yet, experiment is VM only.
+*: SkipByDesign # Deprecating Dart1 tests.
diff --git a/tests/language_2/async_await_test.dart b/tests/language_2/async_await_test.dart
index 7c19b9c..d434da9 100644
--- a/tests/language_2/async_await_test.dart
+++ b/tests/language_2/async_await_test.dart
@@ -8,6 +8,8 @@
 import "package:async_helper/async_helper.dart";
 import "dart:async";
 
+typedef dynamic DynamicToDynamic(dynamic d);
+
 main() {
   asyncStart();
   group("basic", () {
@@ -2095,7 +2097,7 @@
   return (() async => await f)();
 }
 
-var topVarExpression = (f) async {
+DynamicToDynamic topVarExpression = (f) async {
   return await f;
 };
 
@@ -2148,7 +2150,7 @@
     return (() async => await f)();
   }
 
-  static var staticVarExpression = (f) async {
+  static DynamicToDynamic staticVarExpression = (f) async {
     return await f;
   };
 
@@ -2190,7 +2192,7 @@
     return (() async => await f)();
   }
 
-  var instanceVarExpression = (f) async {
+  DynamicToDynamic instanceVarExpression = (f) async {
     return await f;
   };
 
diff --git a/tests/language_2/async_backwards_compatibility_1_test.dart b/tests/language_2/async_backwards_compatibility_1_test.dart
index 9390879..474effe 100644
--- a/tests/language_2/async_backwards_compatibility_1_test.dart
+++ b/tests/language_2/async_backwards_compatibility_1_test.dart
@@ -6,13 +6,19 @@
 import 'async_helper_lib.dart' as async;
 
 class A {
-  async.async get async => null;
+  async.async get x => null;
+}
+
+class B {
+  int get async => null;
 }
 
 async.async topLevel() => null;
 
 main() {
   var a = new A();
-  var b = a.async;
+  var b = a.x;
   var c = topLevel();
+  var d = new B();
+  var e = d.async;
 }
diff --git a/tests/language_2/async_star_test.dart b/tests/language_2/async_star_test.dart
index 054a4b5..4828485 100644
--- a/tests/language_2/async_star_test.dart
+++ b/tests/language_2/async_star_test.dart
@@ -983,7 +983,7 @@
 
 const MS = const Duration(milliseconds: 1);
 
-var getErrors = new StreamTransformer.fromHandlers(handleData: (data, sink) {
+StreamTransformer getErrors = new StreamTransformer.fromHandlers(handleData: (data, sink) {
   fail("Unexpected value");
 }, handleError: (e, s, sink) {
   sink.add(e);
diff --git a/tests/language_2/closure_side_effect_test.dart b/tests/language_2/closure_side_effect_test.dart
index 95fb941..a7b0f50 100644
--- a/tests/language_2/closure_side_effect_test.dart
+++ b/tests/language_2/closure_side_effect_test.dart
@@ -4,8 +4,10 @@
 
 import "package:expect/expect.dart";
 
+typedef void VoidToVoid();
+
 var b;
-var a = () {
+VoidToVoid a = () {
   b = 42;
 };
 
diff --git a/tests/language_2/default_implementation2_test.dart b/tests/language_2/default_implementation2_test.dart
index 2336935..0a3607c 100644
--- a/tests/language_2/default_implementation2_test.dart
+++ b/tests/language_2/default_implementation2_test.dart
@@ -4,13 +4,15 @@
 // Dart test to verify incompatible constructor types
 
 abstract class Point {
-  factory Point(x, y) = PointImplementation;
+  factory Point(int x, int y) = PointImplementation; //# 01: ok
+  factory Point(x, y) = PointImplementation; //# 02: compile-time error
 }
 
 class PointImplementation implements Point {
-   PointImplementation(int x, int y) {} //# static type warning
+   PointImplementation(int x, int y) {}
 }
 
 main() {
-  new Point(1, 2);
+  new Point(1, 2); //# 01: continued
+  new Point(1, 2); //# 02: continued
 }
diff --git a/tests/language_2/int64_literal_test.dart b/tests/language_2/int64_literal_test.dart
index 9c0cb77..5c54736 100644
--- a/tests/language_2/int64_literal_test.dart
+++ b/tests/language_2/int64_literal_test.dart
@@ -3,22 +3,30 @@
 const String realMaxInt64Value = '9223372036854775807';
 const String realMinInt64Value = '-9223372036854775808';
 
+const int i21 = 2097152;
+
 main() {
-  int minInt64Value = (-9223372036854775807) - 1;
-  minInt64Value = -(1 << 63);               /// 01: ok
+  int minInt64Value = -1 * i21 * i21 * i21;
+  minInt64Value = -9223372036854775807 - 1; /// 01: ok
   minInt64Value = -9223372036854775808;     /// 02: ok
   minInt64Value = -(9223372036854775808);   /// 03: compile-time error
   minInt64Value = -(0x8000000000000000);    /// 04: ok
   minInt64Value = 0x8000000000000000;       /// 05: ok
+  minInt64Value = -0x8000000000000000;      /// 06: ok
 
   Expect.equals('$minInt64Value', realMinInt64Value);
   Expect.equals('${minInt64Value - 1}', realMaxInt64Value);
 
-  int maxInt64Value = 9223372036854775807;
-  maxInt64Value = (1 << 63) - 1;            /// 10: ok
-  maxInt64Value = 9223372036854775807;      /// 20: ok
-  maxInt64Value = 9223372036854775808 - 1;  /// 30: compile-time error
-  maxInt64Value = 0x8000000000000000 - 1;   /// 40: ok
+  int maxInt64Value = 1 * i21 * i21 * i21 - 1;
+  maxInt64Value = 9223372036854775807;      /// 11: ok
+  maxInt64Value = 9223372036854775807;      /// 12: ok
+  maxInt64Value = 9223372036854775808 - 1;  /// 13: compile-time error
+  maxInt64Value = -9223372036854775808 - 1; /// 14: ok
+  maxInt64Value = -9223372036854775809;     /// 15: compile-time error
+  maxInt64Value = 0x8000000000000000 - 1;   /// 16: ok
+  maxInt64Value = -0x8000000000000000 - 1;  /// 17: ok
+  maxInt64Value = -0x8000000000000001;      /// 18: compile-time error
+  maxInt64Value = -(0x8000000000000001);    /// 19: ok
 
   Expect.equals('$maxInt64Value', realMaxInt64Value);
   Expect.equals('${maxInt64Value + 1}', realMinInt64Value);
diff --git a/tests/language_2/issue13673_test.dart b/tests/language_2/issue13673_test.dart
index 303b48b..b510c61 100644
--- a/tests/language_2/issue13673_test.dart
+++ b/tests/language_2/issue13673_test.dart
@@ -10,7 +10,7 @@
   foo() => field;
 }
 
-var topLevel = new Bar(String).foo();
+dynamic topLevel = new Bar(String).foo();
 
 main() {
   Expect.isTrue(topLevel is Type);
diff --git a/tests/language_2/issue34404_flutter_modified_test.dart b/tests/language_2/issue34404_flutter_modified_test.dart
new file mode 100644
index 0000000..b78202a
--- /dev/null
+++ b/tests/language_2/issue34404_flutter_modified_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test case is a reduction of some Flutter code, modified to use the new
+// mixin syntax.  We wish to verify that the class _DismissibleState doesn't
+// have any type inference errors.
+
+class _DismissibleState extends State<Dismissible>
+    with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {}
+
+abstract class State<T extends StatefulWidget> extends Diagnosticable {}
+
+abstract class StatefulWidget extends Widget {}
+
+abstract class Widget extends DiagnosticableTree {}
+
+abstract class DiagnosticableTree extends Diagnosticable {}
+
+abstract class Diagnosticable {}
+
+class Dismissible extends StatefulWidget {}
+
+mixin TickerProviderStateMixin<T extends StatefulWidget> on State<T>
+    implements TickerProvider {}
+
+abstract class TickerProvider {}
+
+mixin AutomaticKeepAliveClientMixin<T extends StatefulWidget> on State<T> {}
+
+main() {
+  new _DismissibleState();
+}
diff --git a/tests/language_2/issue34404_flutter_test.dart b/tests/language_2/issue34404_flutter_test.dart
new file mode 100644
index 0000000..4e1c7f7
--- /dev/null
+++ b/tests/language_2/issue34404_flutter_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// SharedOptions=--supermixin
+
+// This test case is a reduction of some Flutter code.  We wish to verify that
+// the class _DismissibleState doesn't have any type inference errors.
+
+class _DismissibleState extends State<Dismissible>
+    with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {}
+
+abstract class State<T extends StatefulWidget> extends Diagnosticable {}
+
+abstract class StatefulWidget extends Widget {}
+
+abstract class Widget extends DiagnosticableTree {}
+
+abstract class DiagnosticableTree extends Diagnosticable {}
+
+abstract class Diagnosticable {}
+
+class Dismissible extends StatefulWidget {}
+
+abstract class TickerProviderStateMixin<T extends StatefulWidget>
+    extends State<T> implements TickerProvider {}
+
+abstract class TickerProvider {}
+
+abstract class AutomaticKeepAliveClientMixin<T extends StatefulWidget>
+    extends State<T> {}
+
+main() {
+  new _DismissibleState();
+}
diff --git a/tests/language_2/issue34498_test.dart b/tests/language_2/issue34498_test.dart
new file mode 100644
index 0000000..c18ad0f
--- /dev/null
+++ b/tests/language_2/issue34498_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:core';
+import 'dart:core' as core;
+
+class A {
+  /*@compile-error=unspecified*/ core.List get core => null;
+}
+
+main() {
+  new A().core;
+}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 84a6412..c8bc2fe 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -12,10 +12,6 @@
 mixin_constructor_forwarding/optional_named_parameters_test/none: CompileTimeError # Issue 31543
 mixin_constructor_forwarding/optional_positional_parameters_test/none: CompileTimeError # Issue 31543
 
-[ $compiler == dart2analyzer ]
-double_literals/implicit_double_context_test: CompileTimeError # Needs triage, see Issue #34444
-mixin_declaration/mixin_declaration_inference_valid_classes_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/34164
-
 [ $compiler != dart2analyzer ]
 switch_case_warn_test: Skip # Analyzer only, see language_analyzer2.status
 
@@ -55,6 +51,7 @@
 mixin_declaration/mixin_declaration_inference_invalid_05_test: MissingCompileTimeError, DartkCrash # https://github.com/dart-lang/sdk/issues/34165
 mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34165
 mixin_declaration/mixin_declaration_inference_invalid_10_test: MissingCompileTimeError, DartkCrash # https://github.com/dart-lang/sdk/issues/34165
+mixin_declaration/mixin_declaration_inference_invalid_11_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34165
 partial_instantiation_static_bounds_check_test/01: MissingCompileTimeError # Issue 34327
 partial_instantiation_static_bounds_check_test/02: MissingCompileTimeError # Issue 34327
 partial_instantiation_static_bounds_check_test/03: MissingCompileTimeError # Issue 34327
@@ -227,6 +224,9 @@
 [ $checked && !$strong ]
 type_parameter_test/05: Pass
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 [ $compiler == app_jit || $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp || $compiler == none || $compiler == precompiler ]
 double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34358
 
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 97bbdb3..65e2302 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -22,7 +22,7 @@
 const_constructor3_test/04: MissingCompileTimeError # Side-effect of working around issue 33441 for int-to-double
 constructor_reference_test/27: MissingCompileTimeError # Issue 34403
 covariant_subtyping_with_mixin_test: CompileTimeError # Issue 34329
-default_implementation2_test: CompileTimeError # Issue #34338, however, needs triage (#34337) and blocked (#34336)
+double_literals/implicit_double_context_test: CompileTimeError # Needs triage, see Issue #34444
 dynamic_prefix_core_test/01: MissingCompileTimeError # failing-by-design: #34339
 emit_const_fields_test: CompileTimeError # failing-by-design: #34340
 enum_syntax_test/05: Fail # Issue 34341
@@ -58,7 +58,6 @@
 invalid_returns/sync_invalid_return_03_test/none: CompileTimeError # issue #34319
 invalid_returns/sync_invalid_return_04_test/none: CompileTimeError # issue #34319
 invalid_returns/sync_invalid_return_05_test/none: CompileTimeError # issue #34319
-issue13673_test: StaticWarning # Issue 31925
 issue31596_implement_covariant_test: CompileTimeError # Issue #31596
 issue31596_override_test/01: CompileTimeError # Issue #31596
 issue31596_override_test/02: CompileTimeError # Issue #31596
@@ -71,16 +70,13 @@
 issue31596_super_test/none: CompileTimeError # Issue #31596
 issue31596_tearoff_test: CompileTimeError # Issue #31596
 issue31596_test: CompileTimeError # Issue #31596
+issue34498_test: MissingCompileTimeError # Issue 34500
 malformed2_test: Pass, MissingCompileTimeError # Flaky: issue 31056.
+mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError
 mixin_declaration/mixin_declaration_invalid_superinvocation_test/10: CompileTimeError # Issue 30552
-mixin_forwarding_constructor4_test/01: CompileTimeError # See issue #34375
-mixin_forwarding_constructor4_test/02: CompileTimeError # See issue #34375
-mixin_forwarding_constructor4_test/03: CompileTimeError # See issue #34375
 mixin_method_override_test/01: MissingCompileTimeError
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
-mixin_super_constructor_named_test/01: CompileTimeError # See issue #34375
-mixin_super_constructor_positionals_test/01: CompileTimeError # See issue #34375
 mixin_supertype_subclass2_test/02: MissingStaticWarning # Issue 25614
 mixin_supertype_subclass2_test/05: MissingStaticWarning # Issue 25614
 mixin_supertype_subclass3_test/02: MissingStaticWarning # Issue 25614
@@ -120,11 +116,10 @@
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_call4_test/01: MissingCompileTimeError
-super_no_such_method4_test/01: MissingCompileTimeError # Issue 33553
-super_no_such_method5_test/01: MissingCompileTimeError # Issue 33553
+super_no_such_method1_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
+super_no_such_method2_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
+super_no_such_method3_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
 super_setter_test: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
-switch_case_test/none: CompileTimeError
 syntax_test/60: MissingCompileTimeError
 syntax_test/61: MissingCompileTimeError
 try_catch_on_syntax_test/10: MissingCompileTimeError
@@ -139,7 +134,6 @@
 type_promotion_functions_test/13: CompileTimeError
 type_promotion_functions_test/14: CompileTimeError
 type_promotion_functions_test/none: CompileTimeError
-type_variable_scope_test/none: Fail # Issue 11578
 type_variable_static_context_negative_test: Fail # Issue 12161
 vm/debug_break_enabled_vm_test: Skip
 vm/debug_break_vm_test/*: Skip
@@ -151,28 +145,22 @@
 void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/call_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/final_local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_for_in2: MissingCompileTimeError
 void/void_type_usage_test/final_local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/global_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/param_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/paren_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/sync_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 241f8f57..228a5bd 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -36,15 +36,20 @@
 instantiate_tearoff_of_call_test: RuntimeError
 int2_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 int64_literal_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/04: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/05: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/10: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/20: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/40: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int64_literal_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/02: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/04: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/05: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/06: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/11: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/12: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/14: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/16: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/17: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/19: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int64_literal_test/none: RuntimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 issue23244_test: RuntimeError # Isolates - enum canonicalization - Issue 23244
 issue32353_test: CompileTimeError
+issue34404_flutter_test: CompileTimeError # --supermixin not supported
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_html_support: RuntimeError, OK
 list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
@@ -459,8 +464,6 @@
 partial_tearoff_instantiation_test/06: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 partial_tearoff_instantiation_test/07: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 partial_tearoff_instantiation_test/08: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
-redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_malbounded_test/01: MissingCompileTimeError
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
@@ -515,8 +518,6 @@
 no_such_method_test: RuntimeError
 overridden_no_such_method_test: RuntimeError
 recursive_generic_test: RuntimeError
-redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_malbounded_test/01: MissingCompileTimeError
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
 regress_21795_test: RuntimeError # Issue 12605
@@ -592,14 +593,6 @@
 infinity_test: RuntimeError # non JS number semantics - Issue 4984
 instance_creation_in_function_annotation_test: RuntimeError
 instantiate_tearoff_of_call_test: CompileTimeError
-int64_literal_test/01: RuntimeError
-int64_literal_test/02: RuntimeError
-int64_literal_test/04: RuntimeError
-int64_literal_test/05: RuntimeError
-int64_literal_test/10: RuntimeError
-int64_literal_test/20: RuntimeError
-int64_literal_test/40: RuntimeError
-int64_literal_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError # Issue 8301
 internal_library_test/02: Crash
 invocation_mirror_invoke_on2_test: RuntimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 29b9a9c..c9f79bb 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -39,7 +39,6 @@
 covariance_field_test/03: RuntimeError
 covariant_override/tear_off_type_test: RuntimeError # Issue 28395
 covariant_subtyping_with_mixin_test: CompileTimeError # Issue 34329
-default_implementation2_test: CompileTimeError # Issue 30855
 deferred_load_library_wrong_args_test/01: MissingRuntimeError, RuntimeError # Issue 29920
 double_identical_test: RuntimeError # Negative and positive zero are distinct, but not in ddc
 dynamic_prefix_core_test/01: MissingCompileTimeError
@@ -102,26 +101,54 @@
 issue31596_tearoff_test: CompileTimeError
 issue31596_test: CompileTimeError
 issue32353_test: RuntimeError
+issue34404_flutter_modified_test: CompileTimeError # DDC doesn't support mixin inference
+issue34404_flutter_test: CompileTimeError # DDC doesn't support mixin inference
+issue34498_test: MissingCompileTimeError # Issue 34500
 label_test: RuntimeError
 left_shift_test: RuntimeError # Ints and doubles are unified.
-mixin_declaration/mixin_declaration_inference_invalid_03_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_04_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_05_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_06_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_08_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_09_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_invalid_10_test: MissingCompileTimeError   # https://github.com/dart-lang/sdk/issues/34167
-mixin_declaration/mixin_declaration_inference_valid_classes_test: CompileTimeError   # https://github.com/dart-lang/sdk/issues/34164
-mixin_declaration/mixin_declaration_invalid_superinvocation_test/10: CompileTimeError    # Analyzer chooses wrong(?) super method.
-mixin_forwarding_constructor4_test/01: CompileTimeError # See issue 15101
-mixin_forwarding_constructor4_test/02: CompileTimeError # See issue 15101
-mixin_forwarding_constructor4_test/03: CompileTimeError # See issue 15101
+mixin_declaration/mixin_declaration_inference_invalid_03_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_04_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_05_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_06_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_08_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_09_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_10_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_invalid_11_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34167
+mixin_declaration/mixin_declaration_inference_valid_A00_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A01_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A02_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A10_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A11_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A12_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A20_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A21_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A22_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A23_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A30_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A31_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_A42_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B00_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B01_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B02_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B03_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B10_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B11_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B12_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_B13_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C00_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C01_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C02_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C03_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C10_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C11_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C12_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_C13_test: CompileTimeError # Issue #34164
+mixin_declaration/mixin_declaration_inference_valid_mixin_applications_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/34164
+mixin_declaration/mixin_declaration_invalid_superinvocation_test/10: CompileTimeError # Analyzer chooses wrong(?) super method.
 mixin_method_override_test/01: MissingCompileTimeError # Issue 34235
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
-mixin_super_constructor_named_test/01: CompileTimeError # See issue 15101
-mixin_super_constructor_positionals_test/01: CompileTimeError # See issue 15101
 mixin_super_test: RuntimeError
 mixin_super_use_test: RuntimeError
 mixin_supertype_subclass_test/02: MissingCompileTimeError
@@ -163,14 +190,13 @@
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_call4_test/01: MissingCompileTimeError
-super_no_such_method4_test/01: MissingCompileTimeError # Requires Dart 2 semantics. See http://dartbug.com/33380.
-super_no_such_method5_test/01: MissingCompileTimeError # Requires Dart 2 semantics. See http://dartbug.com/33380.
+super_no_such_method1_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
+super_no_such_method2_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
+super_no_such_method3_test: CompileTimeError # Invalid test, probably, see https://github.com/dart-lang/sdk/issues/33963
 super_operator_index5_test: RuntimeError # 33470
 super_operator_index7_test: RuntimeError # 33470
 super_operator_index8_test: RuntimeError # 33470
 super_setter_test: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
-switch_case_test/none: CompileTimeError
 syntax_test/60: MissingCompileTimeError
 syntax_test/61: MissingCompileTimeError
 truncdiv_test: RuntimeError # Issue 29920
@@ -191,35 +217,28 @@
 type_promotion_functions_test/13: CompileTimeError # Issue 30895
 type_promotion_functions_test/14: CompileTimeError # Issue 30895
 type_promotion_functions_test/none: CompileTimeError # Issue 30895
-type_variable_scope_test/none: CompileTimeError
 void/return_future_future_or_void_async_error1_test/none: CompileTimeError # issue #34319
 void/return_future_or_future_or_void_sync_error2_test/none: CompileTimeError # issue #34319
 void/return_future_or_void_sync_error4_test/none: CompileTimeError # issue #34319
 void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/call_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/final_local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/final_local_for_in2: MissingCompileTimeError
 void/void_type_usage_test/final_local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/global_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/global_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/local_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/local_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/param_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/param_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_usage_test/paren_boolean_negation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_boolean_or_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/paren_use_in_string_interpolation: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/sync_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
@@ -266,7 +285,6 @@
 double_identical_test: RuntimeError # Negative and positive zero are distinct, but not in ddk
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError # Issue 31533
-export_ambiguous_main_test: MissingCompileTimeError
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
 function_propagation_test: RuntimeError
@@ -300,7 +318,26 @@
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-mixin_declaration/*: Skip # need flag on Kernel Class nodes.
+mixin_declaration/mixin_declaration_inference_invalid_05_test: MissingCompileTimeError, Crash # https://github.com/dart-lang/sdk/issues/34165
+mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34165
+mixin_declaration/mixin_declaration_inference_invalid_10_test: MissingCompileTimeError, Crash # https://github.com/dart-lang/sdk/issues/34165
+mixin_declaration/mixin_declaration_inference_invalid_11_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/34165
+mixin_declaration/mixin_declaration_invalid_application_supertype_test/03: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_application_supertype_test/04: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_application_supertype_test/05: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_override_test/06: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_override_test/07: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_override_test/08: MissingCompileTimeError
+mixin_declaration/mixin_declaration_invalid_superinvocation_test/10: CompileTimeError
+mixin_declaration/mixin_declaration_invalid_superinvocation_test/none: CompileTimeError
+mixin_declaration/mixin_declaration_invalid_syntax_test/none: CompileTimeError
+mixin_declaration/mixin_declaration_invalid_usage_test/03: MissingCompileTimeError
+mixin_declaration/mixin_declaration_superinvocation_application_test/04: MissingCompileTimeError
+mixin_declaration/mixin_declaration_superinvocation_application_test/05: MissingCompileTimeError
+mixin_declaration/mixin_declaration_superinvocation_application_test/06: MissingCompileTimeError
+mixin_declaration/mixin_declaration_superinvocation_application_test/07: MissingCompileTimeError
+mixin_declaration/mixin_declaration_superinvocation_application_test/08: MissingCompileTimeError
+mixin_declaration/mixin_declaration_supertype_compatible_test/none: CompileTimeError
 mixin_illegal_super_use_test/01: MissingCompileTimeError
 mixin_illegal_super_use_test/04: MissingCompileTimeError
 mixin_illegal_super_use_test/07: MissingCompileTimeError
@@ -351,8 +388,6 @@
 multiline_newline_test/06r: MissingCompileTimeError
 no_such_method_mock_test: RuntimeError # Issue 31426 - Kernel does not introduce nSM for implemented fields.
 null_no_such_method_test: CompileTimeError # Issue 31533
-redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError # UnimplementedError: node <InvalidExpression> `invalid-expression`
 regress_23408_test: CompileTimeError # Issue 31533
 regress_24283_test: RuntimeError # Expect.equals(expected: <-1>, actual: <4294967295>) fails.
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 41bd846..33a2810 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -56,7 +56,6 @@
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError
 example_constructor_test: RuntimeError
-export_ambiguous_main_test: Crash
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
@@ -95,7 +94,6 @@
 mixin_declaration/mixin_declaration_invalid_usage_test/03: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/none: CompileTimeError
 mixin_declaration/mixin_declaration_supertype_compatible_test/none: CompileTimeError
-mixin_declaration/mixin_declaration_syntax_test: CompileTimeError
 mixin_illegal_super_use_test/01: MissingCompileTimeError
 mixin_illegal_super_use_test/04: MissingCompileTimeError
 mixin_illegal_super_use_test/07: MissingCompileTimeError
@@ -219,7 +217,6 @@
 mixin_declaration/mixin_declaration_invalid_usage_test/03: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/none: CompileTimeError
 mixin_declaration/mixin_declaration_supertype_compatible_test/none: CompileTimeError
-mixin_declaration/mixin_declaration_syntax_test: CompileTimeError
 vm/regress_33469_test/01: MissingCompileTimeError
 vm/regress_33469_test/02: MissingCompileTimeError
 vm/regress_33469_test/03: MissingCompileTimeError
@@ -232,19 +229,12 @@
 const_cast2_test/none: CompileTimeError # Issue 32517
 const_constructor_mixin3_test: CompileTimeError # Issue 33644.
 const_constructor_mixin_test: CompileTimeError # Issue 33644.
-const_types_test/34: MissingCompileTimeError # Issue 31590
-const_types_test/39: MissingCompileTimeError # Issue 31590
 constructor_reference_test/27: MissingCompileTimeError # Issue 34403
-default_factory2_test/01: MissingCompileTimeError # Issue 31590
-default_factory_test/01: MissingCompileTimeError # Issue 31590
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
-deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
-duplicate_export_collision_test/01: MissingCompileTimeError # Issue 12916
 f_bounded_quantification_test/01: MissingCompileTimeError # Issue 33308
 f_bounded_quantification_test/02: MissingCompileTimeError # Issue 33308
-factory4_test/00: MissingCompileTimeError # Issue 31590
 generic_methods_bounds_test/01: MissingCompileTimeError # Issue 33308
 generic_methods_recursive_bound_test/02: MissingCompileTimeError # Issue 33308
 issue31596_super_test/02: MissingCompileTimeError # Issue 31596
@@ -255,10 +245,10 @@
 issue34488_test/04: MissingCompileTimeError # Issue 34488
 issue34488_test/05: MissingCompileTimeError # Issue 34488
 issue34488_test/06: MissingCompileTimeError # Issue 34488
+issue34498_test: MissingCompileTimeError # Issue 34498
 malbounded_instantiation_test/01: MissingCompileTimeError # Issue 33308
 malbounded_instantiation_test/02: MissingCompileTimeError # Issue 33308
 malbounded_instantiation_test/03: MissingCompileTimeError # Issue 33308
-malbounded_redirecting_factory_test/02: MissingCompileTimeError # Issue 33308
 malbounded_redirecting_factory_test/03: MissingCompileTimeError # Issue 33308
 malbounded_redirecting_factory_test/04: MissingCompileTimeError # Issue 33308
 malbounded_redirecting_factory_test/05: MissingCompileTimeError # Issue 33308
@@ -271,7 +261,6 @@
 malbounded_type_test_test/00: MissingCompileTimeError # Issue 33308
 malbounded_type_test_test/01: MissingCompileTimeError # Issue 33308
 malbounded_type_test_test/02: MissingCompileTimeError # Issue 33308
-mixin_declaration/mixin_declaration_inference_valid_classes_test: CompileTimeError, DartkCrash, Crash # https://github.com/dart-lang/sdk/issues/34165
 mixin_invalid_bound2_test/02: MissingCompileTimeError # Issue 33308
 mixin_invalid_bound2_test/03: MissingCompileTimeError # Issue 33308
 mixin_invalid_bound2_test/04: MissingCompileTimeError # Issue 33308
@@ -341,14 +330,10 @@
 type_variable_bounds_test/04: MissingCompileTimeError # Issue 33308
 type_variable_bounds_test/05: MissingCompileTimeError # Issue 33308
 type_variable_bounds_test/06: MissingCompileTimeError # Issue 33308
-type_variable_bounds_test/11: MissingCompileTimeError # Issue 33308
 vm/debug_break_enabled_vm_test/01: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/debug_break_enabled_vm_test/none: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/regress_27201_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 
-[ $arch != simarm && $arch != simarm64 && $arch != simdbc64 && $compiler == dartk && $runtime == vm && $strong ]
-export_ambiguous_main_test: Crash # Issue 32618
-
 [ $compiler == app_jitk && $mode == product ]
 vm/causal_async_exception_stack2_test: RuntimeError
 vm/causal_async_exception_stack_test: RuntimeError
@@ -426,6 +411,8 @@
 assertion_initializer_const_error2_test/cc10: MissingCompileTimeError # Not reporting failed assert() at compile time.
 
 [ $compiler == dartkb && $runtime == vm && $strong ]
+async_star_test/03: Pass, RuntimeError # Please triage
+async_star_test/04: Pass, RuntimeError # Please triage
 compile_time_constant_o_test/01: Pass
 compile_time_constant_o_test/02: Pass
 const_dynamic_type_literal_test/02: Pass
@@ -689,8 +676,6 @@
 null_test/none: SkipByDesign
 overridden_no_such_method_test: SkipByDesign
 parser_quirks_test: CompileTimeError # Issue 31533
-redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: SkipByDesign
 regress_13462_0_test: SkipByDesign
 regress_13462_1_test: SkipByDesign
@@ -777,7 +762,6 @@
 deferred_load_library_wrong_args_test/01: CompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError
-export_ambiguous_main_test: MissingCompileTimeError
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
@@ -1139,7 +1123,6 @@
 assert_initializer_test/none: RuntimeError # KernelVM bug: Constant evaluation.
 async_return_types_test/nestedFuture: Fail
 compile_time_constant_checked_test/02: MissingCompileTimeError
-default_factory2_test/01: Fail
 malbounded_redirecting_factory_test/03: Fail
 malbounded_redirecting_factory_test/04: Fail
 malbounded_type_test_test/03: Fail
@@ -1149,8 +1132,6 @@
 mixin_invalid_bound2_test/10: Fail
 mixin_invalid_bound_test/06: Fail
 mixin_invalid_bound_test/07: Fail
-redirecting_factory_infinite_steps_test/01: Fail
-redirecting_factory_malbounded_test/01: Fail
 regress_30339_test: RuntimeError
 type_variable_bounds4_test/01: RuntimeError
 
@@ -1255,8 +1236,6 @@
 no_such_method_mock_test: RuntimeError # Issue 31426
 null_no_such_method_test: CompileTimeError # Issue 31533
 parser_quirks_test: CompileTimeError # Issue 31533
-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_23408_test: RuntimeError, CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -1303,8 +1282,7 @@
 
 [ $fasta && $strong ]
 issue18628_2_test/01: MissingCompileTimeError
-redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_malbounded_test/01: MissingCompileTimeError
+redirecting_factory_bounds_test/02: MissingCompileTimeError # Related to issue 33308
 type_promotion_logical_and_test/01: MissingCompileTimeError
 
 [ $fasta && !$strong ]
@@ -1503,7 +1481,6 @@
 empty_block_case_test: MissingCompileTimeError
 enum_private_test/02: MissingCompileTimeError
 error_stacktrace_test/00: MissingCompileTimeError
-export_ambiguous_main_test: MissingCompileTimeError
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
 factory1_test/00: MissingCompileTimeError
@@ -2144,4 +2121,3 @@
 mixin_declaration/mixin_declaration_invalid_usage_test/03: MissingCompileTimeError
 mixin_declaration/mixin_declaration_superinvocation_application_test/none: CompileTimeError
 mixin_declaration/mixin_declaration_supertype_compatible_test/none: CompileTimeError
-mixin_declaration/mixin_declaration_syntax_test: CompileTimeError
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_invalid_11_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_invalid_11_test.dart
new file mode 100644
index 0000000..c7de81e
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_invalid_11_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class I<T> {}
+mixin M1<T> on I<T> {}
+
+//////////////////////////////////////////////////////
+// Mixin type argument inference is not performed on
+// the "on" clause of a mixin
+///////////////////////////////////////////////////////
+
+mixin A00Mixin on I<int>, M1 {} /*@compile-error=unspecified*/
+
+void main() {}
\ No newline at end of file
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A00_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A00_test.dart
new file mode 100644
index 0000000..02e8ccd
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A00_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A00 extends I<int> with M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A00()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A01_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A01_test.dart
new file mode 100644
index 0000000..bdf8286
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A01_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A01 extends C0<int> with M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A01()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A02_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A02_test.dart
new file mode 100644
index 0000000..b32cc46
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A02_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A02 extends C1<int> with M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A02()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A10_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A10_test.dart
new file mode 100644
index 0000000..c9b9d57
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A10_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A10 extends I<int> with M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A10()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A11_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A11_test.dart
new file mode 100644
index 0000000..4df8195
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A11_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A11 extends C0<int> with M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A11()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A12_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A12_test.dart
new file mode 100644
index 0000000..c480f84
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A12_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class A12 extends C1<int> with M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new A12()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A20_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A20_test.dart
new file mode 100644
index 0000000..fc69345
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A20_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M4 is inferred as M4<int, double>
+class A20 extends C2 with M4 {
+  void check() {
+    // Verify that M4.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M4.T is exactly double
+    double Function(double) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M4<int, double>>(new A20()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A21_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A21_test.dart
new file mode 100644
index 0000000..bba17a3
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A21_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M4 is inferred as M4<int, double>
+class A21 extends C3 with M2<int>, M4 {
+  void check() {
+    // Verify that M4.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M4.T is exactly double
+    double Function(double) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M4<int, double>>(new A21()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A22_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A22_test.dart
new file mode 100644
index 0000000..83ef40c
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A22_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M4 is inferred as M4<int, double>
+class A22 extends C2 with M1, M4 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+    // Verify that M4.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M4.T is exactly double
+    double Function(double) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M4<int, double>>(new A22()..check());
+  Expect.type<M1<int>>(new A22()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A23_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A23_test.dart
new file mode 100644
index 0000000..1d19eef
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A23_test.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+mixin _M5<T> on I<T> implements J<T> {}
+
+// Inference here puts J<int> in the superclass hierarchy
+class _A23 extends C0<int> with _M5 {}
+
+// Inference here should get J<int> for M4.T
+// if inference for _M5 is done first (correctly)
+// and otherwise J<dynamic>
+class A23 extends _A23 with M4 {
+  void check() {
+    // Verify that M4.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M4.T is exactly int
+    int Function(int) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M4<int, int>>(new A23()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A30_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A30_test.dart
new file mode 100644
index 0000000..71337c7
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A30_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+mixin M5<S, T extends String> on I<S> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M5 is inferred as M5<int, String>
+class A30 extends C0<int> with M5 {
+  void check() {
+    // Verify that M5.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M5.T is exactly String
+    String Function(String) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M5<int, String>>(new A30()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A31_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A31_test.dart
new file mode 100644
index 0000000..b0da8e9
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A31_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+mixin M6<S, T extends S> on I<S> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M6 is inferred as M6<int, int>
+class A31 extends C0<int> with M6 {
+  void check() {
+    // Verify that M6.S is exactly int
+    int Function(int) f0 = this.value0;
+    // Verify that M6.T is exactly int
+    int Function(int) f1 = this.value1;
+  }
+}
+
+void main() {
+  Expect.type<M6<int, int>>(new A31()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A42_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A42_test.dart
new file mode 100644
index 0000000..01ab1ca
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_A42_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+mixin M7<T> on I<List<T>> {
+  T Function(T) get value0 => null;
+}
+
+class A40<T> extends I<List<T>> {}
+
+class A41<T> extends A40<Map<T, T>> {}
+
+// M7 is inferred as M7<Map<int, int>>
+class A42 extends A41<int> with M7 {
+  void check() {
+    // Verify that M7.T is exactly Map<int, int>
+    Map<int, int> Function(Map<int, int>) f1 = this.value0;
+  }
+}
+
+void main() {
+  Expect.type<M7<Map<int, int>>>(new A42()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B00_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B00_test.dart
new file mode 100644
index 0000000..74e7d84
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B00_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B00 extends Object with I<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B00()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B01_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B01_test.dart
new file mode 100644
index 0000000..b0435a2
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B01_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B01 extends Object with C1<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B01()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B02_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B02_test.dart
new file mode 100644
index 0000000..0c61e49
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B02_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B02 extends I<int> with M0<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B02()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B03_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B03_test.dart
new file mode 100644
index 0000000..2f80e0f
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B03_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B03 extends Object with M2<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B03()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B10_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B10_test.dart
new file mode 100644
index 0000000..8485a59
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B10_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B10 extends Object with I<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B10()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B11_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B11_test.dart
new file mode 100644
index 0000000..adf1151
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B11_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B11 extends Object with C1<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B11()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B12_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B12_test.dart
new file mode 100644
index 0000000..fc9e613
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B12_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B12 extends I<int> with M0<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B12()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B13_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B13_test.dart
new file mode 100644
index 0000000..d8bbf43
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_B13_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class B13 extends Object with M2<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new B13()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C00_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C00_test.dart
new file mode 100644
index 0000000..7db4c89
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C00_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C00 with I<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C00()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C01_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C01_test.dart
new file mode 100644
index 0000000..d860784
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C01_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C01 with C1<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C01()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C02_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C02_test.dart
new file mode 100644
index 0000000..56c6ab0
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C02_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C02 with I<int>, M0<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C02()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C03_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C03_test.dart
new file mode 100644
index 0000000..c98a810
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C03_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C03 with M2<int>, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C03()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C10_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C10_test.dart
new file mode 100644
index 0000000..71c1f34
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C10_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C10 with I<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C10()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C11_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C11_test.dart
new file mode 100644
index 0000000..de1126c
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C11_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C11 with C1<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C11()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C12_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C12_test.dart
new file mode 100644
index 0000000..85dbebd
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C12_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C12 with I<int>, M0<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C12()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C13_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C13_test.dart
new file mode 100644
index 0000000..433ce47
--- /dev/null
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_C13_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class I<X> {}
+
+class C0<T> extends I<T> {}
+class C1<T> implements I<T> {}
+
+mixin M0<T> on I<T> {
+}
+
+mixin M1<T> on I<T> {
+  T Function(T) get value => null;
+}
+
+mixin M2<T> implements I<T> {}
+
+mixin M3<T> on I<T> {}
+
+class J<X> {}
+class C2 extends C1<int> implements J<double> {}
+class C3 extends J<double> {}
+
+mixin M4<S, T> on I<S>, J<T> {
+  S Function(S) get value0 => null;
+  T Function(T) get value1 => null;
+}
+
+// M1 is inferred as M1<int>
+class C13 with M2<int>, M3, M1 {
+  void check() {
+    // Verify that M1.T is exactly int
+    int Function(int) f = this.value;
+  }
+}
+
+void main() {
+  Expect.type<M1<int>>(new C13()..check());
+}
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_classes_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_mixin_applications_test.dart
similarity index 74%
rename from tests/language_2/mixin_declaration/mixin_declaration_inference_valid_classes_test.dart
rename to tests/language_2/mixin_declaration/mixin_declaration_inference_valid_mixin_applications_test.dart
index e7eeb50..8c4e363 100644
--- a/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_classes_test.dart
+++ b/tests/language_2/mixin_declaration/mixin_declaration_inference_valid_mixin_applications_test.dart
@@ -4,6 +4,12 @@
 
 import "package:expect/expect.dart";
 
+///////////////////////////////////////////////////////
+// Tests for inference of type arguments to mixins in
+// class definition mixin applications of the form
+// `class Foo = A with M`
+///////////////////////////////////////////////////////
+
 class I<X> {}
 
 class C0<T> extends I<T> {}
@@ -33,8 +39,7 @@
 // Inference of a single mixin from a super class works
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class A00 extends I<int> with M1 {
+mixin A00Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -42,7 +47,9 @@
 }
 
 // M1 is inferred as M1<int>
-class A01 extends C0<int> with M1 {
+class A00 = I<int> with M1, A00Mixin;
+
+mixin A01Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -50,19 +57,23 @@
 }
 
 // M1 is inferred as M1<int>
-class A02 extends C1<int> with M1 {
+class A01 = C0<int> with M1, A01Mixin;
+
+mixin A02Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class A02 = C1<int> with M1, A02Mixin;
+
 ///////////////////////////////////////////////////////
 // Inference of a single mixin from another mixin works
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class B00 extends Object with I<int>, M1 {
+mixin B00Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -70,7 +81,9 @@
 }
 
 // M1 is inferred as M1<int>
-class B01 extends Object with C1<int>, M1 {
+class B00 = Object with I<int>, M1, B00Mixin;
+
+mixin B01Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -78,7 +91,9 @@
 }
 
 // M1 is inferred as M1<int>
-class B02 extends I<int> with M0<int>, M1 {
+class B01 = Object with C1<int>, M1, B01Mixin;
+
+mixin B02Mixin on M0<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -86,20 +101,24 @@
 }
 
 // M1 is inferred as M1<int>
-class B03 extends Object with M2<int>, M1 {
+class B02 = I<int> with M0<int>, M1, B02Mixin;
+
+mixin B03Mixin on M2<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class B03 = Object with M2<int>, M1, B03Mixin;
+
 ///////////////////////////////////////////////////////
 // Inference of a single mixin from another mixin works
 // with the shorthand syntax
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class C00 with I<int>, M1 {
+mixin C00Mixin on M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -107,7 +126,9 @@
 }
 
 // M1 is inferred as M1<int>
-class C01 with C1<int>, M1 {
+class C00 = Object with I<int>, M1, C00Mixin;
+
+mixin C01Mixin on C1<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -115,7 +136,9 @@
 }
 
 // M1 is inferred as M1<int>
-class C02 with I<int>, M0<int>, M1 {
+class C01 = Object with C1<int>, M1, C01Mixin;
+
+mixin C02Mixin on M0<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -123,19 +146,23 @@
 }
 
 // M1 is inferred as M1<int>
-class C03 with M2<int>, M1 {
+class C02 = Object with I<int>, M0<int>, M1, C02Mixin;
+
+mixin C03Mixin on M2<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class C03 = Object with M2<int>, M1, C03Mixin;
+
 ///////////////////////////////////////////////////////
 // Inference of two mixins from a super class works
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class A10 extends I<int> with M3, M1 {
+mixin A10Mixin on M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -143,7 +170,9 @@
 }
 
 // M1 is inferred as M1<int>
-class A11 extends C0<int> with M3, M1 {
+class A10 = I<int> with M3, M1, A10Mixin;
+
+mixin A11Mixin on C0<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -151,19 +180,23 @@
 }
 
 // M1 is inferred as M1<int>
-class A12 extends C1<int> with M3, M1 {
+class A11 = C0<int> with M3, M1, A11Mixin;
+
+mixin A12Mixin on C1<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class A12 = C1<int> with M3, M1, A12Mixin;
+
 ///////////////////////////////////////////////////////
 // Inference of two mixins from another mixin works
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class B10 extends Object with I<int>, M3, M1 {
+mixin B10Mixin on I<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -171,7 +204,9 @@
 }
 
 // M1 is inferred as M1<int>
-class B11 extends Object with C1<int>, M3, M1 {
+class B10 = Object with I<int>, M3, M1, B10Mixin;
+
+mixin B11Mixin on C1<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -179,7 +214,9 @@
 }
 
 // M1 is inferred as M1<int>
-class B12 extends I<int> with M0<int>, M3, M1 {
+class B11 = Object with C1<int>, M3, M1, B11Mixin;
+
+mixin B12Mixin on I<int>, M0<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -187,20 +224,24 @@
 }
 
 // M1 is inferred as M1<int>
-class B13 extends Object with M2<int>, M3, M1 {
+class B12 = I<int> with M0<int>, M3, M1, B12Mixin;
+
+mixin B13Mixin on M2<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class B13 = Object with M2<int>, M3, M1, B13Mixin;
+
 ///////////////////////////////////////////////////////
 // Inference of a single mixin from another mixin works
 // with the shorthand syntax
 ///////////////////////////////////////////////////////
 
-// M1 is inferred as M1<int>
-class C10 with I<int>, M3, M1 {
+mixin C10Mixin on I<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -208,7 +249,9 @@
 }
 
 // M1 is inferred as M1<int>
-class C11 with C1<int>, M3, M1 {
+class C10 = Object with I<int>, M3, M1, C10Mixin;
+
+mixin C11Mixin on C1<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -216,7 +259,9 @@
 }
 
 // M1 is inferred as M1<int>
-class C12 with I<int>, M0<int>, M3, M1 {
+class C11 = Object with C1<int>, M3, M1, C11Mixin;
+
+mixin C12Mixin on I<int>, M0<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -224,21 +269,25 @@
 }
 
 // M1 is inferred as M1<int>
-class C13 with M2<int>, M3, M1 {
+class C12 = Object with I<int>, M0<int>, M3, M1, C12Mixin;
+
+mixin C13Mixin on M2<int>, M3<int>, M1<int> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
   }
 }
 
+// M1 is inferred as M1<int>
+class C13 = Object with M2<int>, M3, M1, C13Mixin;
+
 
 ///////////////////////////////////////////////////////
 // Inference from multiple constraints works
 ///////////////////////////////////////////////////////
 
 
-// M4 is inferred as M4<int, double>
-class A20 extends C2 with M4 {
+mixin A20Mixin on C2, M4<int, double> {
   void check() {
     // Verify that M4.S is exactly int
     int Function(int) f0 = this.value0;
@@ -248,17 +297,21 @@
 }
 
 // M4 is inferred as M4<int, double>
-class A21 extends C3 with M2<int>, M4 {
+class A20 = C2 with M4, A20Mixin;
+
+mixin A21Mixin on C3, M2<int>, M4<int, double> {
   void check() {
     // Verify that M4.S is exactly int
     int Function(int) f0 = this.value0;
     // Verify that M4.T is exactly double
-    double Function(double) f1 = this.value0;
+    double Function(double) f1 = this.value1;
   }
 }
 
 // M4 is inferred as M4<int, double>
-class A22 extends C2 with M1, M4 {
+class A21 = C3 with M2<int>, M4, A21Mixin;
+
+mixin A22Mixin on C2, M1<int>, M4<int, double> {
   void check() {
     // Verify that M1.T is exactly int
     int Function(int) f = this.value;
@@ -269,15 +322,15 @@
   }
 }
 
+// M4 is inferred as M4<int, double>
+class A22 = C2 with M1, M4, A22Mixin;
+
 mixin _M5<T> on I<T> implements J<T> {}
 
 // Inference here puts J<int> in the superclass hierarchy
 class _A23 extends C0<int> with _M5 {}
 
-// Inference here should get J<int> for M4.T
-// if inference for _M5 is done first (correctly)
-// and otherwise J<dynamic>
-class A23 extends _A23 with M4 {
+mixin A23Mixin on _A23, M4<int, int> {
   void check() {
     // Verify that M4.S is exactly int
     int Function(int) f0 = this.value0;
@@ -286,6 +339,11 @@
   }
 }
 
+// Inference here should get J<int> for M4.T
+// if inference for _A23 is done first (correctly)
+// and otherwise J<dynamic>
+class A23 = _A23 with M4, A23Mixin;
+
 ///////////////////////////////////////////////////////
 // Unconstrained parameters go to bounds
 ///////////////////////////////////////////////////////
@@ -300,8 +358,7 @@
   T Function(T) get value1 => null;
 }
 
-// M5 is inferred as M5<int, String>
-class A30 extends C0<int> with M5 {
+mixin A30Mixin on C0<int>, M5<int, String> {
   void check() {
     // Verify that M5.S is exactly int
     int Function(int) f0 = this.value0;
@@ -310,8 +367,10 @@
   }
 }
 
-// M6 is inferred as M6<int, int>
-class A31 extends C0<int> with M6 {
+// M5 is inferred as M5<int, String>
+class A30 = C0<int> with M5, A30Mixin;
+
+mixin A31Mixin on C0<int>, M6<int, int> {
   void check() {
     // Verify that M6.S is exactly int
     int Function(int) f0 = this.value0;
@@ -320,6 +379,9 @@
   }
 }
 
+// M6 is inferred as M6<int, int>
+class A31 = C0<int> with M6, A31Mixin;
+
 ///////////////////////////////////////////////////////
 // Non-trivial constraints should work
 ///////////////////////////////////////////////////////
@@ -328,30 +390,19 @@
   T Function(T) get value0 => null;
 }
 
-mixin M8<T> on I<Iterable<T>> {
-  T Function(T) get value0 => null;
-}
-
 class A40<T> extends I<List<T>> {}
 
 class A41<T> extends A40<Map<T, T>> {}
 
-// M7 is inferred as M7<Map<int, int>>
-class A42 extends A41<int> with M7 {
+mixin A42Mixin on A41<int>, M7<Map<int, int>> {
   void check() {
     // Verify that M7.T is exactly Map<int, int>
     Map<int, int> Function(Map<int, int>) f1 = this.value0;
   }
 }
 
-// M8 is inferred as M8<Map<int, int>>
-class A43 extends A41<int> with M8 {
-  void check() {
-    // Verify that M8.T is exactly Map<int, int>
-    Map<int, int> Function(Map<int, int>) f1 = this.value0;
-  }
-}
-
+// M7 is inferred as M7<Map<int, int>>
+class A42 = A41<int> with M7, A42Mixin;
 
 void main() {
   Expect.type<M1<int>>(new A00()..check());
@@ -392,5 +443,4 @@
   Expect.type<M6<int, int>>(new A31()..check());
 
   Expect.type<M7<Map<int, int>>>(new A42()..check());
-  Expect.type<M8<Map<int, int>>>(new A43()..check());
 }
\ No newline at end of file
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_superinvocation_application_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_superinvocation_application_test.dart
index 1a07759..4cbf973e 100644
--- a/tests/language_2/mixin_declaration/mixin_declaration_superinvocation_application_test.dart
+++ b/tests/language_2/mixin_declaration/mixin_declaration_superinvocation_application_test.dart
@@ -23,9 +23,21 @@
   }
 }
 
+mixin M11 on UnaryNum {
+  num bar() {
+    return 0.0;
+  }
+  num foo(num x) {
+    return super.foo(42.0);
+  }
+}
+
 // The super-invoked method must be non-abstract.
 class A1 extends UnaryNum //
     with M1 //# 04: compile-time error
+    with M11 //# 05: compile-time error
+    with M1, M11 //# 06: compile-time error
+    with M11, M1 //# 07: compile-time error
 {
   // M1.bar does super.foo and UnaryNum has no implementation.
   num foo(num x) => x;
@@ -49,7 +61,7 @@
 }
 
 class A2 extends C2 //
-    with M2 //# 05: compile-time error
+    with M2 //# 08: compile-time error
 {
   // M2.bar does a super.foo, so C2.foo must satisfy the super-interface of M2.
   // It doesn't, even if the super-call would succeed against C1.foo.
@@ -58,5 +70,8 @@
 
 main() {
   A1().bar(); //# 04: continued
-  A2().bar(); //# 05: continued
+  A1().bar(); //# 05: continued
+  A1().bar(); //# 06: continued
+  A1().bar(); //# 07: continued
+  A2().bar(); //# 08: continued
 }
\ No newline at end of file
diff --git a/tests/language_2/mixin_declaration/mixin_declaration_syntax_test.dart b/tests/language_2/mixin_declaration/mixin_declaration_syntax_test.dart
index 6159af9..b87284a 100644
--- a/tests/language_2/mixin_declaration/mixin_declaration_syntax_test.dart
+++ b/tests/language_2/mixin_declaration/mixin_declaration_syntax_test.dart
@@ -222,7 +222,7 @@
   }
 
   {
-    for (var o in [CBaM(), CBaM_2()]) {
+    for (dynamic o in [CBaM(), CBaM_2()]) {
       Expect.type<B>(o);
       Expect.type<M>(o);
       Expect.equals("?&M", "$o");
@@ -241,7 +241,7 @@
   }
 
   {
-    for (var o in [CBaMO(), CBaMO_2()]) {
+    for (dynamic o in [CBaMO(), CBaMO_2()]) {
       Expect.type<B>(o);
       Expect.type<MO>(o);
       Expect.equals("B&MO", "$o");
@@ -288,7 +288,7 @@
   }
 
   {
-    for (var o in [CBaMA(), CBaMA_2()]) {
+    for (dynamic o in [CBaMA(), CBaMA_2()]) {
       Expect.type<B>(o);
       Expect.type<MA>(o);
       Expect.equals("B&MA", "$o");
diff --git a/tests/language_2/redirecting_factory_bounds_test.dart b/tests/language_2/redirecting_factory_bounds_test.dart
new file mode 100644
index 0000000..e8dbabf
--- /dev/null
+++ b/tests/language_2/redirecting_factory_bounds_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Bounds checking on redirecting factories.
+
+class Foo<T> {}
+
+class Baz<T> {}
+
+class Foobar<T> implements Foo<T> {}
+
+class Bar<
+          T // A comment to prevent dartfmt from joining the lines.
+          extends Foo<T>      //# 00: ok
+          extends Baz<Foo<T>> //# 01: compile-time error
+          extends Foobar<T>   //# 02: compile-time error
+  > {
+  Bar.named();
+  factory Bar() = Qux<T>;
+}
+
+class Qux<
+          T // A comment to prevent dartfmt from joining the lines.
+          extends Foo<T> //# 00: continued
+          extends Foo<T> //# 01: continued
+          extends Foo<T> //# 02: continued
+         > extends Bar<T> {
+  Qux() : super.named();
+}
+
+
+
+class A<T extends int> {
+  factory A() = B<
+                  T // A comment to prevent dartfmt from joining the lines.
+                  , int //# 03: compile-time error
+                  , String //# 04: ok
+                 >;
+}
+
+class B<T extends int
+        , S extends String //# 03: continued
+        , S extends String //# 04: continued
+       > implements A<T> {}
+
+void main() {
+  new Bar<Null>();
+  new A<int>();
+}
diff --git a/tests/language_2/switch_case_test.dart b/tests/language_2/switch_case_test.dart
index 52128d4..736ec30 100644
--- a/tests/language_2/switch_case_test.dart
+++ b/tests/language_2/switch_case_test.dart
@@ -17,19 +17,19 @@
   operator ==(o) => true; // //# 00: compile-time error
 }
 
-class C implements A {
+class C implements D {
   final int x;
   const C() : x = 0;
   const C.fromD() : x = 1;
 }
 
-class D implements C {
+class D implements A {
   int get x => 0;
   const factory D() = C.fromD;
 }
 
 main() {
-  switch (new B()) { 
+  switch (new B()) {
     case const A.B(): Expect.fail("bad switch"); break; // //# 00: continued
   }
 
diff --git a/tests/language_2/type_variable_conflict_test.dart b/tests/language_2/type_variable_conflict_test.dart
index 06cd2f7..5242b0d 100644
--- a/tests/language_2/type_variable_conflict_test.dart
+++ b/tests/language_2/type_variable_conflict_test.dart
@@ -8,27 +8,35 @@
 import "package:expect/expect.dart";
 
 class G1<T> {
-  var T; // //# 01: compile-time error
+  var T; //              //# 01: compile-time error
 }
 
 class G2<T> {
-  get T {} // //# 02: compile-time error
+  get T {} //            //# 02: compile-time error
 }
 
 class G3<T> {
-  T() {} // //# 03: compile-time error
+  T() {} //              //# 03: compile-time error
 }
 
 class G4<T> {
-  static var T; // //# 04: compile-time error
+  static var T; //       //# 04: compile-time error
 }
 
 class G5<T> {
-  static get T {} // //# 05: compile-time error
+  static get T {} //     //# 05: compile-time error
 }
 
 class G6<T> {
-  static T() {} // //# 06: compile-time error
+  static T() {} //       //# 06: compile-time error
+}
+
+class G7<T> {
+  set T(_) {} //         //# 07: compile-time error
+}
+
+class G8<T> {
+  static set T(x) {} //  //# 08: compile-time error
 }
 
 main() {
@@ -38,4 +46,6 @@
   new G4<int>();
   new G5<int>();
   new G6<int>();
+  new G7<int>();
+  new G8<int>();
 }
diff --git a/tests/language_2/type_variable_scope_test.dart b/tests/language_2/type_variable_scope_test.dart
index b219b29..fc53e58 100644
--- a/tests/language_2/type_variable_scope_test.dart
+++ b/tests/language_2/type_variable_scope_test.dart
@@ -4,7 +4,7 @@
 
 // Test that type variables referenced from within static members are malformed.
 
-class Foo<T> {
+class Foo<T> implements I<T> {
   Foo() {}
 
   static
diff --git a/tests/language_2/vm/regress_34466_test.dart b/tests/language_2/vm/regress_34466_test.dart
new file mode 100644
index 0000000..69b237f
--- /dev/null
+++ b/tests/language_2/vm/regress_34466_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test NaN comparison (dartbug.com/34466 and dartbug.com/34467).
+
+// VMOptions=--no_background_compilation --optimization_counter_threshold=10
+
+import "package:expect/expect.dart";
+
+double dvar = double.nan;
+
+int doit() {
+  if (!(((-84).toDouble() <= double.nan))) {
+    return 1;
+  } else {
+    return 2;
+  }
+}
+
+doTests() {
+  Expect.isFalse(dvar > dvar);
+  Expect.isFalse(dvar < dvar);
+  Expect.isFalse(dvar <= dvar);
+  Expect.isFalse(dvar >= dvar);
+  Expect.isFalse(dvar > -dvar);
+  Expect.isFalse(-dvar > dvar);
+
+  Expect.isTrue(!(dvar > dvar));
+  Expect.isTrue(!(dvar < dvar));
+  Expect.isTrue(!(dvar <= dvar));
+  Expect.isTrue(!(dvar >= dvar));
+  Expect.isTrue(!(dvar > -dvar));
+  Expect.isTrue(!(-dvar > dvar));
+
+  Expect.equals(1, doit());
+
+  Expect.isFalse(dvar == dvar);
+  Expect.isFalse(dvar == -dvar);
+  Expect.isTrue(dvar != dvar);
+  Expect.isTrue(dvar != -dvar);
+
+  Expect.isTrue(!(dvar == dvar));
+  Expect.isTrue(!(dvar == -dvar));
+  Expect.isFalse(!(dvar != dvar));
+  Expect.isFalse(!(dvar != -dvar));
+}
+
+void main() {
+  for (int i = 0; i < 20; ++i) {
+    doTests();
+  }
+}
diff --git a/tests/language_2/vm/regress_flutter_21957_test.dart b/tests/language_2/vm/regress_flutter_21957_test.dart
new file mode 100644
index 0000000..69db3a5
--- /dev/null
+++ b/tests/language_2/vm/regress_flutter_21957_test.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests how nullability is inferred for a final field which is implicitly
+// initialized to null. This is a regression test for
+// https://github.com/flutter/flutter/issues/21957.
+
+// VMOptions=--no_background_compilation --optimization_counter_threshold=10
+
+import "package:expect/expect.dart";
+
+class A {}
+
+class X {
+  final A f;
+  X.empty() : f = null;
+  X.full() : f = A();
+}
+
+bool doit(bool choice) {
+  X x = choice ? X.full() : X.empty();
+  return x.f == null;
+}
+
+class Y {
+  final A f;
+  Y.c0() : f = A();
+  Y.c1() : f = null;
+  Y.c2() : f = A();
+}
+
+bool doit2(int choice) {
+  Y y;
+  switch (choice) {
+    case 0:
+      y = new Y.c0();
+      break;
+    case 1:
+      y = new Y.c1();
+      break;
+    case 2:
+      y = new Y.c2();
+      break;
+  }
+  return y.f == null;
+}
+
+void main() {
+  for (int i = 0; i < 100; i++) {
+    bool ping = (i & 1) == 0;
+    bool result = doit(ping);
+    Expect.equals(result, !ping);
+
+    bool result2 = doit2(i % 3);
+    Expect.equals(result2, (i % 3) != 0 && (i % 3) != 2);
+  }
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 2af6884..7be5f14 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -2,467 +2,4 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-[ $arch == simarm64 ]
-convert/utf85_test: Skip # Pass, Slow Issue 20111.
-
-[ $arch == simarmv5te ]
-mirrors/mirrors_reader_test: Pass, Slow
-
-[ $compiler == app_jit ]
-mirrors/*: Skip # Issue 27929: Triage
-
-[ $compiler == dart2analyzer ]
-*: Skip
-
-[ $compiler == dart2js ]
-async/async_await_sync_completer_test: RuntimeError # sync-async is on by default.
-async/schedule_microtask6_test: RuntimeError # global error handling is not supported. Issue 5958
-convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
-convert/chunked_conversion_utf88_test: Slow, Pass
-convert/utf82_test: CompileTimeError # Large integer literal. Not valid in dart2.
-convert/utf85_test: Slow, Pass
-developer/timeline_test: Skip # Not supported
-math/double_pow_test: RuntimeError
-math/low_test: RuntimeError
-mirrors/*: SkipByDesign # mirrors not supported
-mirrors/class_declarations_test/none: RuntimeError # Issue 13440
-mirrors/class_mirror_location_test: RuntimeError # Issue 6490
-mirrors/closurization_equivalence_test: RuntimeError # Issue 6490
-mirrors/fake_function_with_call_test: RuntimeError # Issue 11612
-mirrors/fake_function_without_call_test: RuntimeError # Issue 11612
-mirrors/generic_f_bounded_mixin_application_test: RuntimeError # Issue 12087
-mirrors/generic_function_typedef_test: RuntimeError # Issue 12333
-mirrors/generic_interface_test: RuntimeError # Issue 12087
-mirrors/get_field_static_test/00: RuntimeError # Issue 21323
-mirrors/globalized_closures2_test/00: RuntimeError # Issue 17118. Please remove the multi-test comments when this test starts succeeding.
-mirrors/globalized_closures_test/00: RuntimeError # Issue 17118. Please remove the multi-test comments when this test starts succeeding.
-mirrors/hierarchy_invariants_test: RuntimeError # Issue 15262
-mirrors/hot_get_field_test: CompileTimeError # Issue 12164
-mirrors/hot_set_field_test: CompileTimeError # Issue 12164
-mirrors/immutable_collections_test: RuntimeError # Issue 14030
-mirrors/initializing_formals_test/01: RuntimeError # Issue 6490
-mirrors/initializing_formals_test/03: CompileTimeError # Issue 12164
-mirrors/instance_members_test: RuntimeError # Issue 14633
-mirrors/instantiate_abstract_class_test: RuntimeError # Issue 6490
-mirrors/invocation_fuzz_test: RuntimeError # Issue 29086
-mirrors/invoke_call_on_closure_test: RuntimeError # 6490
-mirrors/invoke_call_through_getter_previously_accessed_test/named: RuntimeError # Issue 12863. When updating the status, remove the "///" in the test.
-mirrors/invoke_call_through_getter_test/named: RuntimeError # Issue 12863. When updating the status, remove the "///" in the test.
-mirrors/invoke_call_through_implicit_getter_previously_accessed_test/named: RuntimeError # Issue 12863. When updating the status, remove the "///" in the test.
-mirrors/invoke_call_through_implicit_getter_test: RuntimeError # Issue 17638
-mirrors/invoke_named_test/none: RuntimeError # Issue 12863
-mirrors/invoke_private_test: CompileTimeError # Issue 12164
-mirrors/invoke_private_wrong_library_test: CompileTimeError # Issue 12164
-mirrors/library_declarations_test/none: RuntimeError # Issue 13439, Issue 13733
-mirrors/library_exports_hidden_test: RuntimeError # Issue 6490
-mirrors/library_exports_shown_test: RuntimeError # Issue 6490
-mirrors/library_import_deferred_loading_test: RuntimeError # Issue 6490
-mirrors/library_imports_bad_metadata_test/none: RuntimeError # Issue 6490
-mirrors/library_imports_deferred_test: RuntimeError # Issue 6490
-mirrors/library_imports_hidden_test: RuntimeError # Issue 6490
-mirrors/library_imports_metadata_test: RuntimeError # Issue 6490
-mirrors/library_imports_prefixed_show_hide_test: RuntimeError # Issue 6490
-mirrors/library_imports_prefixed_test: RuntimeError # Issue 6490
-mirrors/library_imports_shown_test: RuntimeError # Issue 6490
-mirrors/library_uri_io_test: SkipByDesign # Uses dart:io.
-mirrors/load_library_test: RuntimeError # Issue 6335
-mirrors/local_function_is_static_test: RuntimeError # Issue 6335
-mirrors/lru_test: Skip # dart2js_native/lru_test is used instead
-mirrors/metadata_scope_test/none: RuntimeError # Issue 10905
-mirrors/method_mirror_location_test: RuntimeError # Issue 6490
-mirrors/method_mirror_name_test: RuntimeError # Issue 6335
-mirrors/method_mirror_properties_test: RuntimeError # Issue 11861
-mirrors/method_mirror_source_line_ending_test: RuntimeError # Issue 6490
-mirrors/method_mirror_source_test: RuntimeError # Issue 6490
-mirrors/mirrors_nsm_mismatch_test: RuntimeError # Issue 19353
-mirrors/mirrors_nsm_test/dart2js: RuntimeError # Issue 19353
-mirrors/mirrors_reader_test: Slow, RuntimeError # Issue 16589
-mirrors/mirrors_test: RuntimeError # TODO(ahe): I'm working on fixing this. When removing this line please change the "endsWith" to "/mirrors_test.dart".
-mirrors/mixin_application_test: RuntimeError # Issue 12464
-mirrors/mixin_test: RuntimeError # Issue 12464
-mirrors/other_declarations_location_test: RuntimeError # Issue 10905
-mirrors/parameter_of_mixin_app_constructor_test: RuntimeError # Issue 6490
-mirrors/parameter_test/none: RuntimeError # Issue 6490
-mirrors/private_class_field_test: CompileTimeError
-mirrors/private_symbol_test: CompileTimeError # Issue 13597
-mirrors/private_types_test: RuntimeError # Issue 6490
-mirrors/raw_type_test/01: RuntimeError # Issue 6490
-mirrors/redirecting_factory_test/02: RuntimeError # Issue 6490
-mirrors/redirecting_factory_test/none: RuntimeError # Issue 6490
-mirrors/reflected_type_function_type_test: RuntimeError # Issue 12607
-mirrors/reflected_type_generics_test/01: Fail # Issues in reflecting generic typedefs.
-mirrors/reflected_type_generics_test/02: Fail # Issues in reflecting bounded type variables.
-mirrors/reflected_type_generics_test/03: Fail # Issues in reflecting generic typedefs. The following tests fail because we have disabled a test in `reflectClassByName`. `MirrorsUsed` leads to classes not having the information necessary to correctly handle these checks.
-mirrors/reflected_type_generics_test/04: Fail # Issues in reflecting bounded type variables. The following tests fail because we have disabled a test in `reflectClassByName`. `MirrorsUsed` leads to classes not having the information necessary to correctly handle these checks.
-mirrors/reflected_type_generics_test/05: Fail # Issues in reflecting generic typedefs. The following tests fail because we have disabled a test in `reflectClassByName`. `MirrorsUsed` leads to classes not having the information necessary to correctly handle these checks.
-mirrors/reflected_type_generics_test/06: Fail # Issues in reflecting bounded type variables. The following tests fail because we have disabled a test in `reflectClassByName`. `MirrorsUsed` leads to classes not having the information necessary to correctly handle these checks.
-mirrors/reflected_type_special_types_test: RuntimeError # Issue 12607
-mirrors/reflected_type_typedefs_test: RuntimeError # Issue 12607
-mirrors/reflected_type_typevars_test: RuntimeError # Issue 12607
-mirrors/regress_26187_test: RuntimeError # Issue 6490
-mirrors/relation_assignable2_test: RuntimeError # Issue 6490
-mirrors/relation_assignable_test: RuntimeError # Issue 6490
-mirrors/relation_subtype_test: RuntimeError # Issue 6490
-mirrors/repeated_private_anon_mixin_app_test: RuntimeError # Issue 14670
-mirrors/static_members_test: RuntimeError # Issue 14633, Issue 12164
-mirrors/symbol_validation_test/01: RuntimeError # Issue 13597
-mirrors/type_variable_is_static_test: RuntimeError # Issue 6335
-mirrors/type_variable_owner_test/01: RuntimeError # Issue 12785
-mirrors/typedef_metadata_test: RuntimeError # Issue 12785
-mirrors/typedef_reflected_type_test/01: RuntimeError # Issue 12607
-mirrors/typedef_test: RuntimeError # Issue 6490
-mirrors/typevariable_mirror_metadata_test: RuntimeError # Issue 10905
-mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
-profiler/metrics_num_test: Skip # Because of a int / double type test.
-typed_data/int32x4_bigint_test: Pass
-typed_data/int64_list_load_store_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
-typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
-
-[ $compiler == fasta ]
-mirrors/metadata_allowed_values_test/02: MissingCompileTimeError
-mirrors/metadata_allowed_values_test/27: MissingCompileTimeError
-mirrors/metadata_constructor_arguments_test/04: MissingCompileTimeError
-
-[ $compiler == precompiler ]
-convert/chunked_conversion_utf88_test: Pass, Timeout
-convert/utf85_test: Pass, Timeout
-mirrors/*: SkipByDesign
-
-[ $mode == product ]
-developer/timeline_test: Skip # Not supported
-
-[ $runtime == ff ]
-convert/streamed_conversion_utf8_decode_test: Pass, Slow # Issue 12029, FF setTimeout can fire early: https://bugzilla.mozilla.org/show_bug.cgi?id=291386
-convert/utf85_test: SkipSlow
-mirrors/mirrors_reader_test: Timeout, Slow, RuntimeError # Issue 16589, FF setTimeout can fire early: https://bugzilla.mozilla.org/show_bug.cgi?id=291386
-
-[ $runtime == flutter ]
-async/catch_errors11_test: Skip # Flutter Issue 9113
-async/intercept_schedule_microtask2_test: Skip # Flutter Issue 9113
-async/intercept_schedule_microtask5_test: Skip # Flutter Issue 9113
-async/intercept_schedule_microtask6_test: Skip # Flutter Issue 9113
-async/stream_empty_test: Skip # Flutter Issue 9113
-async/stream_event_transformed_test: Skip # Flutter Issue 9113
-mirrors/*: Skip # Flutter does not support mirrors.
-
-[ $runtime == none ]
-convert/html_escape_test: CompileTimeError # Uppercase constants removed
-
-[ $runtime != none ]
-async/stream_controller_async_test: RuntimeError # Library changed.
-async/stream_empty_test: RuntimeError # Uppercase constants removed
-async/stream_from_iterable_test: RuntimeError # Library changed.
-async/stream_iterator_test: RuntimeError # Uppercase constants removed
-async/stream_listen_zone_test: RuntimeError # Uppercase constants removed
-async/zone_bind_callback_test: RuntimeError # Uppercase constants removed
-async/zone_bind_callback_unary_test: RuntimeError # Uppercase constants removed
-async/zone_bind_test: RuntimeError # Uppercase constants removed
-async/zone_create_periodic_timer_test: RuntimeError # Uppercase constants removed
-async/zone_create_timer2_test: RuntimeError # Uppercase constants removed
-async/zone_create_timer_test: RuntimeError # Uppercase constants removed
-async/zone_debug_test: RuntimeError # Uppercase constants removed
-async/zone_empty_description2_test: RuntimeError # Uppercase constants removed
-async/zone_empty_description_test: RuntimeError # Uppercase constants removed
-async/zone_fork_test: RuntimeError # Uppercase constants removed
-async/zone_register_callback_test: RuntimeError # Uppercase constants removed
-async/zone_register_callback_unary_test: RuntimeError # Uppercase constants removed
-async/zone_root_bind_test: RuntimeError # Uppercase constants removed
-async/zone_run_guarded_test: RuntimeError # Uppercase constants removed
-async/zone_run_test: RuntimeError # Uppercase constants removed
-async/zone_run_unary_test: RuntimeError # Uppercase constants removed
-async/zone_value_test: RuntimeError # Uppercase constants removed
-convert/ascii_test: RuntimeError # Uppercase constants removed
-convert/base64_test/none: RuntimeError # Uppercase constants removed
-convert/chunked_conversion_json_decode1_test: RuntimeError # Uppercase constants removed
-convert/chunked_conversion_utf85_test: RuntimeError # Uppercase constants removed
-convert/chunked_conversion_utf87_test: RuntimeError # Uppercase constants removed
-convert/chunked_conversion_utf88_test: RuntimeError # Uppercase constants removed
-convert/codec2_test: RuntimeError # Uppercase constants removed
-convert/encoding_test: RuntimeError # Uppercase constants removed
-convert/html_escape_test: CompileTimeError # Uppercase constants removed
-convert/json_chunk_test: RuntimeError # Uppercase constants removed
-convert/json_lib_test: RuntimeError # Uppercase constants removed
-convert/json_pretty_test: RuntimeError # Uppercase constants removed
-convert/json_test: RuntimeError # Uppercase constants removed
-convert/json_util_test: RuntimeError # Uppercase constants removed
-convert/latin1_test: RuntimeError # Uppercase constants removed
-convert/line_splitter_test: RuntimeError # Uppercase constants removed
-convert/streamed_conversion_json_encode1_test: RuntimeError # Uppercase constants removed
-convert/streamed_conversion_json_utf8_decode_test: RuntimeError # Uppercase constants removed
-convert/streamed_conversion_json_utf8_encode_test: RuntimeError # Uppercase constants removed
-convert/streamed_conversion_utf8_decode_test: RuntimeError # Uppercase constants removed
-convert/streamed_conversion_utf8_encode_test: RuntimeError # Uppercase constants removed
-convert/utf83_test: RuntimeError # Uppercase constants removed
-convert/utf84_test: RuntimeError # Uppercase constants removed
-convert/utf85_test: RuntimeError # Uppercase constants removed
-convert/utf8_encode_test: RuntimeError # Uppercase constants removed
-convert/utf8_test: RuntimeError # Uppercase constants removed
-math/math2_test: RuntimeError # Uppercase constants removed
-math/math_parse_double_test: RuntimeError # Uppercase constants removed
-math/math_test: RuntimeError # Uppercase constants removed
-mirrors/invocation_fuzz_test/emptyarray: RuntimeError # Uppercase constants removed
-mirrors/invocation_fuzz_test/false: RuntimeError # Uppercase constants removed
-mirrors/invocation_fuzz_test/none: RuntimeError # Uppercase constants removed
-mirrors/invocation_fuzz_test/smi: RuntimeError # Uppercase constants removed
-mirrors/invocation_fuzz_test/string: RuntimeError # Uppercase constants removed
-typed_data/endianness_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_cross_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_list_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_shuffle_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_transpose_test: RuntimeError # Uppercase constants removed
-typed_data/float32x4_two_arg_shuffle_test: RuntimeError # Uppercase constants removed
-typed_data/int32x4_shuffle_test: RuntimeError # Uppercase constants removed
-
-[ $runtime == safari ]
-convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
-typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-
-[ $runtime == vm ]
-convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
-
-[ !$checked ]
-mirrors/redirecting_factory_different_type_test: SkipByDesign # Tests type checks.
-
-[ $fasta ]
-convert/base64_test/01: CompileTimeError
-math/double_pow_test: CompileTimeError
-mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
-mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
-mirrors/metadata_nested_constructor_call_test/03: MissingCompileTimeError
-mirrors/metadata_nested_constructor_call_test/04: MissingCompileTimeError
-mirrors/native_class_test: CompileTimeError
-mirrors/variable_is_const_test/01: MissingCompileTimeError
-typed_data/int32x4_bigint_test: CompileTimeError
-
-[ $hot_reload ]
-async/timer_regress22626_test: Pass, RuntimeError # Timing dependent.
-mirrors/generic_bounded_by_type_parameter_test/02: Fail # Type equality - Issue 26869
-mirrors/generic_bounded_test/02: Fail # Type equality - Issue 26869
-
-[ $strong ]
-*: SkipByDesign # tests/lib_2 has the strong mode versions of these tests.
-
-[ $arch == arm64 && $runtime == vm ]
-mirrors/immutable_collections_test: Pass, Slow # http://dartbug.com/33057
-
-[ $arch == ia32 && $mode == debug && $system == windows ]
-convert/streamed_conversion_json_utf8_decode_test: Skip # Verification OOM.
-
-[ $arch != ia32 && $arch != simarm && $arch != simarmv5te && $arch != simarmv6 && $arch != x64 && $mode == debug ]
-convert/streamed_conversion_json_utf8_decode_test: Skip # Verification not yet implemented.
-
-[ $arch == x64 && $mode == debug && $system == windows && ($runtime == dart_precompiled || $runtime == vm) ]
-convert/streamed_conversion_json_utf8_decode_test: Pass, Slow
-
-[ $builder_tag == asan && $mode == debug && ($runtime == dart_precompiled || $runtime == vm) ]
-convert/streamed_conversion_json_utf8_decode_test: Skip # Timeout.
-mirrors/immutable_collections_test: SkipSlow # Timeout.
-
-[ $builder_tag == mac10_7 && $runtime == safari ]
-typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_4_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-
-[ $compiler == dart2js && $mode == debug ]
-mirrors/native_class_test: Pass, Slow
-
-[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-typed_data/setRange_2_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
-typed_data/setRange_3_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
-
-[ $compiler == dart2js && $runtime == d8 && $system == windows ]
-async/*deferred*: Pass, RuntimeError # Issue 17458
-mirrors/*deferred*: Pass, RuntimeError # Issue 17458
-
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
-js/null_test: RuntimeError
-
-[ $compiler == dart2js && $runtime == ie11 ]
-math/math2_test: RuntimeError
-math/math_test: RuntimeError
-
-[ $compiler == dart2js && $runtime == jsshell ]
-async/catch_errors12_test: Fail # Timer interface not supported: Issue 7728.
-async/catch_errors13_test: Fail # Timer interface not supported: Issue 7728.
-async/catch_errors14_test: Fail # Timer interface not supported: Issue 7728.
-async/catch_errors15_test: Fail # Timer interface not supported: Issue 7728.
-async/catch_errors22_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/catch_errors8_test: Fail # Timer interface not supported: Issue 7728.
-async/future_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_asyncexpand_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/stream_asyncmap_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/stream_controller_async_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_controller_test: Fail # Timer interface not supported: Issue 7728.
-async/stream_from_iterable_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic2_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic3_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic4_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic5_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic6_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_periodic_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_state_nonzero_timer_test: RuntimeError # Timer interface not supported; Issue 7728.
-async/stream_subscription_cancel_test: Fail # Timer interface not supported: Issue 7728.
-async/stream_take_test: Fail # Timer interface not supported: Issue 7728.
-async/stream_timeout_test: Fail # Timer interface not supported: Issue 7728.
-async/stream_transformation_broadcast_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/timer_cancel1_test: RuntimeError, OK # Needs Timer to run.
-async/timer_cancel2_test: RuntimeError, OK # Needs Timer to run.
-async/timer_cancel_test: RuntimeError, OK # Needs Timer to run.
-async/timer_isActive_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/timer_regress22626_test: RuntimeError # Non-zero timers not supported; Issue 7728.
-async/timer_repeat_test: RuntimeError, OK # Needs Timer to run.
-async/timer_test: RuntimeError, OK # Needs Timer to run.
-async/zone_bind_test: Fail # Timer interface not supported: Issue 7728.
-async/zone_create_periodic_timer_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/zone_create_timer2_test: RuntimeError # Timer interface not supported: Issue 7728.
-async/zone_empty_description2_test: RuntimeError # Timer interface not supported: Issue 7728.
-mirrors/mirrors_reader_test: Skip # Running in v8 suffices. Issue 16589 - RuntimeError.  Issue 22130 - Crash (out of memory).
-
-[ $compiler == dart2js && $checked ]
-convert/utf85_test: Pass, Slow # Issue 12029.
-
-[ $compiler == dart2js && $checked && $fast_startup && $minified ]
-async/stream_listen_zone_test: RuntimeError
-
-[ $compiler == dart2js && $checked && $host_checked ]
-async/stream_listen_zone_test: RuntimeError
-
-[ $compiler == dart2js && $fast_startup ]
-mirrors/*: Fail # mirrors not supported
-mirrors/library_imports_bad_metadata_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/library_metadata2_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_allowed_values_test/0*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_allowed_values_test/1*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_allowed_values_test/2*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_allowed_values_test/3*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_constructor_arguments_test/0*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_nested_constructor_call_test/0*: Pass # expects failure, but it fails for the wrong reason
-mirrors/metadata_scope_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/mirror_in_static_init_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/model_test: Pass # this is ok
-mirrors/parameter_is_const_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
-mirrors/syntax_error_test/01: Pass # expects failure, but it fails for the wrong reason
-mirrors/variable_is_const_test/01: Pass # expects failure, but it fails for the wrong reason
-
-[ $compiler == dart2js && $host_checked ]
-async/stream_controller_async_test: Crash
-mirrors/metadata_allowed_values_test/28: Crash # Issue 25911
-mirrors/metadata_allowed_values_test/29: Crash # Issue 25911
-mirrors/metadata_allowed_values_test/30: Crash # Issue 25911
-mirrors/metadata_allowed_values_test/31: Crash # Issue 25911
-
-[ $compiler == dart2js && $minified ]
-mirrors/mirrors_used_get_name2_test: RuntimeError
-mirrors/mirrors_used_get_name_test: RuntimeError
-
-[ $compiler == dart2js && ($runtime == d8 || $browser) ]
-async/timer_not_available_test: Fail, OK # only meant to test when there is no way to implement timer (currently only in jsshell)
-
-[ $compiler != dart2js && $fasta ]
-convert/utf82_test: CompileTimeError # Note: dart2js passes for the wrong reason, it hasn't switched to run in 64-bits
-js/datetime_roundtrip_test: CompileTimeError
-js/null_test: CompileTimeError
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-mirrors/initializing_formals_test/01: Fail # initializing formals are implicitly final as of Dart 1.21
-
-[ $compiler == none && $mode == product ]
-mirrors/library_enumeration_deferred_loading_test: RuntimeError, OK # Deferred loaded eagerly
-mirrors/library_import_deferred_loading_test: RuntimeError, OK # Deferred loaded eagerly
-mirrors/load_library_test: RuntimeError, OK # Deferred loaded eagerly
-
-[ $compiler == none && !$checked ]
-mirrors/reflected_type_generics_test/02: Fail, OK # Type check for a bounded type argument.
-
-[ $runtime == chrome && $system == linux ]
-mirrors/native_class_test: Pass, Slow
-
-[ $runtime == chrome && $system == macos ]
-async/catch_errors11_test: Pass, Timeout # Issue 22696
-async/timer_isActive_test: Fail, Pass, Timeout # Issue 22696
-
-[ $runtime != none && !$strong ]
-async/stream_first_where_test: RuntimeError
-async/stream_last_where_test: RuntimeError
-
-[ $runtime == vm && $system == fuchsia ]
-async/first_regression_test: RuntimeError # These use package:unittest
-async/future_timeout_test: RuntimeError # These use package:unittest
-async/multiple_timer_test: RuntimeError # These use package:unittest
-async/stream_controller_async_test: RuntimeError # These use package:unittest
-async/stream_first_where_test: RuntimeError # These use package:unittest
-async/stream_from_iterable_test: RuntimeError # These use package:unittest
-async/stream_iterator_test: RuntimeError # These use package:unittest
-async/stream_join_test: RuntimeError # These use package:unittest
-async/stream_last_where_test: RuntimeError # These use package:unittest
-async/stream_periodic2_test: RuntimeError # These use package:unittest
-async/stream_periodic3_test: RuntimeError # These use package:unittest
-async/stream_periodic4_test: RuntimeError # These use package:unittest
-async/stream_periodic5_test: RuntimeError # These use package:unittest
-async/stream_periodic6_test: RuntimeError # These use package:unittest
-async/stream_periodic_test: RuntimeError # These use package:unittest
-async/stream_single_test: RuntimeError # These use package:unittest
-async/stream_single_to_multi_subscriber_test: RuntimeError # These use package:unittest
-async/stream_state_nonzero_timer_test: RuntimeError # These use package:unittest
-async/stream_state_test: RuntimeError # These use package:unittest
-async/stream_subscription_as_future_test: RuntimeError # These use package:unittest
-async/stream_subscription_cancel_test: RuntimeError # These use package:unittest
-async/stream_timeout_test: RuntimeError # These use package:unittest
-async/stream_transform_test: RuntimeError # These use package:unittest
-async/stream_transformation_broadcast_test: RuntimeError # These use package:unittest
-async/timer_cancel1_test: RuntimeError # These use package:unittest
-async/timer_cancel2_test: RuntimeError # These use package:unittest
-async/timer_cancel_test: RuntimeError # These use package:unittest
-async/timer_isActive_test: RuntimeError # These use package:unittest
-async/timer_repeat_test: RuntimeError # These use package:unittest
-async/timer_test: RuntimeError # These use package:unittest
-convert/json_lib_test: RuntimeError # These use package:unittest
-mirrors/invocation_fuzz_test: Crash # fstat bug, ZX-479.
-mirrors/library_uri_io_test: RuntimeError # These use package:unittest
-mirrors/library_uri_package_test: RuntimeError # These use package:unittest
-
-[ $arch == simarm || $arch == simarmv5te || $arch == simarmv6 ]
-convert/chunked_conversion_utf88_test: Skip # Pass, Slow Issue 12644.
-convert/utf85_test: Skip # Pass, Slow Issue 12644.
-
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-async/timer_not_available_test: SkipByDesign # only meant to test when there is no way to implement timer (currently only in d8)
-async/timer_regress22626_test: Pass, RuntimeError # Issue 28254
-mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
-mirrors/symbol_validation_test: RuntimeError # Issue 13596
-
-# All these tests have been migrated as strong mode compatible tests to
-# lib_2, so skipping these tests for dartk and dartkp
-[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
-*: SkipByDesign
-
-[ $runtime == chrome || $runtime == ff ]
-async/stream_timeout_test: SkipSlow # Times out. Issue 22050
-convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Times out. Issue 22050
-convert/streamed_conversion_json_utf8_encode_test: SkipSlow # Times out. Issue 22050
-convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
-convert/streamed_conversion_utf8_encode_test: SkipSlow # Times out. Issue 22050
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
-async/timer_not_available_test: Fail, OK
-convert/base64_test/01: CompileTimeError # Large integer literal
-convert/json_utf8_chunk_test: RuntimeError # Large integers
-convert/utf82_test: CompileTimeError # Large integer literal
-js/*: Skip
-math/double_pow_test: CompileTimeError # Large integer literal
-mirrors/deferred_type_test: CompileTimeError, OK # Don't have a multitest marker for dynamic compile time errors.
-mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
-typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
-
-[ $hot_reload || $hot_reload_rollback ]
-async/stream_transformer_test: Pass, Fail # Closure identity
-mirrors/fake_function_with_call_test: SkipByDesign # Method equality
-mirrors/library_enumeration_deferred_loading_test: Crash # Deferred loading
-mirrors/library_import_deferred_loading_test: Crash # Deferred loading
-mirrors/library_imports_deferred_test: Crash # Deferred loading
-mirrors/load_library_test: Crash # Deferred loading
-mirrors/typedef_deferred_library_test: Crash # Deferred loading
+*: SkipByDesign # Deprecating Dart1 tests.
diff --git a/tests/lib_2/async/stream_distinct_test.dart b/tests/lib_2/async/stream_distinct_test.dart
index d7ca53b..bc642d4 100644
--- a/tests/lib_2/async/stream_distinct_test.dart
+++ b/tests/lib_2/async/stream_distinct_test.dart
@@ -120,7 +120,7 @@
       other is T && ((other.value == 2) ? throw 2 : (value == other.value));
 }
 
-final reifyErrors =
+StreamTransformer reifyErrors =
     new StreamTransformer.fromHandlers(handleError: (e, s, sink) {
   sink.add("[$e]");
 });
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index ac45d22..f1d2f76 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -165,9 +165,6 @@
 async/multiple_timer_test: Pass, Fail # Timing related
 isolate/issue_24243_parent_isolate_test: SkipByDesign # Requires type checks.
 
-[ !$fasta && $strong ]
-mirrors/redirecting_factory_test: CompileTimeError # Issue 30855
-
 [ !$fasta && !$strong ]
 isolate/isolate_import_test/01: MissingCompileTimeError
 mirrors/top_level_accessors_test/01: MissingCompileTimeError
@@ -175,6 +172,9 @@
 typed_data/int32x4_static_test/01: MissingCompileTimeError
 typed_data/int32x4_static_test/02: MissingCompileTimeError
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 [ ($compiler != precompiler || $runtime != dart_precompiled) && ($runtime != vm || $compiler != dartk && $compiler != none) ]
 isolate/vm_rehash_test: SkipByDesign
 
diff --git a/tests/lib_2/lib_2_analyzer.status b/tests/lib_2/lib_2_analyzer.status
index a521c69..165b9a3 100644
--- a/tests/lib_2/lib_2_analyzer.status
+++ b/tests/lib_2/lib_2_analyzer.status
@@ -12,6 +12,4 @@
 mirrors/mirrors_nsm_mismatch_test: CompileTimeError, OK
 mirrors/mirrors_nsm_test: CompileTimeError, OK
 mirrors/mirrors_nsm_test/dart2js: CompileTimeError, OK
-mirrors/redirecting_factory_test/01: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>'
-mirrors/redirecting_factory_test/none: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>
 mirrors/repeated_private_anon_mixin_app_test: CompileTimeError, OK # Intentional library name conflict.
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 2c1250c..8bdc706 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -26,6 +26,7 @@
 html/*: Skip # TODO(ahe): Make dart:html available.
 isolate/browser/*: Skip # TODO(ahe): Make dart:html available.
 js/*: Skip # TODO(ahe): Make dart:js available.
+mirrors/repeated_private_anon_mixin_app_test: CompileTimeError # Two libraries with same name inported.
 
 [ $fasta ]
 mirrors/deferred_constraints_constants_test/default_argument2: MissingCompileTimeError
@@ -35,6 +36,8 @@
 mirrors/generic_interface_test/01: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
+mirrors/redirecting_factory_test/01: CompileTimeError # Issue 33308
+mirrors/redirecting_factory_test/none: CompileTimeError # Issue 33308
 
 [ $arch == simarm64 && $strong && ($compiler == dartk || $compiler == dartkb) ]
 isolate/mint_maker_test: Timeout # Please triage.
@@ -65,6 +68,16 @@
 isolate/browser/package_resolve_browser_hook_test: CompileTimeError
 isolate/browser/package_resolve_browser_test: CompileTimeError
 
+# The failures below still need to be investigated and possibly fixed, or marked as skipped.
+[ $compiler == dartkb && $strong ]
+convert/streamed_conversion_json_utf8_decode_test: Pass, Timeout # Please triage.
+io/file_lock_test: Pass, Timeout # Please triage.
+isolate/isolate_complex_messages_test: Pass, Crash # Non-canonical type arguments.
+isolate/mandel_isolate_test: Pass, Timeout, Crash # Please triage.
+isolate/spawn_uri_exported_main_test: Pass, RuntimeError # Please triage.
+mirrors/library_uri_io_test: RuntimeError # Platform.script points to dill file.
+mirrors/method_mirror_location_test: Crash # runtime/lib/mirrors.cc: 1634: error: expected: token_pos != TokenPosition::kNoSource
+
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
 isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
 
@@ -98,8 +111,6 @@
 mirrors/mirrors_nsm_test/dart2js: CompileTimeError
 mirrors/mirrors_nsm_test/none: CompileTimeError
 mirrors/native_class_test: CompileTimeError
-mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
-mirrors/redirecting_factory_different_type_test/02: MissingCompileTimeError
 
 [ $mode == debug && $runtime == vm && $strong && ($compiler == dartk || $compiler == dartkb) ]
 mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).
@@ -108,7 +119,6 @@
 isolate/message3_test/constList_identical: Skip # Timeout
 
 [ $runtime == vm && $checked && $strong && ($compiler == dartk || $compiler == dartkb) ]
-mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError # Issue 28424
 mirrors/redirecting_factory_different_type_test/none: RuntimeError # Issue 28424
 mirrors/reflected_type_generics_test/02: Pass
 
@@ -183,9 +193,7 @@
 mirrors/parameter_of_mixin_app_constructor_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/private_symbol_test: RuntimeError # Issue 33326 - CFE/kernel invalid typedef substitution
 mirrors/private_types_test: RuntimeError # Issue 33326 - CFE/kernel invalid typedef substitution
-mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
 mirrors/redirecting_factory_test/01: RuntimeError
-mirrors/redirecting_factory_test/02: RuntimeError
 mirrors/redirecting_factory_test/none: RuntimeError
 mirrors/reflect_class_test/none: RuntimeError
 mirrors/reflected_type_function_type_test: RuntimeError
@@ -197,7 +205,7 @@
 mirrors/relation_assignable_test: RuntimeError
 mirrors/relation_subclass_test: RuntimeError
 mirrors/relation_subtype_test: RuntimeError
-mirrors/repeated_private_anon_mixin_app_test: RuntimeError
+mirrors/repeated_private_anon_mixin_app_test: CompileTimeError # Two libraries with same name inported.
 mirrors/static_members_easier_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/static_members_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/symbol_validation_test/01: RuntimeError # Issue 31537
@@ -287,7 +295,6 @@
 mirrors/invoke_throws_test: RuntimeError
 mirrors/mixin_members_test: RuntimeError
 mirrors/operator_test: RuntimeError
-mirrors/redirecting_factory_different_type_test/02: MissingCompileTimeError
 mirrors/redirecting_factory_different_type_test/none: RuntimeError
 mirrors/redirecting_factory_reflection_test: RuntimeError
 
diff --git a/tests/lib_2/lib_2_vm.status b/tests/lib_2/lib_2_vm.status
index 8a82ed2..a652e636 100644
--- a/tests/lib_2/lib_2_vm.status
+++ b/tests/lib_2/lib_2_vm.status
@@ -34,6 +34,8 @@
 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
 mirrors/native_class_test: SkipByDesign # Imports dart:html
 mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
+mirrors/redirecting_factory_test/01: RuntimeError
+mirrors/redirecting_factory_test/none: RuntimeError
 
 [ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm && !$checked ]
 mirrors/inference_and_no_such_method_test: RuntimeError
@@ -41,6 +43,11 @@
 [ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm && $strong ]
 async/future_or_only_in_async_test/00: MissingCompileTimeError
 
+[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm && !$strong ]
+mirrors/redirecting_factory_test/02: MissingCompileTimeError
+mirrors/redirecting_factory_test/03: MissingCompileTimeError
+mirrors/redirecting_factory_test/04: MissingCompileTimeError
+
 [ $compiler != dartk && $compiler != dartkb && $runtime == vm && !$strong ]
 mirrors/reflect_class_test/01: MissingCompileTimeError
 mirrors/reflect_class_test/02: MissingCompileTimeError
diff --git a/tests/lib_2/mirrors/redirecting_factory_test.dart b/tests/lib_2/mirrors/redirecting_factory_test.dart
index 78e7fe5..2f5e47a 100644
--- a/tests/lib_2/mirrors/redirecting_factory_test.dart
+++ b/tests/lib_2/mirrors/redirecting_factory_test.dart
@@ -38,18 +38,20 @@
   factory Class.redirectingFactoryMoreUnnamedOptional(a, [b]) =
       Class<T1, T2>.factoryMoreUnnamedOptional;
 
-  factory Class.redirectingFactoryStringIntTypeParameters(a, b) =
-      Class<String, int>.factoryNoOptional;
+  factory Class.redirectingFactoryStringIntTypeParameters(a, b) = Class //
+      <String, int> //# 03: compile-time error
+      .factoryNoOptional;
 
   factory Class.redirectingFactoryStringTypeParameters(a, b) = Class //
-      <String> //# 02: static type warning
+      <String> //# 02: compile-time error
       .factoryNoOptional;
 
   factory Class.redirectingFactoryTypeParameters(a, b) =
       Class<T1, T2>.factoryNoOptional;
 
-  factory Class.redirectingFactoryReversedTypeParameters(a, b) =
-      Class<T2, T1>.factoryNoOptional;
+  factory Class.redirectingFactoryReversedTypeParameters(a, b) = Class //
+      <T2, T1> //# 04: compile-time error
+      .factoryNoOptional;
 }
 
 main() {
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index f9ab4d4..ee1bf10 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -6,93 +6,4 @@
 # listed in tests/lib/analyzer/analyze_tests.status without the "standalone"
 # prefix.
 
-# Obsolete behavior. We want to test that it fails.
-# TODO(mfairhurst) delete this test.
-isolate/scenarios/package_relative_root/package_relative_root_test: Fail
-
-[ $builder_tag == no_ipv6 ]
-io/raw_datagram_socket_test: SkipByDesign
-
-[ $compiler == dart2analyzer ]
-*: Skip
-
-# Overriding these flags are not supported in product mode.
-[ $mode == product ]
-verbose_gc_to_bmu_test: SkipByDesign # No verbose_gc in product mode
-
-[ $runtime == dart_precompiled ]
-verbose_gc_to_bmu_test: Skip # These tests attempt to spawn another script using the precompiled runtime.
-
-[ $runtime == vm ]
-verbose_gc_to_bmu_test: Skip # spawns a process which runs in Dart2 mode.
-
-[ $system == windows ]
-io/sleep_test: Pass, Fail # Issue 25757
-verbose_gc_to_bmu_test: Skip
-
-[ $builder_tag == swarming && $system == macos ]
-io/*: Skip # Issue 30618
-
-[ $compiler == fasta && $strong ]
-io/directory_invalid_arguments_test: CompileTimeError
-io/io_override_test: CompileTimeError
-io/process_invalid_arguments_test: CompileTimeError
-io/raw_secure_server_socket_argument_test: CompileTimeError
-io/raw_secure_server_socket_test: CompileTimeError
-io/secure_socket_bad_data_test: CompileTimeError
-io/security_context_argument_test: CompileTimeError
-io/stdout_bad_argument_test: CompileTimeError
-no_assert_test: CompileTimeError
-priority_queue_stress_test: CompileTimeError
-verbose_gc_to_bmu_test: CompileTimeError
-
-[ $compiler != fasta && $compiler != none && $runtime != dart_precompiled && $runtime != vm ]
-no_assert_test: Fail, OK # This is testing a vm flag.
-
-[ $compiler == none && $runtime == vm && $system == fuchsia ]
-*: Skip # Not yet triaged.
-
-[ $mode == product && $runtime == dart_precompiled ]
-dwarf_stack_trace_test: Pass, RuntimeError # Results will flake due to identical code folding
-
-[ $runtime == dart_precompiled && $system == android ]
-io/https_bad_certificate_test: RuntimeError # Issue 31310
-io/raw_datagram_socket_test: RuntimeError # Issue 31310
-io/raw_secure_server_socket_test: RuntimeError # Issue 31310
-
-[ $system == macos && ($runtime == dart_precompiled || $runtime == vm) ]
-io/raw_secure_server_socket_test: Pass, Crash # Issue 29524
-
-[ $checked && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-io/directory_fuzz_test: Skip # These test have type errors on purpose and take very long to run in checked mode with no benefit. Skip.
-io/directory_invalid_arguments_test: Fail, OK # These tests have type errors on purpose.
-io/file_fuzz_test: Skip # These test have type errors on purpose and take very long to run in checked mode with no benefit. Skip.
-io/internet_address_invalid_arguments_test: Fail, OK # These tests have type errors on purpose.
-io/process_invalid_arguments_test: Fail, OK # These tests have type errors on purpose.
-io/socket_invalid_arguments_test: Fail, OK # These tests have type errors on purpose.
-io/stdout_bad_argument_test: Fail, OK # These tests have type errors on purpose.
-
-[ $compiler == app_jit || $compiler == precompiler ]
-io/compile_all_test: Skip # Incompatible flag --compile_all
-
-# We skip all the Dart 1.0 tests in dartk and dartkp mode as these
-# modes are intended only for Dart 2.0 with strong mode enabled.
-[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
-*: SkipByDesign
-
-[ $compiler == dart2js || $compiler == dartdevc ]
-*: SkipByDesign
-
-[ $compiler != none || $runtime != vm ]
-script_snapshot_depfile_test: SkipByDesign # Only makes sense running from source.
-script_snapshot_not_executed_test: SkipByDesign # Only makes sense running from source.
-
-[ $mode == product || $runtime == dart_precompiled ]
-no_assert_test: SkipByDesign # Requires checked mode.
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
-io/secure_socket_bad_data_test: RuntimeError # An error in a secure connection just puts a READ_CLOSED on the stream, rather than signaling an error on the stream.
-
-[ $hot_reload || $hot_reload_rollback ]
-script_snapshot_depfile_test: RuntimeError, OK # Child VM doesn't execute Dart.
-script_snapshot_not_executed_test: RuntimeError, OK # Child VM doesn't execute Dart.
+*: SkipByDesign # Deprecating Dart1 tests.
diff --git a/tests/standalone_2/app_snapshot_share_test.dart b/tests/standalone_2/app_snapshot_share_test.dart
index 050f610..27b6cb2 100644
--- a/tests/standalone_2/app_snapshot_share_test.dart
+++ b/tests/standalone_2/app_snapshot_share_test.dart
@@ -37,10 +37,6 @@
       '--platform=$buildDir/vm_platform_strong.dill',
       '-o',
       scriptPathDill,
-      '--entry-points',
-      '$buildDir/gen/runtime/bin/precompiler_entry_points.json',
-      '--entry-points',
-      'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
       scriptPath,
     ];
     runSync("pkg/vm/tool/gen_kernel${Platform.isWindows ? '.bat' : ''}", args);
diff --git a/tests/standalone_2/io/code_collection_test.dart b/tests/standalone_2/io/code_collection_test.dart
index 99344df..71f36b6 100644
--- a/tests/standalone_2/io/code_collection_test.dart
+++ b/tests/standalone_2/io/code_collection_test.dart
@@ -68,13 +68,14 @@
       Platform.script.toFilePath(),
       "--run"
     ]);
+    print("+ ${Platform.executable} ${args.join(' ')}");
     var pr = Process.runSync(Platform.executable, args);
 
+    print(pr.stderr);
     Expect.equals(0, pr.exitCode);
 
     // Code drops are logged with --log-code-drop. Look through stderr for the
     // message that foo's code was dropped.
-    print(pr.stderr);
     bool saw_foo2 = false;
     bool saw_detaching_foo = false;
     bool saw_foo3 = false;
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 36b4a51..e78ae4d 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -107,6 +107,9 @@
 io/socket_connect_stream_data_close_cancel_test: Pass, Timeout # Issue 27453
 io/socket_many_connections_test: Skip # This test fails with "Too many open files" on the Mac OS buildbot. This is expected as MacOS by default runs with a very low number of allowed open files ('ulimit -n' says something like 256).
 
+[ !$preview_dart_2 && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # Deprecating all Dart1 modes of execution
+
 [ $strong && ($compiler == dartk || $compiler == dartkb || $compiler == dartkp) ]
 io/file_error_test: RuntimeError
 io/file_test: RuntimeError
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 3019ae9..011c128 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -34,9 +34,6 @@
 oom_error_stacktrace_test: RuntimeError
 out_of_memory_test: RuntimeError
 
-[ $compiler == dartkb ]
-no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
-
 [ $fasta ]
 deferred_transitive_import_error_test: CompileTimeError
 package/package1_test: CompileTimeError
@@ -56,6 +53,27 @@
 [ $compiler == app_jitk && ($mode == debug || $mode == release) ]
 dart_developer_disabled_env_test: RuntimeError
 
+# The failures below still need to be investigated and possibly fixed, or marked as skipped.
+[ $compiler == dartkb && $strong ]
+io/dart_std_io_pipe_test: Pass, Crash # Trap bytecode encountered.
+io/file_lock_test: Pass, Crash # Trap bytecode encountered.
+io/http_advanced_test: Pass, RuntimeError # Please triage.
+io/http_client_connect_test: Pass, RuntimeError # Please triage.
+io/http_outgoing_size_test: Pass, RuntimeError # Please triage.
+io/platform_test: RuntimeError # Platform.script points to dill file.
+io/process_sync_test: Pass, Crash # Bytecode compilation.
+io/test_extension_fail_test: RuntimeError # Platform.script points to dill file.
+io/test_extension_test: RuntimeError # Platform.script points to dill file.
+io/web_socket_compression_test: Pass, RuntimeError # Please triage.
+io/web_socket_ping_test: Pass, RuntimeError # Please triage.
+io/web_socket_protocol_test: Pass, RuntimeError # Please triage.
+io/web_socket_typed_data_test: Pass, RuntimeError # Please triage.
+no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
+package/scenarios/packages_file_strange_formatting/empty_lines_test: CompileTimeError # Please triage.
+package/scenarios/packages_file_strange_formatting/mixed_line_ends_test: CompileTimeError # Please triage.
+package/scenarios/packages_option_only/packages_option_only_test: CompileTimeError # Please triage.
+typed_data_isolate_test: Pass, Crash, Timeout # Please triage.
+
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
 io/compile_all_test: Crash # Issue 32373
 io/raw_socket_test: Crash
@@ -164,7 +182,7 @@
 io/directory_chdir_test: Skip # Timeout
 io/echo_server_stream_test: Pass, Slow
 
-# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
+# Enabling of dartk for sim{arm,arm64,dbc64} revealed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) && ($compiler == dartk || $compiler == dartkb) ]
@@ -173,10 +191,10 @@
 io/directory_list_sync_test: Timeout, Pass # Please triage.
 io/file_blocking_lock_test: Pass, Crash # Please triage.
 io/file_lock_test: Slow, Pass
-io/platform_test: RuntimeError # Please triage.
+io/platform_test: RuntimeError # Platform.script points to dill file.
 io/process_sync_test: Timeout, Pass
-io/test_extension_fail_test: RuntimeError # Please traige.
-io/test_extension_test: RuntimeError # Please traige.
+io/test_extension_fail_test: RuntimeError # Platform.script points to dill file.
+io/test_extension_test: RuntimeError # Platform.script points to dill file.
 map_insert_remove_oom_test: Skip # Heap limit too low.
 package/scenarios/packages_file_strange_formatting/empty_lines_test: CompileTimeError # Please triage.
 package/scenarios/packages_file_strange_formatting/mixed_line_ends_test: CompileTimeError # Please triage.
diff --git a/tools/VERSION b/tools/VERSION
index 4bb7fc5..646d82b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 1
 PATCH 0
-PRERELEASE 5
+PRERELEASE 6
 PRERELEASE_PATCH 0
diff --git a/tools/bots/compare_results.dart b/tools/bots/compare_results.dart
new file mode 100755
index 0000000..5192925
--- /dev/null
+++ b/tools/bots/compare_results.dart
@@ -0,0 +1,284 @@
+#!/usr/bin/env dart
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Compare the old and new test results and list tests that pass the filters.
+// The output contains additional details in the verbose mode. There is a human
+// readable mode that explains the results and how they changed.
+
+import 'dart:collection';
+import 'dart:io';
+
+import 'package:args/args.dart';
+
+import 'results.dart';
+
+class Result {
+  final String name;
+  final String outcome;
+  final String expectation;
+  final bool matches;
+  final bool flaked;
+
+  Result(this.name, this.outcome, this.expectation, this.matches, this.flaked);
+
+  Result.fromMap(Map<String, dynamic> map, Map<String, dynamic> flakinessData)
+      : name = map["name"],
+        outcome = map["result"],
+        expectation = map["expected"],
+        matches = map["matches"],
+        flaked = flakinessData != null &&
+            flakinessData["outcomes"].contains(map["result"]);
+}
+
+class Event {
+  final Result before;
+  final Result after;
+
+  Event(this.before, this.after);
+
+  bool get isNew => before == null;
+  bool get isNewPassing => before == null && after.matches;
+  bool get isNewFailing => before == null && !after.matches;
+  bool get changed => !unchanged;
+  bool get unchanged => before != null && before.outcome == after.outcome;
+  bool get remainedPassing => before.matches && after.matches;
+  bool get remainedFailing => !before.matches && !after.matches;
+  bool get flaked => after.flaked;
+  bool get fixed => !before.matches && after.matches;
+  bool get broke => before.matches && !after.matches;
+
+  String get description {
+    if (isNewPassing) {
+      return "is new and succeeded";
+    } else if (isNewFailing) {
+      return "is new and failed";
+    } else if (remainedPassing) {
+      return "succeeded again";
+    } else if (remainedFailing) {
+      return "failed again";
+    } else if (fixed) {
+      return "was fixed";
+    } else if (broke) {
+      return "broke";
+    } else {
+      throw new Exception("Unreachable");
+    }
+  }
+}
+
+bool firstSection = true;
+
+bool search(String description, String searchFor, List<Event> events,
+    ArgResults options) {
+  bool judgement = false;
+  bool beganSection = false;
+
+  for (final event in events) {
+    if (searchFor == "passing" &&
+        (event.after.flaked || !event.after.matches)) {
+      continue;
+    }
+    if (searchFor == "flaky" && !event.after.flaked) {
+      continue;
+    }
+    if (searchFor == "failing" && (event.after.flaked || event.after.matches)) {
+      continue;
+    }
+    if (options["unchanged"] && !event.unchanged) continue;
+    if (options["changed"] && !event.changed) continue;
+    if (!beganSection) {
+      if (options["human"]) {
+        if (!firstSection) {
+          print("");
+        }
+        firstSection = false;
+        print("$description\n");
+      }
+    }
+    beganSection = true;
+    final before = event.before;
+    final after = event.after;
+    final name = event.after.name;
+    if (!after.flaked && !after.matches) {
+      judgement = true;
+    }
+    if (options["human"]) {
+      if (options["verbose"]) {
+        String expected =
+            after.matches ? "" : ", expected ${after.expectation}";
+        if (before == null || before.outcome == after.outcome) {
+          print("${name} ${event.description} "
+              "(${event.after.outcome}${expected})");
+        } else {
+          print("${name} ${event.description} "
+              "(${event.before?.outcome} -> ${event.after.outcome}${expected})");
+        }
+      } else {
+        print(name);
+      }
+    } else {
+      if (options["verbose"]) {
+        print("$name "
+            "${before?.outcome} ${after.outcome} "
+            "${before?.expectation} ${after.expectation} "
+            "${before?.matches} ${after.matches} "
+            "${before?.flaked} ${after.flaked}");
+      } else {
+        print(event.after.name);
+      }
+    }
+  }
+
+  return judgement;
+}
+
+main(List<String> args) async {
+  final parser = new ArgParser();
+  parser.addFlag("changed",
+      abbr: 'c',
+      negatable: false,
+      help: "Show only tests that changed results.");
+  parser.addFlag("failing",
+      abbr: 'f', negatable: false, help: "Show failing tests.");
+  parser.addOption("flakiness-data",
+      abbr: 'd', help: "File containing flakiness data");
+  parser.addFlag("judgement",
+      abbr: 'j',
+      negatable: false,
+      help: "Exit 1 only if any of the filtered results failed.");
+  parser.addFlag("flaky",
+      abbr: 'F', negatable: false, help: "Show flaky tests.");
+  parser.addFlag("help", help: "Show the program usage.", negatable: false);
+  parser.addFlag("human",
+      abbr: "h",
+      help: "Prove you can't read machine readable output.",
+      negatable: false);
+  parser.addFlag("passing",
+      abbr: 'p', negatable: false, help: "Show passing tests.");
+  parser.addFlag("unchanged",
+      abbr: 'u',
+      negatable: false,
+      help: "Show only tests with unchanged results.");
+  parser.addFlag("verbose",
+      abbr: "v",
+      help: "Show the old and new result for each test",
+      negatable: false);
+
+  final options = parser.parse(args);
+  if (options["help"]) {
+    print("""
+Usage: compare_results.dart [OPTION]... [BEFORE] [AFTER]
+Compare the old and new test results and list tests that pass the filters.
+All tests are listed if no filters are given.
+
+The options are as follows:
+
+${parser.usage}""");
+    return;
+  }
+
+  if (options["changed"] && options["unchanged"]) {
+    print(
+        "error: The options --changed and --unchanged are mutually exclusive");
+    exitCode = 2;
+    return;
+  }
+
+  final parameters = options.rest;
+  if (parameters.length != 2) {
+    print("error: Expected two parameters (results before and results after)");
+    exitCode = 2;
+    return;
+  }
+
+  // Load the input and the flakiness data if specified.
+  final before = await loadResultsMap(parameters[0]);
+  final after = await loadResultsMap(parameters[1]);
+  final flakinessData = options["flakiness-data"] != null
+      ? await loadResultsMap(options["flakiness-data"])
+      : <String, Map<String, dynamic>>{};
+
+  // The names of every test that has a data point in the new data set.
+  final names = new SplayTreeSet<String>.from(after.keys);
+
+  final events = <Event>[];
+  for (final name in names) {
+    final mapBefore = before[name];
+    final mapAfter = after[name];
+    final resultBefore = mapBefore != null
+        ? new Result.fromMap(mapBefore, flakinessData[name])
+        : null;
+    final resultAfter = new Result.fromMap(mapAfter, flakinessData[name]);
+    final event = new Event(resultBefore, resultAfter);
+    events.add(event);
+  }
+
+  // Report tests matching the filters.
+  bool judgement = false;
+  if (options["passing"] || options["flaky"] || options["failing"]) {
+    if (options["passing"]) {
+      String sectionHeader;
+      if (options["unchanged"]) {
+        sectionHeader = "The following tests continued to pass:";
+      } else if (options["changed"]) {
+        sectionHeader = "The following tests began passing:";
+      } else {
+        sectionHeader = "The following tests passed:";
+      }
+      search(sectionHeader, "passing", events, options);
+    }
+    if (options["flaky"]) {
+      String sectionHeader;
+      if (options["unchanged"]) {
+        sectionHeader = "The following tests are known to flake but didn't:";
+      } else if (options["changed"]) {
+        sectionHeader = "The following tests flaked:";
+      } else {
+        sectionHeader = "The following tests are known to flake:";
+      }
+      search(sectionHeader, "flaky", events, options);
+    }
+    if (options["failing"]) {
+      String sectionHeader;
+      if (options["unchanged"]) {
+        sectionHeader = "The following tests continued to fail:";
+      } else if (options["changed"]) {
+        sectionHeader = "The following tests began failing:";
+      } else {
+        sectionHeader = "The following tests failed:";
+      }
+      judgement = search(sectionHeader, "failing", events, options);
+    }
+  } else {
+    String sectionHeader;
+    if (options["unchanged"]) {
+      sectionHeader = "The following tests had the same result:";
+    } else if (options["changed"]) {
+      sectionHeader = "The following tests changed result:";
+    } else {
+      sectionHeader = "The following tests ran:";
+    }
+    judgement = search(sectionHeader, null, events, options);
+  }
+
+  // Exit 1 only if --judgement and any test failed.
+  if (options["judgement"]) {
+    if (options["human"] && !firstSection) {
+      print("");
+    }
+    String oldNew =
+        options["unchanged"] ? "old " : options["changed"] ? "new " : "";
+    if (judgement) {
+      if (options["human"]) {
+        print("There were ${oldNew}test failures.");
+      }
+      exitCode = 1;
+    } else {
+      if (options["human"]) {
+        print("No ${oldNew}test failures were found.");
+      }
+    }
+  }
+}
diff --git a/tools/bots/results.dart b/tools/bots/results.dart
new file mode 100644
index 0000000..fbc51e7
--- /dev/null
+++ b/tools/bots/results.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// results.json and flaky.json parses.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+Future<List<Map<String, dynamic>>> loadResults(String path) async {
+  final results = <Map<String, dynamic>>[];
+  final lines = new File(path)
+      .openRead()
+      .transform(utf8.decoder)
+      .transform(new LineSplitter());
+  await for (final line in lines) {
+    final Map<String, dynamic> map = jsonDecode(line);
+    results.add(map);
+  }
+  return results;
+}
+
+Map<String, Map<String, dynamic>> createResultsMap(
+        List<Map<String, dynamic>> results) =>
+    new Map<String, Map<String, dynamic>>.fromIterable(results,
+        key: (dynamic result) => (result as Map<String, dynamic>)['name']);
+
+Future<Map<String, Map<String, dynamic>>> loadResultsMap(String path) async =>
+    createResultsMap(await loadResults(path));
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 088da9b..9fe04ff 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -402,13 +402,13 @@
       "options": {
         "hot-reload-rollback": true
       }},
-    "app_jit-legacy-linux-(debug|product|release)-x64": {
-      "options": {
-        "preview-dart-2": false
-      }},
     "app_jitk-linux-(debug|product|release)-x64": { },
     "dartkb-interpret-linux-(debug|release)-x64": {
       "options": {
+        "vm-options": ["--enable_interpreter", "--compilation-counter-threshold=-1"]
+      }},
+    "dartkb-mixed-linux-(debug|release)-x64": {
+      "options": {
         "vm-options": ["--enable_interpreter"]
       }},
     "dartkb-compile-linux-(debug|release)-x64": {
@@ -420,21 +420,6 @@
         "checked": true,
         "use-sdk": true
       }},
-    "precompiler-legacy-linux-(debug|product)-x64": {
-      "options": {
-        "preview-dart-2": false,
-        "use-blobs": true
-      }},
-    "precompiler-legacy-(mac|win)-debug-simarm64": {
-      "options": {
-        "preview-dart-2": false,
-        "use-blobs": true
-      }},
-    "precompiler-legacy-android-debug-arm": {
-      "options": {
-        "preview-dart-2": false,
-        "use-blobs": true
-      }},
     "fasta-(linux|mac|win)": { },
     "analyzer-(linux|mac|win)": {
       "options": {
@@ -527,11 +512,14 @@
           ]
         },
         {
-          "name": "vm interpreter tests",
+          "name": "vm mixed mode tests",
           "arguments": [
-            "-ndartkb-interpret-linux-${mode}-x64",
+            "-ndartkb-mixed-linux-${mode}-x64",
             "--compiler=dartkb",
-            "language_2"
+            "language_2",
+            "corelib_2",
+            "lib_2",
+            "standalone_2"
           ]
         },
         {
@@ -539,7 +527,21 @@
           "arguments": [
             "-ndartkb-compile-linux-${mode}-x64",
             "--compiler=dartkb",
-            "language_2"
+            "language_2",
+            "corelib_2",
+            "lib_2",
+            "standalone_2"
+          ]
+        },
+        {
+          "name": "vm interpreter tests",
+          "arguments": [
+            "-ndartkb-interpret-linux-${mode}-x64",
+            "--compiler=dartkb",
+            "language_2",
+            "corelib_2",
+            "lib_2",
+            "standalone_2"
           ]
         }
       ]
@@ -809,30 +811,6 @@
     },
     {
       "builders": [
-        "app-linux-debug-x64",
-        "app-linux-product-x64",
-        "app-linux-release-x64"
-      ],
-      "meta": {
-        "description": "This configuration is used by the vm app builder group."
-      },
-      "steps": [
-        {
-          "name": "build dart",
-          "script": "tools/build.py",
-          "arguments": [
-            "runtime"
-          ]
-        },
-        {
-          "name": "vm tests",
-          "arguments": [
-            "-napp_jit-legacy-linux-${mode}-x64"]
-        }
-      ]
-    },
-    {
-      "builders": [
         "app-kernel-linux-debug-x64",
         "app-kernel-linux-product-x64",
         "app-kernel-linux-release-x64"
@@ -988,49 +966,6 @@
     },
     {
       "builders": [
-        "precomp-linux-debug-x64",
-        "precomp-linux-product-x64",
-        "vm-noopt-mac-simarm64",
-        "vm-precomp-win-simarm64"
-      ],
-      "meta": {
-        "description": "This is the configuration for the vm precomp builders."
-      },
-      "steps": [
-        {
-          "name": "build dart",
-          "script": "tools/build.py",
-          "arguments": ["runtime", "runtime_precompiled"]
-        },
-        {
-          "name": "vm tests",
-          "arguments": [
-            "-nprecompiler-legacy-${system}-${mode}-${arch}"]
-        }
-      ]
-    },
-    {
-      "builders": [
-        "vm-precomp-android-release"
-      ],
-      "meta": {
-        "description": "This is the configuration for the android precomp builder. This has its own configuration because it needs to pass arch and os as arguments to build and system to test.py."
-      },
-      "steps": [
-        {
-          "name": "build dart",
-          "script": "tools/build.py",
-          "arguments": ["--arch=arm", "--os=android", "runtime", "runtime_precompiled"]
-        },
-        {
-          "name": "vm tests",
-          "arguments": [
-            "-nprecompiler-legacy-android-debug-arm"]
-        }
-      ]
-    },
-    {
-      "builders": [
         "vm-optcounter-threshold-linux-release-ia32",
         "vm-optcounter-threshold-linux-release-x64"
       ],
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 141b852..a988f47 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -242,7 +242,6 @@
       out/ReleaseX64/dart-sdk \
       out/ReleaseSIMDBC64/dart \
       out/ReleaseX64/gen/kernel-service.dart.snapshot \
-      out/ReleaseX64/gen/runtime/bin/precompiler_entry_points.json \
       out/ReleaseX64/dart \
       out/ReleaseX64/dart_bootstrap \
       out/ReleaseX64/run_vm_tests \
@@ -363,7 +362,6 @@
       out/ReleaseX64/dart-sdk \
       out/ReleaseSIMDBC64/dart \
       out/ReleaseX64/gen/kernel-service.dart.snapshot \
-      out/ReleaseX64/gen/runtime/bin/precompiler_entry_points.json \
       out/ReleaseX64/dart \
       out/ReleaseX64/dart_bootstrap \
       out/ReleaseX64/run_vm_tests \
diff --git a/tools/bots/update_flakiness.dart b/tools/bots/update_flakiness.dart
new file mode 100755
index 0000000..4c49782
--- /dev/null
+++ b/tools/bots/update_flakiness.dart
@@ -0,0 +1,66 @@
+#!/usr/bin/env dart
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Update the flakiness data with a set of fresh results.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+
+import 'results.dart';
+
+main(List<String> args) async {
+  final parser = new ArgParser();
+  parser.addFlag('help', help: 'Show the program usage.', negatable: false);
+  parser.addOption('input', abbr: 'i', help: "Input flakiness file.");
+  parser.addOption('output', abbr: 'o', help: "Output flakiness file.");
+  final options = parser.parse(args);
+  if (options["help"]) {
+    print("""
+Usage: update_flakiness.dart [OPTION]... [RESULT-FILE]...
+Update the flakiness data with a set of fresh results.
+
+The options are as follows:
+
+${parser.usage}""");
+    return;
+  }
+  final parameters = options.rest;
+
+  // Load the existing flakiness data, if any.
+  final data = options["input"] != null
+      ? await loadResultsMap(options["input"])
+      : <String, Map<String, dynamic>>{};
+
+  // Incrementally update the flakiness data with each observed result.
+  for (final path in parameters) {
+    final results = await loadResults(path);
+    for (final result in results) {
+      final String name = result["name"];
+      final Map<String, dynamic> testData =
+          data.putIfAbsent(name, () => <String, dynamic>{});
+      testData["name"] = name;
+      final List<String> outcomes =
+          testData.putIfAbsent("outcomes", () => <String>[]);
+      if (!outcomes.contains(result["result"])) {
+        outcomes.add(result["result"]);
+        outcomes..sort();
+      }
+    }
+  }
+
+  // Write out the new flakiness data, containing all the tests known to have
+  // multiple outcomes.
+  final sink = options["output"] != null
+      ? new File(options["output"]).openWrite()
+      : stdout;
+  final names = new List<String>.from(data.keys)..sort();
+  for (final name in names) {
+    final testData = data[name];
+    if (testData["outcomes"].length < 2) continue;
+    sink.writeln(jsonEncode(testData));
+  }
+}
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
index f025a04..da1bc36 100644
--- a/tools/patch_sdk.dart
+++ b/tools/patch_sdk.dart
@@ -199,8 +199,10 @@
     ..target = target;
 
   var inputs = [Uri.parse('dart:core')];
-  var result = await generateKernel(new ProcessedOptions(options, inputs),
-      buildSummary: true, buildComponent: true);
+  var result = await generateKernel(
+      new ProcessedOptions(options: options, inputs: inputs),
+      buildSummary: true,
+      buildComponent: true);
   await writeComponentToFile(result.component, output);
   return result.deps;
 }
diff --git a/tools/testing/dart/command.dart b/tools/testing/dart/command.dart
index eaf62c6..fecadb4 100644
--- a/tools/testing/dart/command.dart
+++ b/tools/testing/dart/command.dart
@@ -114,17 +114,21 @@
       Uri workingDirectory) {
     return new FastaCompilationCommand._(
         compilerLocation,
-        outputFile,
+        outputFile.toFilePath(),
         bootstrapDependencies,
-        executable,
+        executable.toFilePath(),
         arguments,
         environment,
-        workingDirectory);
+        workingDirectory?.toFilePath());
   }
 
   /// A descriptive name for this command.
   final String displayName;
 
+  /// When cloning a command object to run it multiple times, we give
+  /// the different copies distinct values for index.
+  int index;
+
   /// Number of times this command *can* be retried.
   int get maxNumRetries => 2;
 
@@ -135,7 +139,15 @@
   /// be expensive to compute (and hashCode is called often).
   int _cachedHashCode;
 
-  Command._(this.displayName);
+  Command._(this.displayName, {this.index = 0});
+
+  /// A virtual clone method for a member of the Command hierarchy.
+  /// Two clones with the same index will be equal, with different indices
+  /// will be distinct. Used to run tests multiple times, since identical
+  /// commands are only run once by the dependency graph scheduler.
+  Command indexedCopy(int index) {
+    return Command._(displayName, index: index);
+  }
 
   int get hashCode {
     if (_cachedHashCode == null) {
@@ -152,10 +164,13 @@
 
   void _buildHashCode(HashCodeBuilder builder) {
     builder.addJson(displayName);
+    builder.add(index);
   }
 
   bool _equal(covariant Command other) =>
-      hashCode == other.hashCode && displayName == other.displayName;
+      hashCode == other.hashCode &&
+      displayName == other.displayName &&
+      index == other.index;
 
   String toString() => reproductionCommand;
 
@@ -176,8 +191,8 @@
   final String workingDirectory;
 
   ProcessCommand._(String displayName, this.executable, this.arguments,
-      [this.environmentOverrides, this.workingDirectory])
-      : super._(displayName) {
+      [this.environmentOverrides, this.workingDirectory, int index = 0])
+      : super._(displayName, index: index) {
     if (io.Platform.operatingSystem == 'windows') {
       // Windows can't handle the first command if it is a .bat file or the like
       // with the slashes going the other direction.
@@ -186,6 +201,11 @@
     }
   }
 
+  ProcessCommand indexedCopy(int index) {
+    return ProcessCommand._(displayName, executable, arguments,
+        environmentOverrides, workingDirectory, index);
+  }
+
   void _buildHashCode(HashCodeBuilder builder) {
     super._buildHashCode(builder);
     builder.addJson(executable);
@@ -240,9 +260,21 @@
       String executable,
       List<String> arguments,
       Map<String, String> environmentOverrides,
-      {String workingDirectory})
+      {String workingDirectory,
+      int index = 0})
       : super._(displayName, executable, arguments, environmentOverrides,
-            workingDirectory);
+            workingDirectory, index);
+
+  CompilationCommand indexedCopy(int index) => CompilationCommand._(
+      displayName,
+      _outputFile,
+      _alwaysCompile,
+      _bootstrapDependencies,
+      executable,
+      arguments,
+      environmentOverrides,
+      workingDirectory: workingDirectory,
+      index: index);
 
   bool get outputIsUpToDate {
     if (_alwaysCompile) return false;
@@ -294,15 +326,27 @@
 
   FastaCompilationCommand._(
       this._compilerLocation,
-      Uri outputFile,
+      String outputFile,
       List<Uri> bootstrapDependencies,
-      Uri executable,
+      String executable,
       List<String> arguments,
       Map<String, String> environmentOverrides,
-      Uri workingDirectory)
-      : super._("fasta", outputFile.toFilePath(), true, bootstrapDependencies,
-            executable.toFilePath(), arguments, environmentOverrides,
-            workingDirectory: workingDirectory?.toFilePath());
+      String workingDirectory,
+      {int index = 0})
+      : super._("fasta", outputFile, true, bootstrapDependencies, executable,
+            arguments, environmentOverrides,
+            workingDirectory: workingDirectory, index: index);
+
+  @override
+  FastaCompilationCommand indexedCopy(int index) => FastaCompilationCommand._(
+      _compilerLocation,
+      _outputFile,
+      _bootstrapDependencies,
+      executable,
+      arguments,
+      environmentOverrides,
+      workingDirectory,
+      index: index);
 
   @override
   List<String> get batchArguments {
@@ -370,13 +414,20 @@
 class VMKernelCompilationCommand extends CompilationCommand {
   VMKernelCompilationCommand._(
       String outputFile,
-      bool neverSkipCompilation,
+      bool alwaysCompile,
       List<Uri> bootstrapDependencies,
       String executable,
       List<String> arguments,
-      Map<String, String> environmentOverrides)
-      : super._('vm_compile_to_kernel', outputFile, neverSkipCompilation,
-            bootstrapDependencies, executable, arguments, environmentOverrides);
+      Map<String, String> environmentOverrides,
+      {int index = 0})
+      : super._('vm_compile_to_kernel', outputFile, alwaysCompile,
+            bootstrapDependencies, executable, arguments, environmentOverrides,
+            index: index);
+
+  VMKernelCompilationCommand indexedCopy(int index) =>
+      VMKernelCompilationCommand._(_outputFile, _alwaysCompile,
+          _bootstrapDependencies, executable, arguments, environmentOverrides,
+          index: index);
 
   int get maxNumRetries => 1;
 }
@@ -398,8 +449,12 @@
   final TestConfiguration configuration;
   final bool retry;
 
-  BrowserTestCommand._(this.url, this.configuration, this.retry)
-      : super._(configuration.runtime.name);
+  BrowserTestCommand._(this.url, this.configuration, this.retry,
+      {int index = 0})
+      : super._(configuration.runtime.name, index: index);
+
+  BrowserTestCommand indexedCopy(int index) =>
+      BrowserTestCommand._(url, configuration, retry, index: index);
 
   void _buildHashCode(HashCodeBuilder builder) {
     super._buildHashCode(builder);
@@ -431,27 +486,45 @@
 
 class AnalysisCommand extends ProcessCommand {
   AnalysisCommand._(String executable, List<String> arguments,
-      Map<String, String> environmentOverrides)
-      : super._('dart2analyzer', executable, arguments, environmentOverrides);
+      Map<String, String> environmentOverrides, {int index = 0})
+      : super._('dart2analyzer', executable, arguments, environmentOverrides,
+            null, index);
+
+  AnalysisCommand indexedCopy(int index) =>
+      AnalysisCommand._(executable, arguments, environmentOverrides,
+          index: index);
 }
 
 class CompareAnalyzerCfeCommand extends ProcessCommand {
   CompareAnalyzerCfeCommand._(String executable, List<String> arguments,
-      Map<String, String> environmentOverrides)
+      Map<String, String> environmentOverrides, {int index = 0})
       : super._('compare_analyzer_cfe', executable, arguments,
-            environmentOverrides);
+            environmentOverrides, null, index);
+
+  CompareAnalyzerCfeCommand indexedCopy(int index) =>
+      CompareAnalyzerCfeCommand._(executable, arguments, environmentOverrides,
+          index: index);
 }
 
 class SpecParseCommand extends ProcessCommand {
   SpecParseCommand._(String executable, List<String> arguments,
-      Map<String, String> environmentOverrides)
-      : super._('spec_parser', executable, arguments, environmentOverrides);
+      Map<String, String> environmentOverrides, {int index = 0})
+      : super._('spec_parser', executable, arguments, environmentOverrides,
+            null, index);
+
+  SpecParseCommand indexedCopy(int index) =>
+      SpecParseCommand._(executable, arguments, environmentOverrides,
+          index: index);
 }
 
 class VmCommand extends ProcessCommand {
   VmCommand._(String executable, List<String> arguments,
-      Map<String, String> environmentOverrides)
-      : super._('vm', executable, arguments, environmentOverrides);
+      Map<String, String> environmentOverrides,
+      {int index = 0})
+      : super._('vm', executable, arguments, environmentOverrides, null, index);
+
+  VmCommand indexedCopy(int index) =>
+      VmCommand._(executable, arguments, environmentOverrides, index: index);
 }
 
 class VmBatchCommand extends ProcessCommand implements VmCommand {
@@ -460,9 +533,14 @@
 
   VmBatchCommand._(String executable, String dartFile, List<String> arguments,
       Map<String, String> environmentOverrides,
-      {this.checked: true})
+      {this.checked: true, int index = 0})
       : this.dartFile = dartFile,
-        super._('vm-batch', executable, arguments, environmentOverrides);
+        super._('vm-batch', executable, arguments, environmentOverrides, null,
+            index);
+
+  VmBatchCommand indexedCopy(int index) =>
+      VmBatchCommand._(executable, dartFile, arguments, environmentOverrides,
+          checked: checked, index: index);
 
   @override
   List<String> get batchArguments =>
@@ -495,10 +573,18 @@
       this.processTestFilename,
       this.precompiledTestDirectory,
       this.arguments,
-      this.useBlobs)
-      : super._("adb_precompilation");
+      this.useBlobs,
+      {int index = 0})
+      : super._("adb_precompilation", index: index);
 
-  void _buildHashCode(HashCodeBuilder builder) {
+  AdbPrecompilationCommand indexedCopy(int index) => AdbPrecompilationCommand._(
+      precompiledRunnerFilename,
+      processTestFilename,
+      precompiledTestDirectory,
+      arguments,
+      useBlobs,
+      index: index);
+  _buildHashCode(HashCodeBuilder builder) {
     super._buildHashCode(builder);
     builder.add(precompiledRunnerFilename);
     builder.add(precompiledTestDirectory);
@@ -520,13 +606,18 @@
 class JSCommandlineCommand extends ProcessCommand {
   JSCommandlineCommand._(
       String displayName, String executable, List<String> arguments,
-      [Map<String, String> environmentOverrides = null])
-      : super._(displayName, executable, arguments, environmentOverrides);
+      [Map<String, String> environmentOverrides = null, int index = 0])
+      : super._(displayName, executable, arguments, environmentOverrides, null,
+            index);
+
+  JSCommandlineCommand indexedCopy(int index) => JSCommandlineCommand._(
+      displayName, executable, arguments, environmentOverrides, index);
 }
 
 /// [ScriptCommand]s are executed by dart code.
 abstract class ScriptCommand extends Command {
-  ScriptCommand._(String displayName) : super._(displayName);
+  ScriptCommand._(String displayName, {int index = 0})
+      : super._(displayName, index: index);
 
   Future<ScriptCommandOutput> run();
 }
@@ -535,8 +626,13 @@
   final String _sourceDirectory;
   final String _destinationDirectory;
 
-  CleanDirectoryCopyCommand._(this._sourceDirectory, this._destinationDirectory)
-      : super._('dir_copy');
+  CleanDirectoryCopyCommand._(this._sourceDirectory, this._destinationDirectory,
+      {int index = 0})
+      : super._('dir_copy', index: index);
+
+  CleanDirectoryCopyCommand indexedCopy(int index) =>
+      CleanDirectoryCopyCommand._(_sourceDirectory, _destinationDirectory,
+          index: index);
 
   String get reproductionCommand =>
       "Copying '$_sourceDirectory' to '$_destinationDirectory'.";
@@ -581,7 +677,11 @@
   String _link;
   String _target;
 
-  MakeSymlinkCommand._(this._link, this._target) : super._('make_symlink');
+  MakeSymlinkCommand._(this._link, this._target, {int index = 0})
+      : super._('make_symlink', index: index);
+
+  MakeSymlinkCommand indexedCopy(int index) =>
+      MakeSymlinkCommand._(_link, _target, index: index);
 
   String get reproductionCommand =>
       "Make symbolic link '$_link' (target: $_target)'.";
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 8f039d7..75728c3 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -1071,15 +1071,6 @@
       dillFile,
     ];
 
-    if (_isAot) {
-      args.addAll([
-        '--entry-points',
-        '${_configuration.buildDirectory}/gen/runtime/bin/precompiler_entry_points.json',
-        '--entry-points',
-        '${pkgVmDir}/lib/transformations/type_flow/entry_points_extra.json',
-      ]);
-    }
-
     args.add(arguments.where((name) => name.endsWith('.dart')).single);
     args.addAll(arguments.where((name) => name.startsWith('-D')));
     if (_isChecked || _useEnableAsserts) {
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index bd53829..ab0a075 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -25,7 +25,9 @@
       {this.configuration,
       this.progress,
       this.selectors,
+      this.testList,
       this.appendLogs,
+      this.repeat,
       this.batch,
       this.batchDart2JS,
       this.copyCoreDumps,
@@ -127,10 +129,12 @@
   final String dartPath;
   final String dartPrecompiledPath;
   final String flutterPath;
+  final List<String> testList;
 
   final int taskCount;
   final int shardCount;
   final int shard;
+  final int repeat;
   final String stepName;
 
   final int testServerPort;
diff --git a/tools/testing/dart/dependency_graph.dart b/tools/testing/dart/dependency_graph.dart
index a3e04fc2..1b6cb0e 100644
--- a/tools/testing/dart/dependency_graph.dart
+++ b/tools/testing/dart/dependency_graph.dart
@@ -70,10 +70,11 @@
   /// Adds a new node to the graph with [dependencies] and [userData].
   ///
   /// The node is in the [NodeState.initialized] state.
-  Node<T> add(T userData, Iterable<Node<T>> dependencies) {
+  Node<T> add(T userData, Iterable<Node<T>> dependencies,
+      {bool timingDependency = false}) {
     assert(!_isSealed);
 
-    var node = new Node._(userData);
+    var node = new Node._(userData, timingDependency);
     _nodes.add(node);
 
     for (var dependency in dependencies) {
@@ -114,11 +115,12 @@
 /// A single node in a [Graph].
 class Node<T> extends UniqueObject {
   final T data;
+  final bool timingDependency;
   NodeState _state = NodeState.initialized;
   final Set<Node<T>> _dependencies = new Set();
   final Set<Node<T>> _neededFor = new Set();
 
-  Node._(this.data);
+  Node._(this.data, this.timingDependency);
 
   NodeState get state => _state;
   Iterable<Node<T>> get dependencies => _dependencies;
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index 9f5aadf..6c72986 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -220,6 +220,7 @@
         'shard', 'The index of this instance when running in sharded mode.',
         defaultsTo: 1, hide: true),
     new _Option.bool('help', 'Print list of options.', abbr: 'h'),
+    new _Option.int('repeat', 'How many times each test is run', defaultsTo: 1),
     new _Option.bool('verbose', 'Verbose output.', abbr: 'v'),
     new _Option.bool('verify-ir', 'Verify kernel IR.', hide: true),
     new _Option.bool('no-tree-shake', 'Disable kernel IR tree shaking.',
@@ -295,6 +296,7 @@
     new _Option.int(
         'test_driver_error_port', 'Port for http test driver server errors.',
         defaultsTo: 0, hide: true),
+    new _Option('test_list', 'File containing a list of tests to be executed'),
     new _Option(
         'builder_tag',
         '''Machine specific options that is not captured by the regular test
@@ -372,6 +374,10 @@
           verbose: arguments.contains("--verbose") || arguments.contains("-v"));
       return null;
     }
+    // Dart1 mode has been deprecated.
+    if (arguments.contains("--no-preview-dart-2")) {
+      return null;
+    }
 
     var configuration = <String, dynamic>{};
 
@@ -478,6 +484,12 @@
       }
     }
 
+    // Fetch list of tests to run, if option is present.
+    if (configuration['test_list'] is String) {
+      configuration['test_list_contents'] =
+          File(configuration['test_list'] as String).readAsLinesSync();
+    }
+
     return _createConfigurations(configuration);
   }
 
@@ -600,7 +612,7 @@
     if (runtimes.isEmpty) {
       if (compilers.isEmpty) {
         runtimes = [Runtime.vm];
-        compilers = [Compiler.none];
+        compilers = [Compiler.dartk];
       } else {
         // Pick a runtime for each compiler.
         runtimes.addAll(compilers.map((compiler) => compiler.defaultRuntime));
@@ -654,12 +666,14 @@
                     isMinified: data["minified"] as bool,
                     vmOptions: vmOptions,
                     builderTag: data["builder_tag"] as String,
-                    previewDart2: !(data["no_preview_dart_2"] as bool));
+                    previewDart2: true);
             var configuration = new TestConfiguration(
                 configuration: innerConfiguration,
                 progress: Progress.find(data["progress"] as String),
                 selectors: selectors,
+                testList: data["test_list_contents"] as List<String>,
                 appendLogs: data["append_logs"] as bool,
+                repeat: data["repeat"] as int,
                 batch: !(data["noBatch"] as bool),
                 batchDart2JS: data["dart2js_batch"] as bool,
                 copyCoreDumps: data["copy_coredumps"] as bool,
@@ -725,8 +739,13 @@
 
     if (selectors == null) {
       if (configuration['suite_dir'] != null) {
-        var suitePath = new Path(configuration['suite_dir'] as String);
+        var suitePath = Path(configuration['suite_dir'] as String);
         selectors = [suitePath.filename];
+      } else if (configuration['test_list_contents'] != null) {
+        selectors = (configuration['test_list_contents'] as List<String>)
+            .map((t) => t.split('/').first)
+            .toSet()
+            .toList();
       } else {
         selectors = _defaultTestSelectors.toList();
       }
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 0573c17..17e0b60 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -135,6 +135,14 @@
     }
   }
 
+  TestCase indexedCopy(int index) {
+    var newCommands = commands.map((c) => c.indexedCopy(index)).toList();
+    return new TestCase(
+        displayName, newCommands, configuration, expectedOutcomes)
+      .._expectations = _expectations
+      ..hash = hash;
+  }
+
   bool get isNegative => _expectations & IS_NEGATIVE != 0;
   bool get hasRuntimeError => _expectations & HAS_RUNTIME_ERROR != 0;
   bool get hasStaticWarning => _expectations & HAS_STATIC_WARNING != 0;
@@ -872,27 +880,46 @@
     enqueueNextSuite();
   }
 
+  /// Adds a test case to the list of active test cases, and adds its commands
+  /// to the dependency graph of commands.
+  ///
+  /// If the repeat flag is > 1, replicates the test case and its commands,
+  /// adding an index field with a distinct value to each of the copies.
+  ///
+  /// Each copy of the test case depends on the previous copy of the test
+  /// case completing, with its first command having a dependency on the last
+  /// command of the previous copy of the test case. This dependency is
+  /// marked as a "timingDependency", so that it doesn't depend on the previous
+  /// test completing successfully, just on it completing.
   void _newTest(TestCase testCase) {
-    remainingTestCases.add(testCase);
-
     Node<Command> lastNode;
-    for (var command in testCase.commands) {
-      // Make exactly *one* node in the dependency graph for every command.
-      // This ensures that we never have two commands c1 and c2 in the graph
-      // with "c1 == c2".
-      var node = command2node[command];
-      if (node == null) {
-        var requiredNodes = (lastNode != null) ? [lastNode] : <Node<Command>>[];
-        node = graph.add(command, requiredNodes);
-        command2node[command] = node;
-        command2testCases[command] = <TestCase>[];
+    for (int i = 0; i < testCase.configuration.repeat; ++i) {
+      if (i > 0) {
+        testCase = testCase.indexedCopy(i);
       }
-      // Keep mapping from command to all testCases that refer to it
-      command2testCases[command].add(testCase);
+      remainingTestCases.add(testCase);
+      bool isFirstCommand = true;
+      for (var command in testCase.commands) {
+        // Make exactly *one* node in the dependency graph for every command.
+        // This ensures that we never have two commands c1 and c2 in the graph
+        // with "c1 == c2".
+        var node = command2node[command];
+        if (node == null) {
+          var requiredNodes =
+              (lastNode != null) ? [lastNode] : <Node<Command>>[];
+          node = graph.add(command, requiredNodes,
+              timingDependency: isFirstCommand);
+          command2node[command] = node;
+          command2testCases[command] = <TestCase>[];
+        }
+        // Keep mapping from command to all testCases that refer to it
+        command2testCases[command].add(testCase);
 
-      lastNode = node;
+        lastNode = node;
+        isFirstCommand = false;
+      }
+      _onTestCaseAdded(testCase);
     }
-    _onTestCaseAdded(testCase);
   }
 }
 
@@ -921,8 +948,8 @@
       if (event.from == NodeState.waiting ||
           event.from == NodeState.processing) {
         if (_finishedStates.contains(event.to)) {
-          for (var dependendNode in event.node.neededFor) {
-            _changeNodeStateIfNecessary(dependendNode);
+          for (var dependentNode in event.node.neededFor) {
+            _changeNodeStateIfNecessary(dependentNode);
           }
         }
       }
@@ -933,19 +960,19 @@
   // changed it's state.
   void _changeNodeStateIfNecessary(Node<Command> node) {
     if (_initStates.contains(node.state)) {
+      bool allDependenciesFinished =
+          node.dependencies.every((dep) => _finishedStates.contains(dep.state));
       bool anyDependenciesUnsuccessful = node.dependencies.any((dep) =>
           [NodeState.failed, NodeState.unableToRun].contains(dep.state));
+      bool allDependenciesSuccessful =
+          node.dependencies.every((dep) => dep.state == NodeState.successful);
 
       var newState = NodeState.waiting;
-      if (anyDependenciesUnsuccessful) {
+      if (allDependenciesSuccessful ||
+          (allDependenciesFinished && node.timingDependency)) {
+        newState = NodeState.enqueuing;
+      } else if (anyDependenciesUnsuccessful) {
         newState = NodeState.unableToRun;
-      } else {
-        bool allDependenciesSuccessful =
-            node.dependencies.every((dep) => dep.state == NodeState.successful);
-
-        if (allDependenciesSuccessful) {
-          newState = NodeState.enqueuing;
-        }
       }
       if (node.state != newState) {
         _graph.changeState(node, newState);
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 0d0cfa6..3ecabb4 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -297,6 +297,10 @@
     if (!pattern.hasMatch(displayName)) {
       return;
     }
+    if (configuration.testList != null &&
+        !configuration.testList.contains(displayName)) {
+      return;
+    }
 
     if (configuration.hotReload || configuration.hotReloadRollback) {
       // Handle reload special cases.
@@ -541,10 +545,10 @@
   ExpectationSet testExpectations;
   List<TestInformation> cachedTests;
   final Path dartDir;
-  Predicate<String> isTestFilePredicate;
   final bool listRecursively;
   final List<String> extraVmOptions;
   List<Uri> _dart2JsBootstrapDependencies;
+  Set<String> _testListPossibleFilenames;
 
   static final Uri co19SuiteLocation = Repository.uri.resolve("tests/co19_2/");
   static final Uri legacyCo19SuiteLocation =
@@ -552,7 +556,7 @@
 
   StandardTestSuite(TestConfiguration configuration, String suiteName,
       Path suiteDirectory, List<String> statusFilePaths,
-      {this.isTestFilePredicate, bool recursive: false})
+      {bool recursive: false})
       : dartDir = Repository.dir,
         listRecursively = recursive,
         suiteDir = Repository.dir.join(suiteDirectory),
@@ -567,6 +571,22 @@
             .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot')
       ];
     }
+    if (configuration.testList != null) {
+      _testListPossibleFilenames = Set<String>();
+      for (String s in configuration.testList) {
+        if (s.startsWith("$suiteName/")) {
+          s = s.substring(s.indexOf('/') + 1);
+          _testListPossibleFilenames
+              .add(suiteDir.append('$s.dart').toNativePath());
+          // If the test is a multitest, the filename doesn't include the label.
+          if (s.lastIndexOf('/') != -1) {
+            s = s.substring(0, s.lastIndexOf('/'));
+            _testListPossibleFilenames
+                .add(suiteDir.append('$s.dart').toNativePath());
+          }
+        }
+      }
+    }
   }
 
   /**
@@ -614,21 +634,14 @@
     ];
 
     return new StandardTestSuite(configuration, name, directory, status_paths,
-        isTestFilePredicate: (filename) => filename.endsWith('_test.dart'),
         recursive: true);
   }
 
   List<Uri> get dart2JsBootstrapDependencies => _dart2JsBootstrapDependencies;
 
-  /**
-   * The default implementation assumes a file is a test if
-   * it ends in "Test.dart".
-   */
-  bool isTestFile(String filename) {
-    // Use the specified predicate, if provided.
-    if (isTestFilePredicate != null) return isTestFilePredicate(filename);
-    return filename.endsWith("Test.dart");
-  }
+  /// The default implementation assumes a file is a test if
+  /// it ends in "_test.dart".
+  bool isTestFile(String filename) => filename.endsWith("_test.dart");
 
   List<String> additionalOptions(Path filePath) => [];
 
@@ -692,6 +705,10 @@
   }
 
   void enqueueFile(String filename, FutureGroup group) {
+    // This is an optimization to avoid scanning and generating extra tests.
+    // The definitive check against configuration.testList is performed in
+    // TestSuite.enqueueNewTestCase().
+    if (_testListPossibleFilenames?.contains(filename) == false) return;
     bool match = false;
     for (var regex in configuration.selectors.values) {
       String pattern = regex.pattern;
@@ -1500,7 +1517,6 @@
   PKGTestSuite(TestConfiguration configuration, Path directoryPath)
       : super(configuration, directoryPath.filename, directoryPath,
             ["$directoryPath/.status"],
-            isTestFilePredicate: (f) => f.endsWith('_test.dart'),
             recursive: true);
 
   void _enqueueBrowserTest(Path packageRoot, packages, TestInformation info,
diff --git a/utils/analysis_server/BUILD.gn b/utils/analysis_server/BUILD.gn
index 00ff196..643c494 100644
--- a/utils/analysis_server/BUILD.gn
+++ b/utils/analysis_server/BUILD.gn
@@ -7,7 +7,7 @@
 application_snapshot("analysis_server") {
   main_dart = "../../pkg/analysis_server/bin/server.dart"
   training_args = [
-    "--train-using=" + rebase_path("../../pkg/analyzer_cli"),
-    "--sdk=" + rebase_path("../../sdk/")
+    "--sdk=" + rebase_path("../../sdk/"),
+    "--train-using=" + rebase_path("../../pkg/analyzer_cli")
   ]
 }
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index b225d40..16b0025 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -121,8 +121,7 @@
 #    Arguments to pass to the Dart application for the training run.
 #
 #  vm_args (optional):
-#    Additional arguments to the Dart VM. Do not put --no-preview-dart-2 here.
-#    Instead use the template application_snapshot_dart1.
+#    Additional arguments to the Dart VM.
 #
 #  name (optional):
 #    The name of the snapshot if different from the target name. The output
@@ -148,40 +147,6 @@
   }
 }
 
-# Creates an app-jit snapshot for a Dart1 program based on a training run.
-#
-# Parameters:
-#  main_dart (required):
-#    The entrypoint to the Dart application.
-#
-#  training_args (required):
-#    Arguments to pass to the Dart application for the training run.
-#
-#  vm_args (optional):
-#    Additional arguments to the Dart VM. Do not put --no-preview-dart-2 here.
-#
-#  name (optional):
-#    The name of the snapshot if different from the target name. The output
-#    will be in $root_gen_dir/$name.dart.snapshot.
-#
-#  deps (optional):
-#    Any build dependencies.
-#
-#  dot_packages (optional):
-#    The .packages file for the app. Defaults to the $_dart_root/.packages.
-#
-#  output (optional):
-#    Overrides the full output path.
-template("application_snapshot_dart1") {
-  _application_snapshot(target_name) {
-    forward_variables_from(invoker, "*")
-    if (!defined(invoker.vm_args)) {
-      vm_args = []
-    }
-    vm_args += [ "--no-preview-dart-2" ]
-  }
-}
-
 # Creates an app-jit snapshot for the common FE based on a training run.
 #
 # Parameters:
@@ -192,7 +157,7 @@
 #    Arguments to pass to the Dart application for the training run.
 #
 #  vm_args (optional):
-#    Additional arguments to the Dart VM. Do not put --no-preview-dart-2 here.
+#    Additional arguments to the Dart VM.
 #
 #  name (optional):
 #    The name of the snapshot if different from the target name. The output
@@ -251,18 +216,13 @@
       output,
     ]
 
-    abs_depfile = rebase_path(depfile)
     abs_output = rebase_path(output, root_build_dir)
 
     vm_args = [
-      # TODO(asiva): For not use --no-preview-dart-2, need to flip this to use
-      # gen_kernel to generate a kernel file before creating an app snapshot.
-      "--no-preview-dart-2",
       "--deterministic",
       "--packages=$dot_packages",
       "--snapshot-kind=app-aot",
       "--snapshot=$abs_output",
-      "--snapshot-depfile=$abs_depfile",
     ] + aot_vm_args
 
     args = []
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index fe73122..887caf5 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -22,16 +22,58 @@
 application_snapshot("generate_dartanalyzer_snapshot") {
   main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
   training_args = [
-    "--dart-sdk=" + rebase_path("../../sdk"),
-    rebase_path("../../tests/language/first_test.dart"),
+    "--dart-sdk=" + rebase_path("../../sdk/"),
+    "--train-snapshot",
+    rebase_path("../../tests/language/first_test.dart")
   ]
   name = "dartanalyzer"
 }
 
 if (current_os == "linux") {
+  prebuilt_dart_action("dart_analyzer_dill") {
+    deps = [
+      "../../runtime/vm:vm_platform",
+      "../../runtime/vm:kernel_platform_files($dart_host_toolchain)",
+    ]
+    dart_analyzer_script = "../../pkg/vm/bin/kernel_service.dart"
+    gen_kernel_script = "../../pkg/vm/bin/gen_kernel.dart"
+
+    inputs = [
+      gen_kernel_script,
+      dart_analyzer_script,
+      "$root_out_dir/vm_platform_strong.dill",
+    ]
+    output = "$root_gen_dir/dart_analyzer.dill"
+    outputs = [
+      output,
+    ]
+
+    depfile = "$root_gen_dir/dart_analyzer_dill.d"
+    abs_depfile = rebase_path(depfile)
+    rebased_output = rebase_path(output, root_out_dir)
+    vm_args = [
+      "--depfile=$abs_depfile",
+      "--depfile_output_filename=$rebased_output",
+    ]
+
+    script = gen_kernel_script
+
+    args = [
+      "--packages=" + rebase_path("../../.packages"),
+      "--platform=" + rebase_path("$root_out_dir/vm_platform_strong.dill"),
+      "--aot",
+      "--no-embed-sources",
+      "--output=" + rebase_path("$root_gen_dir/dart_analyzer.dill"),
+      rebase_path(dart_analyzer_script),
+    ]
+  }
+
   aot_assembly("dartanalyzer_aot_assembly") {
-    main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
+    main_dart = "$root_gen_dir/dart_analyzer.dill"
     name = "dartanalyzer"
+    deps = [
+      ":dart_analyzer_dill"
+    ]
   }
 
   # This target is for Goma. It should not be used in the SDK.
diff --git a/utils/generate_entry_points_json.gni b/utils/generate_entry_points_json.gni
deleted file mode 100644
index dbb3a42..0000000
--- a/utils/generate_entry_points_json.gni
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import("../build/dart/dart_action.gni")
-
-_dart_root = get_path_info("..", "abspath")
-
-# Template to generate entry points JSON file using dart_bootstrap tool.
-# List of entry points is generated as a by-product while doing precompilation.
-#
-# This template expects the following arguments:
-#  - input: Name of the input dart script for precompilation.
-#  - output: Name of the output entry points JSON file.
-#  - extra_args: Extra arguments to pass to dart_bootstrap (optional).
-#
-template("generate_entry_points_json_with_dart_bootstrap") {
-  assert(defined(invoker.input), "Must define input dart script")
-  assert(defined(invoker.output), "Must define output json file")
-  extra_args = []
-  if (defined(invoker.extra_args)) {
-    extra_args += invoker.extra_args
-  }
-  dart_bootstrap_action(target_name) {
-    # Printing precompiler entry points is folded into precompilation, so dart_bootstrap is invoked
-    # with correct arguments to generate app-aot snapshot.
-    script = invoker.input
-    output = invoker.output
-    outputs = [
-      output,
-    ]
-    vm_args = [
-      "--no-preview-dart-2",
-      "--print-precompiler-entry-points=" + rebase_path(output),
-      "--snapshot=" + rebase_path("$target_gen_dir/dummy.snapshot"),
-      "--snapshot-kind=app-aot",
-      "--use-blobs",
-      "--snapshot-kind=app-aot",
-    ] + extra_args
-    args = []
-  }
-}
-
-# Template to copy checked-in extra entry points JSON file.
-#
-# This template expects the following argument:
-#  - output: Target destination for the extra entry points JSON file.
-#
-template("copy_entry_points_extra_json") {
-  assert(defined(invoker.output), "Must define output json file")
-  copy(target_name) {
-    sources = [ "$_dart_root/pkg/vm/lib/transformations/type_flow/entry_points_extra.json" ]
-    outputs = [ invoker.output ]
-  }
-}
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index bcab702..3d9a72a 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -78,15 +78,13 @@
     output,
   ]
 
-  # Enable this when the prebuilt SDK rolls to pick up the fix for
-  # Issue #34026.
-  # depfile = "$target_gen_dir/kernel_service_dill.d"
-  # abs_depfile = rebase_path(depfile)
-  # abs_output = rebase_path(output)
-  # vm_args = [
-  #   "--depfile=$abs_depfile",
-  #   "--depfile_output_filename=$abs_output",
-  # ]
+  depfile = "$root_gen_dir/kernel_service_dill.d"
+  abs_depfile = rebase_path(depfile)
+  rebased_output = rebase_path(output, root_out_dir)
+  vm_args = [
+    "--depfile=$abs_depfile",
+    "--depfile_output_filename=$rebased_output",
+  ]
 
   script = gen_kernel_script
 
