diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 2056f5c..f1d3c51 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -1475,12 +1475,6 @@
       return;
     }
 
-    // We can inline the list of our children only into another list.
-    var widgetParentNode = widgetCreation.parent;
-    if (widgetParentNode is! ListLiteral) {
-      return;
-    }
-
     // Prepare the list of our children.
     List<Expression> childrenExpressions;
     {
@@ -1494,6 +1488,12 @@
       }
     }
 
+    // We can inline the list of our children only into another list.
+    var widgetParentNode = widgetCreation.parent;
+    if (childrenExpressions.length > 1 && widgetParentNode is! ListLiteral) {
+      return;
+    }
+
     DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
     await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
       var firstChild = childrenExpressions.first;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 9bd531c..46227d3 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -16,6 +16,7 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/utilities/flutter.dart' as flutter;
+import 'package:analyzer/context/context_root.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
@@ -3216,30 +3217,24 @@
    * Return `true` if the [source] can be imported into [unitLibraryFile].
    */
   bool _isSourceVisibleToLibrary(Source source) {
-    if (!source.uri.isScheme('file')) {
+    String path = source.fullName;
+
+    ContextRoot contextRoot = driver.contextRoot;
+    if (contextRoot == null) {
       return true;
     }
 
-    // Prepare the root of our package.
-    Folder packageRoot;
-    for (Folder folder = unitLibraryFolder;
-        folder != null;
-        folder = folder.parent) {
-      if (folder.getChildAssumingFile('pubspec.yaml').exists ||
-          folder.getChildAssumingFile('BUILD').exists) {
-        packageRoot = folder;
-        break;
-      }
-    }
-
-    // This should be rare / never situation.
-    if (packageRoot == null) {
-      return true;
+    // We don't want to use private libraries of other packages.
+    if (source.uri.isScheme('package') && _isLibSrcPath(path)) {
+      return resourceProvider.pathContext.isWithin(contextRoot.root, path);
     }
 
     // We cannot use relative URIs to reference files outside of our package.
-    return resourceProvider.pathContext
-        .isWithin(packageRoot.path, source.fullName);
+    if (source.uri.isScheme('file')) {
+      return resourceProvider.pathContext.isWithin(contextRoot.root, path);
+    }
+
+    return true;
   }
 
   /**
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 069e2b0..3ec06b6 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -4,6 +4,7 @@
 
 import 'dart:async';
 
+import 'package:analyzer/context/context_root.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/visitor.dart';
@@ -114,7 +115,7 @@
         resourceProvider,
         new MemoryByteStore(),
         _fileContentOverlay,
-        null,
+        new ContextRoot(resourceProvider.convertPath('/project'), []),
         sourceFactory,
         new AnalysisOptionsImpl()..strongMode = true);
     scheduler.start();
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 684506f..92c67e2 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -110,22 +110,25 @@
   }
 
   test_suggestImportFromDifferentAnalysisRoot() async {
-    // Set up two projects.
-    newFolder("/project1");
-    newFolder("/project2");
+    newFolder('/aaa');
+    newFile('/aaa/.packages', content: '''
+aaa:${resourceProvider.convertPath('/aaa/lib')}
+bbb:${resourceProvider.convertPath('/bbb/lib')}
+''');
+    // Ensure that the target is analyzed as an implicit source.
+    newFile('/aaa/lib/foo.dart', content: 'import "package:bbb/target.dart";');
+
+    newFolder('/bbb');
+    newFile('/bbb/lib/target.dart', content: 'class Foo() {}');
+
     handleSuccessfulRequest(
-        new AnalysisSetAnalysisRootsParams(["/project1", "/project2"], [])
-            .toRequest('0'),
+        new AnalysisSetAnalysisRootsParams(['/aaa', '/bbb'], []).toRequest('0'),
         handler: analysisHandler);
 
-    // Set up files.
-    testFile = resourceProvider.convertPath('/project1/main.dart');
-    testCode = 'main() { print(new Foo()); }';
+    // Configure the test file.
+    testFile = resourceProvider.convertPath('/aaa/main.dart');
+    testCode = 'main() { new Foo(); }';
     _addOverlay(testFile, testCode);
-    // Add another file in the same project that imports the target file.
-    // This ensures it will be analyzed as an implicit Source.
-    _addOverlay('/project1/another.dart', 'import "../project2/target.dart";');
-    _addOverlay('/project2/target.dart', 'class Foo() {}');
 
     await waitForTasksFinished();
 
@@ -134,7 +137,7 @@
         .fixes
         .map((f) => f.message)
         .toList();
-    expect(fixes, contains("Import library '../project2/target.dart'"));
+    expect(fixes, contains("Import library 'package:bbb/target.dart'"));
   }
 
   void _addOverlay(String name, String contents) {
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 35ff0a3..5518646 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -85,19 +85,6 @@
     await assertNoAssist(kind);
   }
 
-  Position expectedPosition(String search) {
-    int offset = resultCode.indexOf(search);
-    return new Position(testFile, offset);
-  }
-
-  List<Position> expectedPositions(List<String> patterns) {
-    List<Position> positions = <Position>[];
-    patterns.forEach((String search) {
-      positions.add(expectedPosition(search));
-    });
-    return positions;
-  }
-
   List<LinkedEditSuggestion> expectedSuggestions(
       LinkedEditSuggestionKind kind, List<String> values) {
     return values.map((value) {
@@ -2874,7 +2861,7 @@
 ''');
   }
 
-  test_flutterRemoveWidget_BAD_childrenIntoChild() async {
+  test_flutterRemoveWidget_BAD_childrenMultipleIntoChild() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -2995,6 +2982,52 @@
 ''');
   }
 
+  test_flutterRemoveWidget_OK_childrenOneIntoChild() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Center(
+    child: /*caret*/new Column(
+      children: [
+        new Text('foo'),
+      ],
+    ),
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REMOVE_WIDGET, '''
+import 'package:flutter/material.dart';
+main() {
+  new Center(
+    child: /*caret*/new Text('foo'),
+  );
+}
+''');
+  }
+
+  test_flutterRemoveWidget_OK_childrenOneIntoReturn() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  return /*caret*/new Column(
+    children: [
+      new Text('foo'),
+    ],
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REMOVE_WIDGET, '''
+import 'package:flutter/material.dart';
+main() {
+  return /*caret*/new Text('foo');
+}
+''');
+  }
+
   test_flutterRemoveWidget_OK_intoChildren() async {
     addFlutterPackage();
     await resolveTestUnit('''
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 4402f49..e3d6398 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -105,19 +105,6 @@
     }
   }
 
-  Position expectedPosition(String search) {
-    int offset = resultCode.indexOf(search);
-    return new Position(testFile, offset);
-  }
-
-  List<Position> expectedPositions(List<String> patterns) {
-    List<Position> positions = <Position>[];
-    patterns.forEach((String search) {
-      positions.add(expectedPosition(search));
-    });
-    return positions;
-  }
-
   List<LinkedEditSuggestion> expectedSuggestions(
       LinkedEditSuggestionKind kind, List<String> values) {
     return values.map((value) {
@@ -3562,35 +3549,26 @@
 ''');
   }
 
-  test_importLibraryPackage_preferPublicOverPrivate() async {
-    _configureMyPkg(
-        {'src/a.dart': 'class Test {}', 'b.dart': "export 'src/a.dart';"});
+  test_importLibraryProject_BAD_inLibSrc_differentContextRoot() async {
+    addPackageSource('bbb', 'b1.dart', r'''
+import 'src/b2.dart';
+''');
+    addPackageSource('bbb', 'src/b2.dart', 'class Test {}');
     await resolveTestUnit('''
+import 'package:bbb/b1.dart';
 main() {
-  Test test = null;
+  Test t;
 }
 ''');
-    await assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT2, '''
-import 'package:my_pkg/b.dart';
-
-main() {
-  Test test = null;
-}
-''');
-    await assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT3, '''
-import 'package:my_pkg/src/a.dart';
-
-main() {
-  Test test = null;
-}
-''');
+    errorFilter = (AnalysisError error) {
+      return error.errorCode == StaticWarningCode.UNDEFINED_CLASS;
+    };
+    await assertNoFix(DartFixKind.IMPORT_LIBRARY_PROJECT3);
   }
 
   test_importLibraryProject_BAD_notInLib_BUILD() async {
-    testFile = '/aaa/bin/test.dart';
-    newFile('/aaa/BUILD');
-    newFile('/bbb/BUILD');
-    addSource('/bbb/test/lib.dart', 'class Test {}');
+    testFile = '/project/lib/test.dart';
+    addSource('/other/test/lib.dart', 'class Test {}');
     await resolveTestUnit('''
 main() {
   Test t;
@@ -3600,10 +3578,8 @@
   }
 
   test_importLibraryProject_BAD_notInLib_pubspec() async {
-    testFile = '/aaa/bin/test.dart';
-    newFile('/aaa/pubspec.yaml', content: 'name: aaa');
-    newFile('/bbb/pubspec.yaml', content: 'name: bbb');
-    addSource('/bbb/test/lib.dart', 'class Test {}');
+    testFile = '/project/lib/test.dart';
+    addSource('/other/test/lib.dart', 'class Test {}');
     await resolveTestUnit('''
 main() {
   Test t;
@@ -3612,8 +3588,30 @@
     await assertNoFix(DartFixKind.IMPORT_LIBRARY_PROJECT1);
   }
 
+  test_importLibraryProject_OK_inLibSrc_thisContextRoot() async {
+    testFile = '/project/lib/test.dart';
+    packageMap['project'] = [newFolder('/project/lib')];
+    addSource('/project/lib/src/lib.dart', 'class Test {}');
+    await resolveTestUnit('''
+main() {
+  Test t;
+}
+''');
+    errorFilter = (AnalysisError error) {
+      return error.errorCode == StaticWarningCode.UNDEFINED_CLASS;
+    };
+    await assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT3, '''
+import 'package:project/src/lib.dart';
+
+main() {
+  Test t;
+}
+''');
+  }
+
   test_importLibraryProject_withClass_annotation() async {
-    addSource('/lib.dart', '''
+    testFile = '/project/lib/test.dart';
+    addSource('/project/lib/lib.dart', '''
 library lib;
 class Test {
   const Test(int p);
@@ -3634,7 +3632,8 @@
   }
 
   test_importLibraryProject_withClass_constInstanceCreation() async {
-    addSource('/lib.dart', '''
+    testFile = '/project/lib/test.dart';
+    addSource('/project/lib/lib.dart', '''
 class Test {
   const Test();
 }
@@ -3742,7 +3741,8 @@
   }
 
   test_importLibraryProject_withFunction() async {
-    addSource('/lib.dart', '''
+    testFile = '/project/lib/test.dart';
+    addSource('/project/lib/lib.dart', '''
 library lib;
 myFunction() {}
 ''');
@@ -3761,7 +3761,8 @@
   }
 
   test_importLibraryProject_withFunction_unresolvedMethod() async {
-    addSource('/lib.dart', '''
+    testFile = '/project/lib/test.dart';
+    addSource('/project/lib/lib.dart', '''
 library lib;
 myFunction() {}
 ''');
@@ -3804,7 +3805,8 @@
   }
 
   test_importLibraryProject_withTopLevelVariable() async {
-    addSource('/lib.dart', '''
+    testFile = '/project/lib/test.dart';
+    addSource('/project/lib/lib.dart', '''
 library lib;
 int MY_VAR = 42;
 ''');
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 2314617..1812123 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -40,27 +40,6 @@
 }
 
 /**
- * Return a (semi-)canonicalized version of [path] for the purpose of analysis.
- *
- * Using the built-in path's [canonicalize] results in fully lowercase paths on
- * Windows displayed to the user so this method uses [normalize] and then just
- * uppercases the drive letter on Windows to resolve the most common issues.
- */
-String _canonicalize(String path) {
-  path = normalize(path);
-  // Ideally we'd call path's [canonicalize] here to ensure that on
-  // case-insensitive file systems that different casing paths resolved to the
-  // same thing; however these paths are used both as both as part of the
-  // identity and also to display to users in error messages so for now we only
-  // canonicalize the drive letter to resolve the most common issues.
-  // https://github.com/dart-lang/sdk/issues/32095
-  if (io.Platform.isWindows && isAbsolute(path)) {
-    path = path.substring(0, 1).toUpperCase() + path.substring(1);
-  }
-  return path;
-}
-
-/**
 * The name of the directory containing plugin specific subfolders used to
 * store data across sessions.
 */
@@ -111,13 +90,13 @@
 
   @override
   File getFile(String path) {
-    path = _canonicalize(path);
+    path = normalize(path);
     return new _PhysicalFile(new io.File(path));
   }
 
   @override
   Folder getFolder(String path) {
-    path = _canonicalize(path);
+    path = normalize(path);
     return new _PhysicalFolder(new io.Directory(path));
   }
 
@@ -276,7 +255,7 @@
 
   @override
   String canonicalizePath(String relPath) {
-    return _canonicalize(join(path, relPath));
+    return normalize(join(path, relPath));
   }
 
   @override
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index a23bf85..d5c019a 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -44,8 +44,8 @@
     for (var root in roots) {
       if (root != null && p.url.isWithin(root, sourceUrl)) {
         var relative = p.url.relative(sourceUrl, from: root);
-        if (relative.startsWith('dart:')) {
-          sourceUrl = relative;
+        if (relative.contains('dart:')) {
+          sourceUrl = relative.substring(relative.indexOf('dart:'));
           break;
         }
         var packageRoot = '$root/packages';
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 f5ad752..269228d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -7,18 +7,6 @@
 // ignore: UNDEFINED_HIDDEN_NAME
 import 'dart:core' hide MapEntry;
 
-import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
-
-import 'package:kernel/type_algebra.dart' show instantiateToBounds;
-
-import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
-
-import 'package:kernel/clone.dart' show CloneVisitor;
-
-import 'package:kernel/core_types.dart' show CoreTypes;
-
-import 'package:kernel/transformations/flags.dart' show TransformerFlag;
-
 import '../fasta_codes.dart' as fasta;
 
 import '../fasta_codes.dart'
@@ -85,13 +73,21 @@
 
 import 'utils.dart' show offsetForToken;
 
+import 'forest.dart' show Forest;
+
+import 'fangorn.dart' show Fangorn;
+
 import '../names.dart';
 
 import 'fasta_accessors.dart';
 
+import 'kernel_api.dart';
+
+import 'kernel_ast_api.dart';
+
 import 'kernel_builder.dart';
 
-import 'kernel_shadow_ast.dart';
+final Forest<Expression, Statement> _forest = new Fangorn();
 
 class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
   @override
@@ -110,6 +106,7 @@
   final Scope enclosingScope;
 
   final bool enableNative;
+
   final bool stringExpectedAfterNative;
 
   /// Whether to ignore an unresolved reference to `main` within the body of
@@ -209,6 +206,9 @@
         typePromoter = _typeInferrer.typePromoter,
         super(scope);
 
+  @override
+  Forest<Expression, Statement> get forest => _forest;
+
   bool get hasParserError => recoverableErrors.isNotEmpty;
 
   bool get inConstructor {
@@ -1463,7 +1463,7 @@
     if (value == null) {
       push(new LargeIntAccessor(this, token));
     } else {
-      push(new ShadowIntLiteral(value)..fileOffset = offsetForToken(token));
+      push(forest.literalInt(value, offsetForToken(token)));
     }
   }
 
@@ -2231,8 +2231,7 @@
           int value =
               int.parse("-" + receiver.token.lexeme, onError: (_) => null);
           if (value != null) {
-            push(new ShadowIntLiteral(value)
-              ..fileOffset = offsetForToken(token));
+            push(forest.literalInt(value, offsetForToken(token)));
             return;
           }
         }
@@ -3434,13 +3433,17 @@
   Expression buildFallThroughError(int charOffset) {
     addProblem(fasta.messageSwitchCaseFallThrough, charOffset);
 
+    // TODO(ahe): The following doesn't make sense for the Analyzer. It should
+    // be moved to [Forest] or conditional on `forest is Fangorn`.
+
+    // TODO(ahe): Compute a LocatedMessage above instead?
     Location location = messages.getLocationFromUri(uri, charOffset);
 
     return new Throw(buildStaticInvocation(
         library.loader.coreTypes.fallThroughErrorUrlAndLineConstructor,
         new Arguments(<Expression>[
           new StringLiteral("${location?.file ?? uri}"),
-          new IntLiteral(location?.line ?? 0)
+          forest.literalInt(location?.line ?? 0, charOffset),
         ]),
         charOffset: charOffset));
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
new file mode 100644
index 0000000..f102ac7
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library fasta.fangorn;
+
+import 'kernel_shadow_ast.dart';
+
+import 'forest.dart' show Forest;
+
+/// A shadow tree factory.
+class Fangorn extends Forest<ShadowExpression, ShadowStatement> {
+  @override
+  ShadowExpression literalInt(int value, int offset) {
+    return new ShadowIntLiteral(value)..fileOffset = offset;
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index a838287..27d8092 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -4,8 +4,6 @@
 
 library fasta.fasta_accessors;
 
-import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
-
 import '../../scanner/token.dart' show Token;
 
 import '../fasta_codes.dart'
@@ -27,6 +25,8 @@
 
 import '../type_inference/type_promotion.dart' show TypePromoter;
 
+import 'forest.dart' show Forest;
+
 import 'frontend_accessors.dart' as kernel
     show
         IndexAccessor,
@@ -45,6 +45,8 @@
 
 import 'frontend_accessors.dart' show Accessor;
 
+import 'kernel_ast_api.dart';
+
 import 'kernel_builder.dart'
     show
         Builder,
@@ -60,18 +62,6 @@
         TypeDeclarationBuilder,
         KernelTypeBuilder;
 
-import 'kernel_shadow_ast.dart'
-    show
-        ShadowArguments,
-        ShadowComplexAssignment,
-        ShadowIllegalAssignment,
-        ShadowIndexAssign,
-        ShadowPropertyAssign,
-        ShadowStaticAssignment,
-        ShadowThisExpression,
-        ShadowTypeLiteral,
-        ShadowVariableAssignment;
-
 import 'utils.dart' show offsetForToken;
 
 import 'type_algorithms.dart' show calculateBoundsForDeclaration;
@@ -87,6 +77,8 @@
 
   bool get constantExpressionRequired;
 
+  Forest<Expression, Statement> get forest;
+
   Constructor lookupConstructor(Name name, {bool isSuper});
 
   Expression toValue(node);
@@ -325,7 +317,10 @@
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
       Procedure interfaceTarget}) {
-    return buildError(new ShadowArguments(<Expression>[new IntLiteral(1)]),
+    // TODO(ahe): For the Analyzer, we probably need to build a prefix
+    // increment node that wraps an error.
+    return buildError(
+        new ShadowArguments(<Expression>[helper.forest.literalInt(1, offset)]),
         isGetter: true);
   }
 
@@ -334,7 +329,10 @@
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
       Procedure interfaceTarget}) {
-    return buildError(new ShadowArguments(<Expression>[new IntLiteral(1)]),
+    // TODO(ahe): For the Analyzer, we probably need to build a post increment
+    // node that wraps an error.
+    return buildError(
+        new ShadowArguments(<Expression>[helper.forest.literalInt(1, offset)]),
         isGetter: true);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
new file mode 100644
index 0000000..283d8cc
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library fasta.forest;
+
+/// A tree factory.
+abstract class Forest<Expression, Statement> {
+  Expression literalInt(int value, int offset);
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart
new file mode 100644
index 0000000..7d5877f
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This library exports all API from Kernel that can be used throughout fasta.
+library fasta.kernel_api;
+
+export 'package:kernel/type_algebra.dart' show instantiateToBounds;
+
+export 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+
+export 'package:kernel/clone.dart' show CloneVisitor;
+
+export 'package:kernel/core_types.dart' show CoreTypes;
+
+export 'package:kernel/transformations/flags.dart' show TransformerFlag;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
new file mode 100644
index 0000000..472ab0b
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -0,0 +1,131 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This library exports all API from Kernel's ast.dart that can be used
+/// throughout fasta.
+library fasta.kernel_ast_api;
+
+export 'package:kernel/ast.dart'
+    show
+        Arguments,
+        AssertStatement,
+        AsyncMarker,
+        Block,
+        BreakStatement,
+        Catch,
+        CheckLibraryIsLoaded,
+        Class,
+        ConditionalExpression,
+        Constructor,
+        ConstructorInvocation,
+        ContinueSwitchStatement,
+        DartType,
+        DynamicType,
+        EmptyStatement,
+        Expression,
+        ExpressionStatement,
+        Field,
+        FunctionDeclaration,
+        FunctionNode,
+        FunctionType,
+        Initializer,
+        InvalidType,
+        LabeledStatement,
+        Let,
+        Library,
+        Location,
+        MapEntry,
+        Member,
+        MethodInvocation,
+        Name,
+        NamedExpression,
+        NamedType,
+        NullLiteral,
+        Procedure,
+        ProcedureKind,
+        Rethrow,
+        ReturnStatement,
+        Statement,
+        StaticGet,
+        StringConcatenation,
+        StringLiteral,
+        SuperInitializer,
+        SwitchCase,
+        ThisExpression,
+        Throw,
+        TreeNode,
+        TypeParameter,
+        TypeParameterType,
+        VariableDeclaration,
+        VariableGet,
+        VoidType,
+        setParents;
+
+export 'kernel_shadow_ast.dart'
+    show
+        ShadowArguments,
+        ShadowAsExpression,
+        ShadowAssertInitializer,
+        ShadowAssertStatement,
+        ShadowAwaitExpression,
+        ShadowBlock,
+        ShadowBoolLiteral,
+        ShadowBreakStatement,
+        ShadowCascadeExpression,
+        ShadowComplexAssignment,
+        ShadowConditionalExpression,
+        ShadowConstructorInvocation,
+        ShadowContinueSwitchStatement,
+        ShadowDeferredCheck,
+        ShadowDoStatement,
+        ShadowDoubleLiteral,
+        ShadowExpressionStatement,
+        ShadowFactoryConstructorInvocation,
+        ShadowFieldInitializer,
+        ShadowForInStatement,
+        ShadowForStatement,
+        ShadowFunctionDeclaration,
+        ShadowFunctionExpression,
+        ShadowIfNullExpression,
+        ShadowIfStatement,
+        ShadowIllegalAssignment,
+        ShadowIndexAssign,
+        ShadowInvalidInitializer,
+        ShadowIsExpression,
+        ShadowIsNotExpression,
+        ShadowLabeledStatement,
+        ShadowListLiteral,
+        ShadowLogicalExpression,
+        ShadowLoopAssignmentStatement,
+        ShadowMapLiteral,
+        ShadowMethodInvocation,
+        ShadowNamedFunctionExpression,
+        ShadowNot,
+        ShadowNullAwareMethodInvocation,
+        ShadowNullLiteral,
+        ShadowPropertyAssign,
+        ShadowRedirectingInitializer,
+        ShadowRethrow,
+        ShadowReturnStatement,
+        ShadowStaticAssignment,
+        ShadowStaticGet,
+        ShadowStaticInvocation,
+        ShadowStringConcatenation,
+        ShadowStringLiteral,
+        ShadowSuperInitializer,
+        ShadowSuperMethodInvocation,
+        ShadowSuperPropertyGet,
+        ShadowSwitchStatement,
+        ShadowSymbolLiteral,
+        ShadowSyntheticExpression,
+        ShadowThisExpression,
+        ShadowThrow,
+        ShadowTryCatch,
+        ShadowTryFinally,
+        ShadowTypeLiteral,
+        ShadowVariableAssignment,
+        ShadowVariableDeclaration,
+        ShadowVariableGet,
+        ShadowWhileStatement,
+        ShadowYieldStatement;
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 8c40e68..6bba731 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -85,6 +85,12 @@
   LibraryBuilder read(Uri uri, int charOffset,
       {Uri fileUri, LibraryBuilder accessor, LibraryBuilder origin}) {
     LibraryBuilder builder = builders.putIfAbsent(uri, () {
+      if (fileUri != null &&
+          (fileUri.scheme == "dart" ||
+              fileUri.scheme == "package" ||
+              fileUri.scheme == "dart-ext")) {
+        fileUri = null;
+      }
       if (fileUri == null) {
         switch (uri.scheme) {
           case "package":
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 ab381f5..cc8fd0a 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
@@ -276,9 +276,7 @@
     Uri resolvedUri;
     Uri newFileUri;
     resolvedUri = resolve(this.uri, uri, charOffset, isPart: true);
-    if (this.uri.scheme != "package") {
-      newFileUri = resolve(fileUri, uri, charOffset);
-    }
+    newFileUri = resolve(fileUri, uri, charOffset);
     parts.add(loader.read(resolvedUri, charOffset,
         fileUri: newFileUri, accessor: this));
   }
diff --git a/pkg/front_end/lib/src/fasta/uri_translator_impl.dart b/pkg/front_end/lib/src/fasta/uri_translator_impl.dart
index 78d9e26..9d31710 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator_impl.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator_impl.dart
@@ -47,15 +47,7 @@
   /// if there is no corresponding Dart library registered.
   Uri _translateDartUri(Uri uri) {
     if (!uri.isScheme('dart')) return null;
-    String path = uri.path;
-
-    int index = path.indexOf('/');
-    if (index == -1) return dartLibraries.libraryInfoFor(path)?.uri;
-
-    String libraryName = path.substring(0, index);
-    String relativePath = path.substring(index + 1);
-    Uri libraryFileUri = dartLibraries.libraryInfoFor(libraryName).uri;
-    return libraryFileUri?.resolve(relativePath);
+    return dartLibraries.libraryInfoFor(uri.path)?.uri;
   }
 
   /// Return the file URI that corresponds to the given `package` URI, or
diff --git a/pkg/front_end/test/fasta/uri_translator_test.dart b/pkg/front_end/test/fasta/uri_translator_test.dart
index cb04561..455d771 100644
--- a/pkg/front_end/test/fasta/uri_translator_test.dart
+++ b/pkg/front_end/test/fasta/uri_translator_test.dart
@@ -40,8 +40,7 @@
   void test_translate_dart() {
     expect(translator.translate(Uri.parse('dart:core')),
         Uri.parse('org-dartlang-test:///sdk/core/core.dart'));
-    expect(translator.translate(Uri.parse('dart:core/string.dart')),
-        Uri.parse('org-dartlang-test:///sdk/core/string.dart'));
+    expect(translator.translate(Uri.parse('dart:core/string.dart')), null);
 
     expect(translator.translate(Uri.parse('dart:math')),
         Uri.parse('org-dartlang-test:///sdk/math/math.dart'));
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index a25d6be..f3404a3 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -56,22 +56,29 @@
   ///
   /// An /argument/ is something that isn't an option, for example, a file name.
   ///
-  /// The specification is a map of options to one of the type literals `Uri`,
-  /// `int`, `bool`, or `String`, or a comma (`","`) that represents option
-  /// values of type [Uri], [int], [bool], [String], or a comma-separated list
-  /// of [String], respectively.
+  /// The specification is a map of options to one of the following values:
+  /// * the type literal `Uri`, representing an option value of type [Uri],
+  /// * the type literal `int`, representing an option value of type [int],
+  /// * the bool literal `false`, representing a boolean option that is turned
+  ///   off by default,
+  /// * the bool literal `true, representing a boolean option that is turned on
+  ///   by default,
+  /// * or the string literal `","`, representing a comma-separated list of
+  ///   values.
   ///
   /// If [arguments] contains `"--"`, anything before is parsed as options, and
   /// arguments; anything following is treated as arguments (even if starting
   /// with, for example, a `-`).
   ///
-  /// Anything that looks like an option is assumed to be a `bool` option set
-  /// to true, unless it's mentioned in [specification] in which case the
-  /// option requires a value, either on the form `--option value` or
-  /// `--option=value`.
+  /// If an option isn't found in [specification], an error is thrown.
   ///
-  /// This method performs only a limited amount of validation, but if an error
-  /// occurs, it will print [usage] along with a specific error message.
+  /// Boolean options do not require an option value, but an optional value can
+  /// be provided using the forms `--option=value` where `value` can be `true`
+  /// or `yes` to turn on the option, or `false` or `no` to turn it off.  If no
+  /// option value is specified, a boolean option is turned on.
+  ///
+  /// All other options require an option value, either on the form `--option
+  /// value` or `--option=value`.
   static ParsedArguments parse(
       List<String> arguments, Map<String, dynamic> specification) {
     specification ??= const <String, dynamic>{};
@@ -85,109 +92,134 @@
     }
     while (iterator.moveNext()) {
       String argument = iterator.current;
-      if (argument.startsWith("-")) {
-        var valueSpecification = specification[argument];
+      if (argument.startsWith("-") || argument == "/?" || argument == "/h") {
+        index = argument.indexOf("=");
         String value;
-        if (valueSpecification != null) {
+        if (index != -1) {
+          value = argument.substring(index + 1);
+          argument = argument.substring(0, index);
+        }
+        var valueSpecification = specification[argument];
+        if (valueSpecification == null) {
+          throw new CommandLineProblem.deprecated(
+              "Unknown option '$argument'.");
+        }
+        String canonicalArgument = argument;
+        if (valueSpecification is String && valueSpecification != ",") {
+          canonicalArgument = valueSpecification;
+          valueSpecification = specification[valueSpecification];
+        }
+        if (valueSpecification == true || valueSpecification == false) {
+          valueSpecification = bool;
+        }
+        if (valueSpecification is! String && valueSpecification is! Type) {
+          throw new CommandLineProblem.deprecated("Unrecognized type of value "
+              "specification: ${valueSpecification.runtimeType}.");
+        }
+        final bool requiresValue = valueSpecification != bool;
+        if (requiresValue && value == null) {
           if (!iterator.moveNext()) {
             throw new CommandLineProblem(
                 templateFastaCLIArgumentRequired.withArguments(argument));
           }
           value = iterator.current;
-        } else {
-          index = argument.indexOf("=");
-          if (index != -1) {
-            value = argument.substring(index + 1);
-            argument = argument.substring(0, index);
-            valueSpecification = specification[argument];
-          }
         }
-        if (valueSpecification == null) {
-          if (value != null) {
-            throw new CommandLineProblem.deprecated(
-                "Option '$argument' doesn't take a value: '$value'.");
-          }
-          result.options[argument] = true;
-        } else {
-          if (valueSpecification is! String && valueSpecification is! Type) {
-            return throw new CommandLineProblem.deprecated(
-                "Unrecognized type of value "
-                "specification: ${valueSpecification.runtimeType}.");
-          }
-          switch ("$valueSpecification") {
-            case ",":
-              result.options
-                  .putIfAbsent(argument, () => <String>[])
-                  .addAll(value.split(","));
-              break;
+        switch ("$valueSpecification") {
+          case ",":
+            result.options
+                .putIfAbsent(argument, () => <String>[])
+                .addAll(value.split(","));
+            break;
 
-            case "int":
-            case "bool":
-            case "String":
-            case "Uri":
-              if (result.options.containsKey(argument)) {
-                return throw new CommandLineProblem.deprecated(
-                    "Multiple values for '$argument': "
-                    "'${result.options[argument]}' and '$value'.");
-              }
-              var parsedValue;
-              if (valueSpecification == int) {
-                parsedValue = int.parse(value, onError: (_) {
-                  return throw new CommandLineProblem.deprecated(
-                      "Value for '$argument', '$value', isn't an int.");
-                });
-              } else if (valueSpecification == bool) {
-                if (value == "true" || value == "yes") {
-                  parsedValue = true;
-                } else if (value == "false" || value == "no") {
-                  parsedValue = false;
-                } else {
-                  return throw new CommandLineProblem.deprecated(
-                      "Value for '$argument' is '$value', "
-                      "but expected one of: 'true', 'false', 'yes', or 'no'.");
-                }
-              } else if (valueSpecification == Uri) {
-                parsedValue = Uri.base.resolveUri(new Uri.file(value));
-              } else if (valueSpecification == String) {
-                parsedValue = value;
-              } else if (valueSpecification is String) {
-                return throw new CommandLineProblem.deprecated(
-                    "Unrecognized value specification: "
-                    "'$valueSpecification', try using a type literal instead.");
-              } else {
-                // All possible cases should have been handled above.
-                return unhandled("${valueSpecification.runtimeType}",
-                    "CommandLine.parse", -1, null);
-              }
-              result.options[argument] = parsedValue;
-              break;
-
-            default:
+          case "int":
+          case "bool":
+          case "String":
+          case "Uri":
+            if (result.options.containsKey(canonicalArgument)) {
               return throw new CommandLineProblem.deprecated(
-                  "Unrecognized value specification: '$valueSpecification'.");
-          }
+                  "Multiple values for '$argument': "
+                  "'${result.options[canonicalArgument]}' and '$value'.");
+            }
+            var parsedValue;
+            if (valueSpecification == int) {
+              parsedValue = int.parse(value, onError: (_) {
+                return throw new CommandLineProblem.deprecated(
+                    "Value for '$argument', '$value', isn't an int.");
+              });
+            } else if (valueSpecification == bool) {
+              if (value == null || value == "true" || value == "yes") {
+                parsedValue = true;
+              } else if (value == "false" || value == "no") {
+                parsedValue = false;
+              } else {
+                return throw new CommandLineProblem.deprecated(
+                    "Value for '$argument' is '$value', "
+                    "but expected one of: 'true', 'false', 'yes', or 'no'.");
+              }
+            } else if (valueSpecification == Uri) {
+              parsedValue = Uri.base.resolveUri(new Uri.file(value));
+            } else if (valueSpecification == String) {
+              parsedValue = value;
+            } else if (valueSpecification is String) {
+              return throw new CommandLineProblem.deprecated(
+                  "Unrecognized value specification: "
+                  "'$valueSpecification', try using a type literal instead.");
+            } else {
+              // All possible cases should have been handled above.
+              return unhandled("${valueSpecification.runtimeType}",
+                  "CommandLine.parse", -1, null);
+            }
+            result.options[canonicalArgument] = parsedValue;
+            break;
+
+          default:
+            return throw new CommandLineProblem.deprecated(
+                "Unrecognized value specification: '$valueSpecification'.");
         }
-      } else if (argument == "/?" || argument == "/h") {
-        result.options[argument] = true;
       } else {
         result.arguments.add(argument);
       }
     }
+    specification.forEach((String key, value) {
+      if (value == bool) {
+        result.options[key] ??= false;
+      } else if (value is bool) {
+        result.options[key] ??= value;
+      }
+    });
     result.arguments.addAll(nonOptions);
     return result;
   }
 }
 
+// Before adding new options here, you must:
+//  * Document the option.
+//  * Get an explicit approval from the front-end team.
 const Map<String, dynamic> optionSpecification = const <String, dynamic>{
   "--compile-sdk": Uri,
+  "--dump-ir": false,
+  "--exclude-source": false,
   "--fatal": ",",
+  "--help": false,
+  "--legacy": "--legacy-mode",
+  "--legacy-mode": true,
+  "--libraries-json": Uri,
   "--output": Uri,
-  "-o": Uri,
   "--packages": Uri,
   "--platform": Uri,
-  "--libraries-json": Uri,
+  "--sdk": Uri,
+  "--strong": "--strong-mode",
+  "--strong-mode": false,
+  "--sync-async": false,
   "--target": String,
-  "-t": String,
+  "--verbose": false,
+  "--verify": false,
+  "-h": "--help",
+  "-o": "--output",
+  "-t": "--target",
+  "-v": "--verbose",
+  "/?": "--help",
+  "/h": "--help",
 };
 
 ProcessedOptions analyzeCommandLine(
@@ -199,38 +231,24 @@
 
   final List<String> arguments = parsedArguments.arguments;
 
-  final bool help = options.containsKey("--help") ||
-      options.containsKey("-h") ||
-      options.containsKey("/h") ||
-      options.containsKey("/?");
+  final bool help = options["--help"];
 
   if (help) {
     print(computeUsage(programName, verbose).message);
     exit(0);
   }
 
-  if (options.containsKey("-o") && options.containsKey("--output")) {
-    return throw new CommandLineProblem.deprecated(
-        "Can't specify both '-o' and '--output'.");
-  }
-
-  if (options.containsKey("-t") && options.containsKey("--target")) {
-    return throw new CommandLineProblem.deprecated(
-        "Can't specify both '-t' and '--target'.");
-  }
-
   if (options.containsKey("--compile-sdk") &&
       options.containsKey("--platform")) {
     return throw new CommandLineProblem.deprecated(
         "Can't specify both '--compile-sdk' and '--platform'.");
   }
 
-  final bool strongMode =
-      options.containsKey("--strong-mode") || options.containsKey("--strong");
+  final bool strongMode = options["--strong-mode"] || !options["--legacy-mode"];
 
-  final bool syncAsync = options.containsKey("--sync-async");
+  final bool syncAsync = options["--sync-async"];
 
-  final String targetName = options["-t"] ?? options["--target"] ?? "vm";
+  final String targetName = options["--target"] ?? "vm";
 
   final TargetFlags flags =
       new TargetFlags(strongMode: strongMode, syncAsync: syncAsync);
@@ -242,11 +260,11 @@
         "Valid targets are:\n  ${targets.keys.join("\n  ")}");
   }
 
-  final bool verify = options.containsKey("--verify");
+  final bool verify = options["--verify"];
 
-  final bool dumpIr = options.containsKey("--dump-ir");
+  final bool dumpIr = options["--dump-ir"];
 
-  final bool excludeSource = options.containsKey("--exclude-source");
+  final bool excludeSource = options["--exclude-source"];
 
   final Uri packages = options["--packages"];
 
@@ -270,10 +288,6 @@
       return throw new CommandLineProblem.deprecated(
           "Cannot specify '--compile-sdk' option to compile_platform.");
     }
-    if (options.containsKey("-o")) {
-      return throw new CommandLineProblem.deprecated(
-          "Cannot specify '-o' option to compile_platform.");
-    }
     if (options.containsKey("--output")) {
       return throw new CommandLineProblem.deprecated(
           "Cannot specify '--output' option to compile_platform.");
@@ -343,14 +357,19 @@
     List<String> arguments,
     bool areRestArgumentsInputs,
     dynamic f(CompilerContext context, List<String> restArguments)) {
+  bool verbose = false;
+  for (String argument in arguments) {
+    if (argument == "--") break;
+    if (argument == "-v" || argument == "--verbose") {
+      verbose = true;
+      break;
+    }
+  }
   ParsedArguments parsedArguments;
   ProcessedOptions options;
-  bool verbose = true;
   CommandLineProblem problem;
   try {
     parsedArguments = ParsedArguments.parse(arguments, optionSpecification);
-    verbose = parsedArguments.options.containsKey("-v") ||
-        parsedArguments.options.containsKey("--verbose");
     options = analyzeCommandLine(
         programName, parsedArguments, areRestArgumentsInputs, verbose);
   } on CommandLineProblem catch (e) {
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index aa54f46..2555edb 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -209,9 +209,6 @@
     DillTarget dillTarget = createDillTarget(uriTranslator);
     KernelTarget kernelTarget =
         createKernelTarget(dillTarget, uriTranslator, c.options.strongMode);
-    if (c.options.strongMode) {
-      print("Note: strong mode support is preliminary and may not work.");
-    }
     Uri platform = c.options.sdkSummary;
     if (platform != null) {
       _appendDillForUri(dillTarget, platform);
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 8ed77d7..1cb3111 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1840,13 +1840,8 @@
     // the bytes buffer is too large to fit in our own buffer, just emit both.
     if (length + bytes.length < SIZE &&
         (bytes.length < SMALL || length < SMALL)) {
-      if (length == 0) {
-        _sink.add(bytes);
-        flushedLength += bytes.length;
-      } else {
-        _buffer.setRange(length, length + bytes.length, bytes);
-        length += bytes.length;
-      }
+      _buffer.setRange(length, length + bytes.length, bytes);
+      length += bytes.length;
     } else if (bytes.length < SMALL) {
       // Flush as much as we can in the current buffer.
       _buffer.setRange(length, SIZE, bytes);
@@ -1860,12 +1855,9 @@
       length = remainder;
       flushedLength += SIZE;
     } else {
-      _sink.add(_buffer.sublist(0, length));
+      flush();
       _sink.add(bytes);
-      _buffer = new Uint8List(SIZE);
-      flushedLength += length;
       flushedLength += bytes.length;
-      length = 0;
     }
   }
 
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index 7361772..d174902 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.h
@@ -91,9 +91,6 @@
   static DART_NORETURN void Exit(int exit_code);
 
  private:
-  static void SaveConsoleConfiguration();
-  static void RestoreConsoleConfiguration();
-
   // The path to the executable.
   static const char* executable_name_;
   // The path to the resolved executable.
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index 9f29cb5..7e3f880 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -7,16 +7,13 @@
 
 #include "bin/platform.h"
 
-#include <errno.h>        // NOLINT
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/utsname.h>  // NOLINT
-#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
-#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -31,53 +28,6 @@
   abort();
 }
 
-class PlatformPosix {
- public:
-  static void SaveConsoleConfiguration() {
-    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
-  }
-
-  static void RestoreConsoleConfiguration() {
-    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
-    stdout_initial_c_lflag_ = -1;
-    stderr_initial_c_lflag_ = -1;
-    stdin_initial_c_lflag_ = -1;
-  }
-
- private:
-  static tcflag_t stdout_initial_c_lflag_;
-  static tcflag_t stderr_initial_c_lflag_;
-  static tcflag_t stdin_initial_c_lflag_;
-
-  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
-    ASSERT(flag != NULL);
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    *flag = term.c_lflag;
-  }
-
-  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    term.c_lflag = flag;
-    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
-  }
-};
-
-tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
-
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -112,7 +62,7 @@
     perror("sigaction() failed.");
     return false;
   }
-  SaveConsoleConfiguration();
+
   return true;
 }
 
@@ -192,18 +142,9 @@
 }
 
 void Platform::Exit(int exit_code) {
-  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
-void Platform::SaveConsoleConfiguration() {
-  PlatformPosix::SaveConsoleConfiguration();
-}
-
-void Platform::RestoreConsoleConfiguration() {
-  PlatformPosix::RestoreConsoleConfiguration();
-}
-
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_fuchsia.cc b/runtime/bin/platform_fuchsia.cc
index 24936b7..cda405e 100644
--- a/runtime/bin/platform_fuchsia.cc
+++ b/runtime/bin/platform_fuchsia.cc
@@ -150,14 +150,6 @@
   exit(exit_code);
 }
 
-void Platform::SaveConsoleConfiguration() {
-  UNIMPLEMENTED();
-}
-
-void Platform::RestoreConsoleConfiguration() {
-  UNIMPLEMENTED();
-}
-
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index b087151..e681f03 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -7,16 +7,13 @@
 
 #include "bin/platform.h"
 
-#include <errno.h>        // NOLINT
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/utsname.h>  // NOLINT
-#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
-#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -31,53 +28,6 @@
   abort();
 }
 
-class PlatformPosix {
- public:
-  static void SaveConsoleConfiguration() {
-    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
-  }
-
-  static void RestoreConsoleConfiguration() {
-    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
-    stdout_initial_c_lflag_ = -1;
-    stderr_initial_c_lflag_ = -1;
-    stdin_initial_c_lflag_ = -1;
-  }
-
- private:
-  static tcflag_t stdout_initial_c_lflag_;
-  static tcflag_t stderr_initial_c_lflag_;
-  static tcflag_t stdin_initial_c_lflag_;
-
-  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
-    ASSERT(flag != NULL);
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    *flag = term.c_lflag;
-  }
-
-  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    term.c_lflag = flag;
-    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
-  }
-};
-
-tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
-
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -112,7 +62,6 @@
     perror("sigaction() failed.");
     return false;
   }
-  SaveConsoleConfiguration();
   return true;
 }
 
@@ -192,18 +141,9 @@
 }
 
 void Platform::Exit(int exit_code) {
-  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
-void Platform::SaveConsoleConfiguration() {
-  PlatformPosix::SaveConsoleConfiguration();
-}
-
-void Platform::RestoreConsoleConfiguration() {
-  PlatformPosix::RestoreConsoleConfiguration();
-}
-
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 3f72398..e563788 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -12,19 +12,16 @@
 #if !HOST_OS_IOS
 #include <crt_externs.h>  // NOLINT
 #endif                    // !HOST_OS_IOS
-#include <errno.h>        // NOLINT
 #include <mach-o/dyld.h>
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/sysctl.h>   // NOLINT
 #include <sys/types.h>    // NOLINT
 #include <sys/utsname.h>  // NOLINT
-#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
-#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -39,53 +36,6 @@
   abort();
 }
 
-class PlatformPosix {
- public:
-  static void SaveConsoleConfiguration() {
-    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
-    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
-  }
-
-  static void RestoreConsoleConfiguration() {
-    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
-    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
-    stdout_initial_c_lflag_ = -1;
-    stderr_initial_c_lflag_ = -1;
-    stdin_initial_c_lflag_ = -1;
-  }
-
- private:
-  static tcflag_t stdout_initial_c_lflag_;
-  static tcflag_t stderr_initial_c_lflag_;
-  static tcflag_t stdin_initial_c_lflag_;
-
-  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
-    ASSERT(flag != NULL);
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    *flag = term.c_lflag;
-  }
-
-  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
-    struct termios term;
-    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
-    if (status != 0) {
-      return;
-    }
-    term.c_lflag = flag;
-    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
-  }
-};
-
-tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
-tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
-
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -119,7 +69,6 @@
     perror("sigaction() failed.");
     return false;
   }
-  SaveConsoleConfiguration();
   return true;
 }
 
@@ -280,18 +229,9 @@
 }
 
 void Platform::Exit(int exit_code) {
-  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
-void Platform::SaveConsoleConfiguration() {
-  PlatformPosix::SaveConsoleConfiguration();
-}
-
-void Platform::RestoreConsoleConfiguration() {
-  PlatformPosix::RestoreConsoleConfiguration();
-}
-
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 8b61246..333d57c 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -47,9 +47,6 @@
     platform_win_mutex_ = new Mutex();
     saved_output_cp_ = -1;
     saved_input_cp_ = -1;
-    saved_stdout_mode_ = -1;
-    saved_stderr_mode_ = -1;
-    saved_stdin_mode_ = -1;
     // Set up a no-op handler so that CRT functions return an error instead of
     // hitting an assertion failure.
     // See: https://msdn.microsoft.com/en-us/library/a9yf33zb.aspx
@@ -86,9 +83,6 @@
     // Set both the input and output code pages to UTF8.
     ASSERT(saved_output_cp_ == -1);
     ASSERT(saved_input_cp_ == -1);
-    ASSERT(saved_stdout_mode_ == -1);
-    ASSERT(saved_stderr_mode_ == -1);
-    ASSERT(saved_stdin_mode_ == -1);
     const int output_cp = GetConsoleOutputCP();
     const int input_cp = GetConsoleCP();
     if (output_cp != CP_UTF8) {
@@ -101,11 +95,12 @@
     }
 
     // Try to set the bits for ANSI support, but swallow any failures.
-    saved_stdout_mode_ =
-        ModifyMode(STD_OUTPUT_HANDLE, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
-    saved_stderr_mode_ = ModifyMode(STD_ERROR_HANDLE, 0);
-    saved_stdin_mode_ = ModifyMode(STD_INPUT_HANDLE, 0);
-
+    HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
+    DWORD out_mode;
+    if ((out != INVALID_HANDLE_VALUE) && GetConsoleMode(out, &out_mode)) {
+      const DWORD request = out_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+      SetConsoleMode(out, request);
+    }
     // TODO(28984): Due to issue #29104, we cannot set
     // ENABLE_VIRTUAL_TERMINAL_INPUT here, as it causes ENABLE_PROCESSED_INPUT
     // to be ignored.
@@ -138,54 +133,43 @@
   static Mutex* platform_win_mutex_;
   static int saved_output_cp_;
   static int saved_input_cp_;
-  static DWORD saved_stdout_mode_;
-  static DWORD saved_stderr_mode_;
-  static DWORD saved_stdin_mode_;
-
-  static DWORD ModifyMode(DWORD handle, DWORD flags) {
-    HANDLE h = GetStdHandle(handle);
-    DWORD mode;
-    DWORD old_mode = 0;
-
-    if ((h != INVALID_HANDLE_VALUE) && GetConsoleMode(h, &mode)) {
-      old_mode = mode;
-      if (flags != 0) {
-        const DWORD request = mode | flags;
-        SetConsoleMode(h, request);
-      }
-    }
-    return old_mode;
-  }
-
-  static void CleanupDevices(const char* device,
-                             DWORD handle,
-                             DWORD orig_flags) {
-    const intptr_t kWideBufLen = 64;
-    wchar_t widebuf[kWideBufLen];
-    int result =
-        MultiByteToWideChar(CP_UTF8, 0, device, -1, widebuf, kWideBufLen);
-    ASSERT(result != 0);
-    HANDLE h = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
-                           FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
-    if (h != INVALID_HANDLE_VALUE) {
-      SetStdHandle(STD_OUTPUT_HANDLE, h);
-      if (orig_flags != -1) {
-        SetConsoleMode(h, orig_flags);
-      }
-    }
-  }
 
   static void RestoreConsoleLocked() {
-    // STD_OUTPUT_HANDLE, STD_ERROR_HANDLE, and STD_INPUT_HANDLE may have been
-    // closed or redirected. Therefore, we explicitly open the CONOUT$, CONERR$
-    // and CONIN$ devices, so that we can be sure that we are really restoring
-    // the console to its original state.
-    CleanupDevices("CONOUT$", STD_OUTPUT_HANDLE, saved_stdout_mode_);
-    saved_stdout_mode_ = -1;
-    CleanupDevices("CONERR$", STD_ERROR_HANDLE, saved_stderr_mode_);
-    saved_stderr_mode_ = -1;
-    CleanupDevices("CONIN$", STD_INPUT_HANDLE, saved_stdin_mode_);
-    saved_stdin_mode_ = -1;
+    // STD_OUTPUT_HANDLE and STD_INPUT_HANDLE may have been closed or
+    // redirected. Therefore, we explicitly open the CONOUT$ and CONIN$
+    // devices, so that we can be sure that we are really unsetting
+    // ENABLE_VIRTUAL_TERMINAL_PROCESSING and ENABLE_VIRTUAL_TERMINAL_INPUT
+    // respectively.
+    const intptr_t kWideBufLen = 64;
+    const char* conout = "CONOUT$";
+    wchar_t widebuf[kWideBufLen];
+    int result =
+        MultiByteToWideChar(CP_UTF8, 0, conout, -1, widebuf, kWideBufLen);
+    ASSERT(result != 0);
+    HANDLE out = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
+                             FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
+    if (out != INVALID_HANDLE_VALUE) {
+      SetStdHandle(STD_OUTPUT_HANDLE, out);
+    }
+    DWORD out_mode;
+    if ((out != INVALID_HANDLE_VALUE) && GetConsoleMode(out, &out_mode)) {
+      DWORD request = out_mode & ~ENABLE_VIRTUAL_TERMINAL_INPUT;
+      SetConsoleMode(out, request);
+    }
+
+    const char* conin = "CONIN$";
+    result = MultiByteToWideChar(CP_UTF8, 0, conin, -1, widebuf, kWideBufLen);
+    ASSERT(result != 0);
+    HANDLE in = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
+                            FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
+    if (in != INVALID_HANDLE_VALUE) {
+      SetStdHandle(STD_INPUT_HANDLE, in);
+    }
+    DWORD in_mode;
+    if ((in != INVALID_HANDLE_VALUE) && GetConsoleMode(in, &in_mode)) {
+      DWORD request = in_mode & ~ENABLE_VIRTUAL_TERMINAL_INPUT;
+      SetConsoleMode(in, request);
+    }
 
     if (saved_output_cp_ != -1) {
       SetConsoleOutputCP(saved_output_cp_);
@@ -212,15 +196,11 @@
 
 int PlatformWin::saved_output_cp_ = -1;
 int PlatformWin::saved_input_cp_ = -1;
-DWORD PlatformWin::saved_stdout_mode_ = -1;
-DWORD PlatformWin::saved_stderr_mode_ = -1;
-DWORD PlatformWin::saved_stdin_mode_ = -1;
-
 Mutex* PlatformWin::platform_win_mutex_ = NULL;
 
 bool Platform::Initialize() {
   PlatformWin::InitOnce();
-  SaveConsoleConfiguration();
+  PlatformWin::SaveAndConfigureConsole();
   return true;
 }
 
@@ -405,20 +385,12 @@
   // TODO(zra): Remove once VM shuts down cleanly.
   ::dart::private_flag_windows_run_tls_destructors = false;
   // Restore the console's output code page
-  RestoreConsoleConfiguration();
+  PlatformWin::RestoreConsole();
   // On Windows we use ExitProcess so that threads can't clobber the exit_code.
   // See: https://code.google.com/p/nativeclient/issues/detail?id=2870
   ::ExitProcess(exit_code);
 }
 
-void Platform::SaveConsoleConfiguration() {
-  PlatformWin::SaveAndConfigureConsole();
-}
-
-void Platform::RestoreConsoleConfiguration() {
-  PlatformWin::RestoreConsole();
-}
-
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 08fad5f..a8f9e4d 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -1038,8 +1038,7 @@
  *
  * \returns true if the snapshot is a Dart2 snapshot, false otherwise.
  */
-DART_EXPORT bool Dart_IsDart2Snapshot(uint8_t* snapshot_buffer,
-                                      intptr_t snapshot_size);
+DART_EXPORT bool Dart_IsDart2Snapshot(const uint8_t* snapshot_buffer);
 
 /**
  * Schedules an interrupt for the specified isolate.
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index ee0eaf1..8f854da 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -217,19 +217,10 @@
 cc/Debugger_Rewind_Optimized: SkipSlow
 cc/Debugger_SetBreakpointInPartOfLibrary: Crash
 cc/FunctionSourceFingerprint: Fail
-cc/IsolateReload_BadClass: Fail
-cc/IsolateReload_ChangeInstanceFormat1: Skip
-cc/IsolateReload_ChangeInstanceFormat3: Skip
-cc/IsolateReload_ChangeInstanceFormat7: Skip
-cc/IsolateReload_ChangeInstanceFormat8: Skip
-cc/IsolateReload_ClassFieldAdded: Skip # Crash, Timeout
-cc/IsolateReload_ClassFieldAdded2: Skip # Crash, Timeout
 cc/IsolateReload_DanglingGetter_Library: Fail
 cc/IsolateReload_DanglingSetter_Class: Fail
 cc/IsolateReload_DanglingSetter_Instance: Fail
 cc/IsolateReload_DanglingSetter_Library: Fail
-cc/IsolateReload_DirectSubclasses_Failure: Fail
-cc/IsolateReload_DirectSubclasses_Success: Skip
 cc/IsolateReload_EnumDelete: Fail
 cc/IsolateReload_EnumReorderIdentical: Fail
 cc/IsolateReload_EnumToNotEnum: Skip
@@ -253,7 +244,6 @@
 cc/IsolateReload_RunNewFieldInitializersWithConsts: Skip
 cc/IsolateReload_ShapeChangeRetainsHash: Skip
 cc/IsolateReload_SmiFastPathStubs: Fail
-cc/IsolateReload_TopLevelParseError: Fail
 cc/IsolateReload_TypedefToNotTypedef: Fail
 cc/Parser_AllocateVariables_CaptureLoopVar: Fail
 cc/Parser_AllocateVariables_CapturedVar: Fail
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index d0cbb8a..474f6a8 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -320,19 +320,19 @@
 Value* AotCallSpecializer::PrepareReceiverOfDevirtualizedCall(Value* input,
                                                               intptr_t cid) {
   ASSERT(I->strong() && FLAG_use_strong_mode_types);
-  ASSERT(cid == kDoubleCid);
+  ASSERT((cid == kDoubleCid) ||
+         (FLAG_limit_ints_to_64_bits && (cid == kMintCid)));
 
   // Can't assert !input->Type()->is_nullable() here as PushArgument receives
   // value prior to a CheckNull in case of devirtualized call.
 
   input = input->CopyWithType(Z);
 
-  // Make sure type of the input is double.
-  // It is necessary as VM has limited knowledge of generic types
-  // and may not accurately infer type of the receiver if it is a
-  // generic type.
-  // TODO(dartbug.com/30480): improve type inference for generic types
-  if (!input->Type()->IsNullableDouble()) {
+  // Correct type of input if necessary.
+  // This correction is needed as VM may not be able to infer receiver type.
+  if ((cid == kIntegerCid) && !input->Type()->IsNullableInt()) {
+    input->SetReachingType(new (Z) CompileType(CompileType::Int()));
+  } else if ((cid == kDoubleCid) && !input->Type()->IsNullableDouble()) {
     input->SetReachingType(new (Z) CompileType(CompileType::Double()));
   }
 
@@ -488,63 +488,186 @@
 }
 
 bool AotCallSpecializer::TryOptimizeStaticCallUsingStaticTypes(
-    StaticCallInstr* call) {
+    StaticCallInstr* instr) {
   ASSERT(I->strong() && FLAG_use_strong_mode_types);
   Definition* replacement = NULL;
 
-  if (FlowGraphCompiler::SupportsUnboxedDoubles()) {
-    const Class& owner = Class::Handle(Z, call->function().Owner());
-    // Recognize double operators here as devirtualization can convert
-    // instance calls of double operators into static calls.
-    if (owner.id() == kDoubleCid) {
-      const String& name = String::Handle(Z, call->function().name());
-      Token::Kind op_kind = MethodTokenRecognizer::RecognizeTokenKind(name);
-      // TODO(dartbug.com/30480): Handle more double operations.
-      if ((op_kind == Token::kADD) || (op_kind == Token::kSUB) ||
-          (op_kind == Token::kMUL) || (op_kind == Token::kDIV)) {
-        ASSERT(call->FirstArgIndex() == 0);
-        Value* left_value = call->PushArgumentAt(0)->value();
-        Value* right_value = call->PushArgumentAt(1)->value();
-        if (right_value->Type()->IsNullableDouble() ||
-            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
-          left_value =
-              PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
-          right_value = PrepareStaticOpInput(right_value, kDoubleCid, call);
-          replacement = new (Z) BinaryDoubleOpInstr(
-              op_kind, left_value, right_value, Thread::kNoDeoptId,
-              call->token_pos(), Instruction::kNotSpeculative);
-        }
-      } else if ((op_kind == Token::kLT) || (op_kind == Token::kLTE) ||
-                 (op_kind == Token::kGT) || (op_kind == Token::kGTE)) {
-        ASSERT(call->FirstArgIndex() == 0);
-        Value* left_value = call->PushArgumentAt(0)->value();
-        Value* right_value = call->PushArgumentAt(1)->value();
-        if (right_value->Type()->IsNullableDouble() ||
-            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
-          left_value =
-              PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
-          right_value = PrepareStaticOpInput(right_value, kDoubleCid, call);
-          replacement = new (Z) RelationalOpInstr(
-              call->token_pos(), op_kind, left_value, right_value, kDoubleCid,
+  const Class& owner = Class::Handle(Z, instr->function().Owner());
+  if ((owner.id() != kIntegerCid) && (owner.id() != kDoubleCid)) {
+    return false;
+  }
+
+  const intptr_t receiver_index = instr->FirstArgIndex();
+  const String& name = String::Handle(Z, instr->function().name());
+  const Token::Kind op_kind = MethodTokenRecognizer::RecognizeTokenKind(name);
+
+  // Recognize double and int operators here as devirtualization can convert
+  // instance calls of these operators into static calls.
+
+  if (owner.id() == kIntegerCid) {
+    if (!FLAG_limit_ints_to_64_bits ||
+        !FlowGraphCompiler::SupportsUnboxedInt64()) {
+      return false;
+    }
+
+    switch (op_kind) {
+      case Token::kEQ:
+      case Token::kNE: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        CompileType* right_type = right_value->Type();
+        // TODO(dartbug.com/32166): Support EQ, NE for nullable ints.
+        // (requires null-aware comparison instruction).
+        if (right_type->IsNullableInt() && !right_type->is_nullable()) {
+          left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
+          right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
+          replacement = new (Z) EqualityCompareInstr(
+              instr->token_pos(), op_kind, left_value, right_value, kMintCid,
               Thread::kNoDeoptId, Instruction::kNotSpeculative);
         }
-      } else if (op_kind == Token::kNEGATE) {
-        ASSERT(call->FirstArgIndex() == 0);
-        Value* left_value = call->PushArgumentAt(0)->value();
+        break;
+      }
+      case Token::kLT:
+      case Token::kLTE:
+      case Token::kGT:
+      case Token::kGTE: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        CompileType* left_type = left_value->Type();
+        CompileType* right_type = right_value->Type();
+        if (right_type->IsNullableInt()) {
+          left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
+          right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
+          replacement = new (Z) RelationalOpInstr(
+              instr->token_pos(), op_kind, left_value, right_value, kMintCid,
+              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+        } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
+                   right_type->IsNullableDouble() &&
+                   IsSupportedIntOperandForStaticDoubleOp(left_type)) {
+          left_value = PrepareStaticOpInput(left_value, kDoubleCid, instr);
+          right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
+          replacement = new (Z) RelationalOpInstr(
+              instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
+              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+        }
+        break;
+      }
+      // TODO(dartbug.com/30480): Enable 64-bit integer shifts (SHL, SHR).
+      case Token::kBIT_OR:
+      case Token::kBIT_XOR:
+      case Token::kBIT_AND:
+      case Token::kADD:
+      case Token::kSUB:
+      case Token::kMUL:
+      case Token::kDIV: {
+        if ((op_kind == Token::kDIV) &&
+            !FlowGraphCompiler::SupportsHardwareDivision()) {
+          return false;
+        }
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        CompileType* left_type = left_value->Type();
+        CompileType* right_type = right_value->Type();
+        if (right_type->IsNullableInt() && (op_kind != Token::kDIV)) {
+          left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
+          right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
+          replacement = new (Z) BinaryInt64OpInstr(
+              op_kind, left_value, right_value, Thread::kNoDeoptId,
+              Instruction::kNotSpeculative);
+        } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
+                   right_type->IsNullableDouble() &&
+                   IsSupportedIntOperandForStaticDoubleOp(left_type)) {
+          if ((op_kind == Token::kADD) || (op_kind == Token::kSUB) ||
+              (op_kind == Token::kMUL) || (op_kind == Token::kDIV)) {
+            ASSERT(left_type->IsNullableDouble() ||
+                   right_type->IsNullableDouble() || (op_kind == Token::kDIV));
+            left_value = PrepareStaticOpInput(left_value, kDoubleCid, instr);
+            right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
+            replacement = new (Z) BinaryDoubleOpInstr(
+                op_kind, left_value, right_value, Thread::kNoDeoptId,
+                instr->token_pos(), Instruction::kNotSpeculative);
+          }
+        }
+        break;
+      }
+
+      default:
+        break;
+    }
+  } else if ((owner.id() == kDoubleCid) &&
+             FlowGraphCompiler::SupportsUnboxedDoubles()) {
+    // TODO(dartbug.com/30480): Handle more double operations.
+    switch (op_kind) {
+      case Token::kEQ:
+      case Token::kNE: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        CompileType* right_type = right_value->Type();
+        // TODO(dartbug.com/32166): Support EQ, NE for nullable doubles.
+        // (requires null-aware comparison instruction).
+        if (right_type->IsNullableDouble() && !right_type->is_nullable()) {
+          left_value =
+              PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
+          right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
+          replacement = new (Z) EqualityCompareInstr(
+              instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
+              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+        }
+        break;
+      }
+      case Token::kLT:
+      case Token::kLTE:
+      case Token::kGT:
+      case Token::kGTE: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        if (right_value->Type()->IsNullableDouble() ||
+            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
+          left_value =
+              PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
+          right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
+          replacement = new (Z) RelationalOpInstr(
+              instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
+              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+        }
+        break;
+      }
+      case Token::kADD:
+      case Token::kSUB:
+      case Token::kMUL:
+      case Token::kDIV: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
+        Value* right_value = instr->PushArgumentAt(receiver_index + 1)->value();
+        if (right_value->Type()->IsNullableDouble() ||
+            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
+          left_value =
+              PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
+          right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
+          replacement = new (Z) BinaryDoubleOpInstr(
+              op_kind, left_value, right_value, Thread::kNoDeoptId,
+              instr->token_pos(), Instruction::kNotSpeculative);
+        }
+        break;
+      }
+      case Token::kNEGATE: {
+        Value* left_value = instr->PushArgumentAt(receiver_index)->value();
         left_value = PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
         replacement = new (Z)
-            UnaryDoubleOpInstr(Token::kNEGATE, left_value, call->deopt_id(),
+            UnaryDoubleOpInstr(Token::kNEGATE, left_value, instr->deopt_id(),
                                Instruction::kNotSpeculative);
+        break;
       }
+      default:
+        break;
     }
   }
 
-  if (replacement != NULL) {
+  if ((replacement != NULL) && !replacement->ComputeCanDeoptimize()) {
     if (FLAG_trace_strong_mode_types) {
       THR_Print("[Strong mode] Optimization: replacing %s with %s\n",
-                call->ToCString(), replacement->ToCString());
+                instr->ToCString(), replacement->ToCString());
     }
-    ReplaceCall(call, replacement);
+    ReplaceCall(instr, replacement);
     return true;
   }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index eb100c3..daa2a9c 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1030,7 +1030,8 @@
           FieldHelper field_helper(builder_);
           field_helper.ReadUntilIncluding(FieldHelper::kFlags);
 
-          if (!field_helper.IsGenericCovariantImpl()) {
+          if (!field_helper.IsCovariant() &&
+              !field_helper.IsGenericCovariantImpl()) {
             result_->setter_value->set_type_check_mode(
                 LocalVariable::kTypeCheckedByCaller);
           }
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 330dfe7..04c2b31 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -174,6 +174,7 @@
     kFinal = 1 << 0,
     kConst = 1 << 1,
     kStatic = 1 << 2,
+    kIsCovariant = 1 << 5,
     kIsGenericCovariantImpl = 1 << 6,
     kIsGenericCovariantInterface = 1 << 7
   };
@@ -198,6 +199,7 @@
   bool IsConst() { return (flags_ & kConst) != 0; }
   bool IsFinal() { return (flags_ & kFinal) != 0; }
   bool IsStatic() { return (flags_ & kStatic) != 0; }
+  bool IsCovariant() const { return (flags_ & kIsCovariant) != 0; }
   bool IsGenericCovariantImpl() {
     return (flags_ & kIsGenericCovariantImpl) != 0;
   }
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 1877043..5b607f4 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1551,8 +1551,15 @@
   return Api::Success();
 }
 
-DART_EXPORT bool Dart_IsDart2Snapshot(uint8_t* snapshot_buffer,
-                                      intptr_t snapshot_size) {
+DART_EXPORT bool Dart_IsDart2Snapshot(const uint8_t* snapshot_buffer) {
+  if (snapshot_buffer == NULL) {
+    return false;
+  }
+  const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer);
+  if (snapshot == NULL) {
+    return false;
+  }
+  const intptr_t snapshot_size = snapshot->length();
   const char* expected_version = Version::SnapshotString();
   ASSERT(expected_version != NULL);
   const intptr_t version_len = strlen(expected_version);
@@ -1560,13 +1567,12 @@
     return false;
   }
 
-  const char* version = reinterpret_cast<const char*>(snapshot_buffer);
+  const char* version = reinterpret_cast<const char*>(snapshot->content());
   ASSERT(version != NULL);
   if (strncmp(version, expected_version, version_len)) {
     return false;
   }
-  const char* features =
-      reinterpret_cast<const char*>(snapshot_buffer) + version_len;
+  const char* features = version + version_len;
   ASSERT(features != NULL);
   intptr_t pending_len = snapshot_size - version_len;
   intptr_t buffer_len = OS::StrNLen(features, pending_len);
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index 25496a4..35ff7b2 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -304,7 +304,11 @@
       "}\n";
 
   Dart_Handle result = TestCase::ReloadTestScript(kReloadScript);
-  EXPECT_ERROR(result, "unexpected token");
+  if (TestCase::UsingDartFrontend()) {
+    EXPECT_ERROR(result, "Expected ';' before this");
+  } else {
+    EXPECT_ERROR(result, "unexpected token");
+  }
   EXPECT_EQ(4, SimpleInvoke(lib, "main"));
 }
 
@@ -1168,7 +1172,13 @@
       "}\n";
 
   lib = TestCase::ReloadTestScript(kReloadScript);
-  EXPECT_ERROR(lib, "unexpected token");
+  if (TestCase::UsingDartFrontend()) {
+    EXPECT_ERROR(lib,
+                 "Variables must be declared using the keywords"
+                 " 'const', 'final', 'var' or a type name.");
+  } else {
+    EXPECT_ERROR(lib, "unexpected token");
+  }
 }
 
 TEST_CASE(IsolateReload_PendingUnqualifiedCall_StaticToInstance) {
@@ -2419,7 +2429,11 @@
       "}\n";
 
   lib = TestCase::ReloadTestScript(kReloadScript);
-  EXPECT_ERROR(lib, "unexpected token");
+  if (TestCase::UsingDartFrontend()) {
+    EXPECT_ERROR(lib, "Expected ';' before this");
+  } else {
+    EXPECT_ERROR(lib, "unexpected token");
+  }
 
   // If we don't clean up the subclasses, we would find BIterator in
   // the list of subclasses, which would be bad.  Make sure that
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 56ed9e6..f3362e4 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -668,6 +668,19 @@
   }
 }
 
+void KernelLoader::CheckForInitializer(const Field& field) {
+  if (builder_.PeekTag() == kSomething) {
+    SimpleExpressionConverter converter(&H, &builder_);
+    const bool has_simple_initializer =
+        converter.IsSimple(builder_.ReaderOffset() + 1);
+    if (!has_simple_initializer || !converter.SimpleValue().IsNull()) {
+      field.set_has_initializer(true);
+      return;
+    }
+  }
+  field.set_has_initializer(false);
+}
+
 void KernelLoader::LoadLibrary(intptr_t index) {
   if (!program_->is_single_program()) {
     FATAL(
@@ -802,10 +815,10 @@
     field.set_kernel_offset(field_offset);
     const AbstractType& type = T.BuildType();  // read type.
     field.SetFieldType(type);
+    CheckForInitializer(field);
     field_helper.SetJustRead(FieldHelper::kType);
     field_helper.ReadUntilExcluding(FieldHelper::kInitializer);
     intptr_t field_initializer_offset = builder_.ReaderOffset();
-    field.set_has_initializer(builder_.PeekTag() == kSomething);
     field_helper.ReadUntilExcluding(FieldHelper::kEnd);
     {
       // GenerateFieldAccessors reads (some of) the initializer.
@@ -1057,9 +1070,9 @@
                      field_helper.IsConst(), is_reflectable, script_class, type,
                      field_helper.position_, field_helper.end_position_));
       field.set_kernel_offset(field_offset);
+      CheckForInitializer(field);
       field_helper.ReadUntilExcluding(FieldHelper::kInitializer);
       intptr_t field_initializer_offset = builder_.ReaderOffset();
-      field.set_has_initializer(builder_.PeekTag() == kSomething);
       field_helper.ReadUntilExcluding(FieldHelper::kEnd);
       {
         // GenerateFieldAccessors reads (some of) the initializer.
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 126405b..8a5f60f 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -190,6 +190,8 @@
   void LoadPreliminaryClass(ClassHelper* class_helper,
                             intptr_t type_parameter_count);
 
+  void CheckForInitializer(const Field& field);
+
   Class& LoadClass(const Library& library,
                    const Class& toplevel_class,
                    intptr_t class_end);
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 00ae83a..30b5dff 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -1813,8 +1813,9 @@
     Dart_ExitScope();
   }
   FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode;
-  bool is_kernel = Dart_IsDart2Snapshot(full_snapshot, isolate_snapshot_size);
+  bool is_kernel = Dart_IsDart2Snapshot(full_snapshot);
   EXPECT_EQ(FLAG_strong, is_kernel);
+  free(full_snapshot);
 }
 
 #endif  // !PRODUCT
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 574e44f..85447d38 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -170,6 +170,10 @@
 static ThreadLocalKey kernel_reload_key = kUnsetThreadLocalKey;
 #endif
 
+bool TestCase::UsingDartFrontend() {
+  return FLAG_use_dart_frontend;
+}
+
 char* TestCase::CompileTestScriptWithDFE(const char* url,
                                          const char* source,
                                          void** kernel_pgm,
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index 1f7fc8f..970de8f 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -306,6 +306,8 @@
 
   TestCase(RunEntry* run, const char* name) : TestCaseBase(name), run_(run) {}
 
+  static bool UsingDartFrontend();
+
   static char* CompileTestScriptWithDFE(const char* url,
                                         const char* source,
                                         void** kernel_pgm,
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index a4398a5..edd0cde 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -3,52 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2analyzer ]
-big_integer_arith_vm_test/add: CompileTimeError # int64
-big_integer_arith_vm_test/div: CompileTimeError # int64
-big_integer_arith_vm_test/gcd: CompileTimeError # int64
-big_integer_arith_vm_test/mod: CompileTimeError # int64
-big_integer_arith_vm_test/modInv: CompileTimeError # int64
-big_integer_arith_vm_test/modPow: CompileTimeError # int64
-big_integer_arith_vm_test/mul: CompileTimeError # int64
-big_integer_arith_vm_test/negate: CompileTimeError # int64
-big_integer_arith_vm_test/none: CompileTimeError # int64
-big_integer_arith_vm_test/overflow: CompileTimeError # int64
-big_integer_arith_vm_test/shift: CompileTimeError # int64
-big_integer_arith_vm_test/sub: CompileTimeError # int64
-big_integer_arith_vm_test/trunDiv: CompileTimeError # int64
-bit_twiddling_bigint_test: CompileTimeError # int64
-bit_twiddling_test: CompileTimeError # int64
-double_ceil_test: CompileTimeError # int64
-double_floor_test: CompileTimeError # int64
-double_round_test: CompileTimeError # int64
-double_truncate_test: CompileTimeError # int64
-duration2_test: StaticWarning, OK # Test generates error on purpose.
-error_stack_trace_test: StaticWarning, OK # Test generates errors on purpose.
-hash_set_type_check_test: StaticWarning, OK # Tests failing type tests.
-int_ceil_test: CompileTimeError # int64
-int_ceil_to_double_test: CompileTimeError # int64
-int_floor_test: CompileTimeError # int64
-int_floor_to_double_test: CompileTimeError # int64
-int_from_environment_test: CompileTimeError # int64
-int_modulo_arith_test/bignum: CompileTimeError # int64
-int_modulo_arith_test/modPow: CompileTimeError # int64
-int_modulo_arith_test/none: CompileTimeError # int64
-int_parse_radix_bad_handler_test: Fail
-int_parse_radix_test/02: CompileTimeError # int64
-int_round_test: CompileTimeError # int64
-int_round_to_double_test: CompileTimeError # int64
-int_to_int_test: CompileTimeError # int64
-int_truncate_test: CompileTimeError # int64
-int_truncate_to_double_test: CompileTimeError # int64
-integer_to_radix_string_test: CompileTimeError # int64
-integer_to_string_test/01: CompileTimeError # int64
-iterable_element_at_test: StaticWarning, OK # Test generates errors on purpose.
-num_clamp_test: StaticWarning, OK # Test generates errors on purpose.
-num_parse_test/01: CompileTimeError # int64
-num_parse_test/none: CompileTimeError # int64
-num_sign_test: CompileTimeError # int64
-regress_r21715_test: CompileTimeError # int64
-string_test: StaticWarning, OK # Test generates error on purpose.
+*: Skip
 
 [ $compiler == dart2js ]
 regexp/pcre_test: Pass, Slow # Issue 21593
@@ -126,22 +81,6 @@
 [ $arch == x64 && $system == windows ]
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
 
-# Analyzer's implementation of fromEnvironment assumes that undefined
-# environment variables have an unspecified value (rather than being
-# null) because it is expected that the user will supply a value when
-# the code is run.  This means that it produces slightly different
-# error messages than the VM and Dart2js.
-[ $compiler == dart2analyzer && $checked ]
-from_environment_const_type_undefined_test/09: CompileTimeError
-from_environment_const_type_undefined_test/11: CompileTimeError
-from_environment_const_type_undefined_test/12: CompileTimeError
-from_environment_const_type_undefined_test/13: CompileTimeError
-from_environment_const_type_undefined_test/14: CompileTimeError
-from_environment_const_type_undefined_test/16: CompileTimeError
-
-[ $compiler == dart2analyzer && $strong ]
-*: Skip # Issue 28649
-
 [ $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.
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 814eee9..0dd8e28 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -3,425 +3,4 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2analyzer ]
-abstract_beats_arguments_test: StaticWarning
-accessor_conflict_export2_test: StaticWarning # Issue 25624
-accessor_conflict_export_test: StaticWarning # Issue 25624
-accessor_conflict_import2_test: StaticWarning # Issue 25624
-accessor_conflict_import_prefixed2_test: StaticWarning # Issue 25624
-accessor_conflict_import_prefixed_test: StaticWarning # Issue 25624
-accessor_conflict_import_test: StaticWarning # Issue 25624
-application_negative_test: CompileTimeError # Issue 14528, The following tests are currently assumed to be failing because the test is wrong.
-assert_message_test: StaticWarning
-assertion_initializer_test: StaticWarning
-assertion_test: StaticWarning
-bad_initializer1_negative_test: CompileTimeError # Issue 14529, The following tests are currently assumed to be failing because the test is wrong.
-bad_initializer2_negative_test: Fail # Issue 14880
-bad_named_constructor_negative_test: CompileTimeError # Issue 18693, The following tests are currently assumed to be failing because the test is wrong.
-black_listed_test/none: Fail # Issue 14228
-body_less_constructor_wrong_arg_negative_test: CompileTimeError # Issue 18695, The following tests are currently assumed to be failing because the test is wrong.
-cascade_test/none: Fail # Issue 11577
-closure_call_wrong_argument_count_negative_test: Skip # Runtime negative test. No static errors or warnings.
-conflicting_type_variable_and_setter_test: CompileTimeError # Issue 25525
-const_counter_negative_test: CompileTimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError # Issue 29657
-const_error_multiply_initialized_test/04: MissingCompileTimeError # Issue 29657
-const_for_in_variable_test/01: MissingCompileTimeError # Issue 25161
-const_optional_args_negative_test: CompileTimeError
-constructor3_negative_test: Fail # Issue 11585
-constructor_call_wrong_argument_count_negative_test: Fail # Issue 11585
-constructor_duplicate_final_test/03: MissingCompileTimeError
-constructor_redirect1_negative_test: CompileTimeError
-constructor_redirect2_negative_test: CompileTimeError
-constructor_setter_negative_test: CompileTimeError
-deep_nesting1_negative_test: CompileTimeError # Issue 25558
-deep_nesting2_negative_test: CompileTimeError # Issue 25558
-default_factory2_test/none: Fail # Issue 13956
-duplicate_export_negative_test: CompileTimeError
-duplicate_interface_negative_test: CompileTimeError
-empty_block_case_test: StaticWarning # Issue 18701, The following tests are currently assumed to be failing because the test is wrong.
-enum_syntax_test/05: Fail # Issue 21649
-enum_syntax_test/06: Fail # Issue 21649
-error_stacktrace_test: StaticWarning # Issue 18702, The following tests are currently assumed to be failing because the test is wrong.
-export_ambiguous_main_negative_test: CompileTimeError
-extend_type_parameter2_negative_test: CompileTimeError
-extend_type_parameter_negative_test: CompileTimeError
-external_test/21: Fail
-external_test/24: Fail
-external_test/25: Fail
-f_bounded_quantification4_test: StaticWarning
-f_bounded_quantification5_test: StaticWarning
-factory1_test/00: StaticWarning # Issue 18726 # Issues to be fixed now that type parameters have been fixed (issues 14221, 15553)
-factory1_test/01: StaticWarning # Issue 18726 # Issues to be fixed now that type parameters have been fixed (issues 14221, 15553)
-factory1_test/none: StaticWarning # Issue 18726 # Issues to be fixed now that type parameters have been fixed (issues 14221, 15553)
-factory2_negative_test: CompileTimeError
-factory2_test: StaticWarning # Issue 18727
-factory3_negative_test: CompileTimeError
-factory3_test: StaticWarning # Issue 18727
-factory4_test: StaticWarning # Issue 18727
-factory5_test/none: Fail # Issue 11578
-factory_implementation_test/00: StaticWarning
-factory_implementation_test/none: Fail # Issue 11578
-factory_negative_test: CompileTimeError
-factory_redirection_test/01: StaticWarning # Issue 11578
-factory_redirection_test/02: StaticWarning # Issue 18230
-factory_redirection_test/03: StaticWarning # Issue 11578
-factory_redirection_test/05: StaticWarning # Issue 11578
-factory_redirection_test/06: StaticWarning # Issue 11578
-factory_redirection_test/08: StaticWarning # Issue 18230
-factory_redirection_test/09: StaticWarning # Issue 18230
-factory_redirection_test/10: StaticWarning # Issue 18230
-factory_redirection_test/11: StaticWarning # Issue 18230
-factory_redirection_test/12: StaticWarning # Issue 18230
-factory_redirection_test/13: StaticWarning # Issue 18230
-factory_redirection_test/14: StaticWarning # Issue 18230
-factory_redirection_test/none: StaticWarning # Issue 18230
-factory_return_type_checked_test: StaticWarning # Issue 18728
-field1_negative_test: CompileTimeError
-field2_negative_test: CompileTimeError
-field3_negative_test: CompileTimeError
-field3a_negative_test: Fail # Issue 11124
-field4_negative_test: CompileTimeError
-field5_negative_test: CompileTimeError
-field6_negative_test: CompileTimeError
-field6a_negative_test: CompileTimeError
-field_method4_negative_test: Fail # Issue 11590
-final_attempt_reinitialization_test/01: MissingCompileTimeError # Issue 29657
-final_attempt_reinitialization_test/02: MissingCompileTimeError # Issue 29657
-final_syntax_test/01: Fail # Issue 11124
-final_syntax_test/02: Fail # Issue 11124
-final_syntax_test/03: Fail # Issue 11124
-final_syntax_test/04: Fail # Issue 11124
-for_in3_test: StaticWarning, OK # Test should have warning by design.
-for_in_side_effects_test: StaticWarning, OK # Test uses custom class that does not implement Iterable in for-in.
-function_malformed_result_type_test: StaticWarning
-function_subtype_bound_closure7_test: StaticWarning
-function_subtype_checked0_test: StaticWarning
-function_subtype_closure0_test: StaticWarning
-function_subtype_closure1_test: StaticWarning
-function_subtype_factory1_test: StaticWarning
-function_subtype_inline1_test: StaticWarning
-function_type2_test: StaticWarning
-function_type_parameter2_negative_test: CompileTimeError
-function_type_parameter_negative_test: CompileTimeError
-generalized_void_syntax_test: Skip # TODO, Issue #30177.
-generic_closure_test: StaticWarning
-generic_list_checked_test: StaticWarning
-generic_local_functions_test: CompileTimeError # Issue 28515
-generic_methods_generic_function_parameter_test: CompileTimeError # Issue 28515
-generic_methods_type_expression_test: Skip # This tests now unsupported Dart 1.0 behavior (is check warnings)
-generic_test: StaticWarning
-generics_test: StaticWarning
-get_set_syntax_test/none: Fail # Issue 11575
-getter_declaration_negative_test: CompileTimeError
-getter_no_setter2_test/01: StaticWarning
-getter_no_setter_test/01: StaticWarning
-getter_no_setter_test/none: Fail # Issue 11579
-getter_setter_in_lib_test: Fail # Issue 23286
-if_null_evaluation_order_test/01: StaticWarning # invalid use of void for dart 2, see also #32100
-implicit_this_test/02: StaticWarning
-implicit_this_test/none: Fail # Issue 11575
-implied_interface_test: StaticWarning
-import_combinators_negative_test: Fail # Issue 11594
-import_combinators_test: StaticWarning
-import_core_prefix_test: StaticWarning
-inferrer_this_access_test: StaticWarning
-initializing_formal_type_test: StaticWarning # Issue 26658 # Experimental feature: Use initializing formals in initializers and constructor body.
-inlined_throw_test: StaticWarning
-inst_field_initializer1_negative_test: CompileTimeError
-instance_call_wrong_argument_count_negative_test: Fail # Issue 11585
-instance_method2_negative_test: CompileTimeError
-instance_method_negative_test: CompileTimeError
-instanceof3_test: StaticWarning
-instantiate_type_variable_test/01: StaticWarning
-interceptor6_test: StaticWarning
-interface2_negative_test: CompileTimeError
-interface_inherit_field_test: StaticWarning
-interface_injection1_negative_test: CompileTimeError
-interface_injection2_negative_test: CompileTimeError
-interface_static_method_negative_test: CompileTimeError
-interface_static_non_final_fields_negative_test: Fail # Issue 11594
-interface_test/none: Fail # Issue 11575
-invocation_mirror_test: StaticWarning
-is_not_class1_negative_test: CompileTimeError
-is_not_class2_test: StaticWarning
-is_not_class4_negative_test: CompileTimeError
-isnot_malformed_type_test: StaticWarning
-issue11724_test: Fail # Issue 12381
-issue13474_test: StaticWarning, OK # Issue 13474
-issue1363_test: StaticWarning
-issue1578_negative_test: CompileTimeError
-label2_negative_test: CompileTimeError
-label3_negative_test: CompileTimeError
-label5_negative_test: CompileTimeError
-label6_negative_test: CompileTimeError
-label8_negative_test: CompileTimeError
-label_test: StaticWarning
-library_ambiguous_test/00: StaticWarning
-library_ambiguous_test/01: StaticWarning
-library_ambiguous_test/02: StaticWarning
-library_ambiguous_test/03: StaticWarning
-library_negative_test: CompileTimeError
-list_literal2_negative_test: CompileTimeError
-list_literal4_test: StaticWarning
-list_literal_negative_test: CompileTimeError
-list_test: StaticWarning
-local_function2_test: StaticWarning
-main_not_a_function_test/01: Fail # Issue 20030
-main_test/03: Fail # Issue 20030
-malbounded_redirecting_factory2_test/none: Fail # Issue 11578
-malbounded_redirecting_factory_test/none: Fail # Issue 11578
-malbounded_type_cast2_test: StaticWarning
-malbounded_type_cast_test: StaticWarning
-malbounded_type_literal_test: StaticWarning
-malbounded_type_test2_test: StaticWarning
-malformed_test/05: Fail # Issue 14079
-malformed_test/06: Fail # Issue 14079
-malformed_test/none: Fail # Issue 14079
-malformed_type_test: StaticWarning
-map_literal2_negative_test: CompileTimeError
-map_literal3_test: StaticWarning
-map_literal4_test: StaticWarning
-map_literal6_test: StaticWarning
-map_literal8_test: StaticWarning
-map_literal_negative_test: CompileTimeError
-method_override4_test: StaticWarning
-method_override5_test: StaticWarning
-method_override6_test: StaticWarning
-method_override7_test/03: Fail # Issue 11497
-method_override_test: StaticWarning
-mixin_illegal_static_access_test: StaticWarning
-mixin_invalid_bound2_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
-mixin_invalid_bound_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
-mixin_super_bound_test: StaticWarning # legitimate StaticWarning, cannot be annotated
-mixin_supertype_subclass2_test/02: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass2_test/05: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass3_test/02: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass3_test/05: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass4_test/01: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass4_test/02: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass4_test/03: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass4_test/04: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass4_test/05: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass_test/02: MissingStaticWarning # Issue 25614
-mixin_supertype_subclass_test/05: MissingStaticWarning # Issue 25614
-mixin_type_parameters_mixin_extends_test: StaticWarning
-mixin_type_parameters_mixin_test: StaticWarning
-mixin_type_parameters_super_extends_test: StaticWarning
-mixin_type_parameters_super_test: StaticWarning
-mixin_with_two_implicit_constructors_test: StaticWarning
-multiline_newline_test/01: CompileTimeError # Issue 23888
-multiline_newline_test/01r: CompileTimeError # Issue 23888
-multiline_newline_test/02: CompileTimeError # Issue 23888
-multiline_newline_test/02r: CompileTimeError # Issue 23888
-multiline_newline_test/03: CompileTimeError # Issue 23888
-multiline_newline_test/03r: CompileTimeError # Issue 23888
-multiline_newline_test/04: MissingCompileTimeError # Issue 23888
-multiline_newline_test/04r: MissingCompileTimeError # Issue 23888
-multiline_newline_test/05: MissingCompileTimeError # Issue 23888
-multiline_newline_test/05r: MissingCompileTimeError # Issue 23888
-multiline_newline_test/06: MissingCompileTimeError # Issue 23888
-multiline_newline_test/06r: MissingCompileTimeError # Issue 23888
-named_constructor_test/01: StaticWarning
-named_constructor_test/03: StaticWarning
-named_parameters2_test: StaticWarning
-named_parameters3_test: StaticWarning
-named_parameters4_test: StaticWarning
-named_parameters_test/01: StaticWarning
-named_parameters_test/02: StaticWarning
-named_parameters_test/03: StaticWarning
-named_parameters_test/04: StaticWarning
-named_parameters_test/05: StaticWarning
-named_parameters_test/06: StaticWarning
-named_parameters_test/07: StaticWarning
-named_parameters_test/08: StaticWarning
-named_parameters_test/09: StaticWarning
-named_parameters_test/10: StaticWarning
-named_parameters_type_test/01: StaticWarning
-new_expression1_negative_test: CompileTimeError
-new_expression2_negative_test: CompileTimeError
-new_expression3_negative_test: CompileTimeError
-no_main_test/01: Fail # Issue 20030
-no_such_constructor2_test: StaticWarning
-no_such_method2_test: StaticWarning
-no_such_method_dispatcher_test: StaticWarning
-non_const_super_negative_test: CompileTimeError
-non_parameterized_factory2_test: StaticWarning
-non_parameterized_factory_test: StaticWarning
-not_enough_positional_arguments_test/00: StaticWarning
-not_enough_positional_arguments_test/01: CompileTimeError
-not_enough_positional_arguments_test/02: StaticWarning
-not_enough_positional_arguments_test/03: StaticWarning
-not_enough_positional_arguments_test/05: StaticWarning
-not_enough_positional_arguments_test/06: StaticWarning
-not_enough_positional_arguments_test/07: StaticWarning
-number_identifier_test/08: StaticWarning
-number_identifier_test/09: StaticWarning
-on_catch_malformed_type_test: StaticWarning
-operator1_negative_test: CompileTimeError
-operator2_negative_test: CompileTimeError
-operator_equals_test: StaticWarning
-optional_named_parameters_test/01: StaticWarning
-optional_named_parameters_test/02: StaticWarning
-optional_named_parameters_test/03: StaticWarning
-optional_named_parameters_test/04: StaticWarning
-optional_named_parameters_test/05: StaticWarning
-optional_named_parameters_test/06: StaticWarning
-optional_named_parameters_test/07: StaticWarning
-optional_named_parameters_test/08: StaticWarning
-optional_named_parameters_test/09: StaticWarning
-override_field_method1_negative_test: CompileTimeError
-override_field_method2_negative_test: CompileTimeError
-override_field_method4_negative_test: CompileTimeError
-override_field_method5_negative_test: CompileTimeError
-override_field_test/03: Fail # Issue 29703
-parameter_initializer1_negative_test: CompileTimeError
-parameter_initializer2_negative_test: CompileTimeError
-parameter_initializer3_negative_test: CompileTimeError
-parameter_initializer4_negative_test: CompileTimeError
-parameter_initializer6_negative_test: CompileTimeError
-parser_quirks_test: StaticWarning
-part2_test: StaticWarning
-part_refers_to_core_library_test/01: MissingCompileTimeError # Issue 29709
-positional_parameters_type_test/01: StaticWarning
-prefix11_negative_test: Fail # Issue 11964
-prefix12_negative_test: Fail # Issue 11962
-prefix13_negative_test: CompileTimeError
-prefix15_negative_test: CompileTimeError
-prefix15_test: StaticWarning
-prefix16_test: StaticWarning
-prefix18_negative_test: CompileTimeError
-prefix1_negative_test: Fail # Issue 11962
-prefix22_test: StaticWarning
-prefix23_test: StaticWarning
-prefix2_negative_test: Fail # Issue 11962
-prefix3_negative_test: Fail # Issue 12191
-prefix4_negative_test: Fail # Issue 11962
-prefix5_negative_test: Fail # Issue 11962
-prefix7_negative_test: CompileTimeError
-prefix8_negative_test: Fail # Issue 11964
-private_member1_negative_test: Fail # Issue 14021
-private_member2_negative_test: Fail # Issue 14021
-private_member3_negative_test: Fail # Issue 14021
-property_field_override_test: StaticWarning
-proxy3_test/03: StaticWarning # Issue 15467
-proxy3_test/04: StaticWarning # Issue 15467
-proxy_test/05: StaticWarning # Issue 15467
-proxy_test/06: StaticWarning # Issue 15467
-redirecting_factory_default_values_test/none: StaticWarning # Issue 14471
-redirecting_factory_incompatible_signature_test: StaticWarning
-redirecting_factory_infinite_steps_test/01: Fail # Issue 13916
-redirecting_factory_long_test: StaticWarning
-regress_12561_test: StaticWarning # This test is expected to have warnings because of noSuchMethod overriding.
-regress_13494_test: StaticWarning
-regress_17382_test: Skip # don't care about the static warning.
-regress_22438_test: Fail # Issue 14079
-regress_23408_test: Skip # don't care about the static warning.
-regress_25246_test: Skip
-regress_26668_test: Fail # Issue 26678
-regress_27572_test: StaticWarning # Warning about undefined method expected.
-regress_27617_test/1: MissingCompileTimeError
-regress_29025_test: StaticWarning # Issue 29081
-regress_29349_test: CompileTimeError # Issue 29744
-regress_29405_test: StaticWarning # Issue 29421
-reify_typevar_static_test/00: MissingCompileTimeError # Issue 21565
-return_type_test: StaticWarning
-script1_negative_test: CompileTimeError
-script2_negative_test: CompileTimeError
-setter4_test: StaticWarning # Issue 14736
-setter_declaration2_negative_test: CompileTimeError
-setter_declaration_negative_test: CompileTimeError
-setter_no_getter_call_test/01: StaticWarning
-source_self_negative_test: CompileTimeError
-static_call_wrong_argument_count_negative_test: Fail # Issue 12156
-static_field_test/01: Fail # Issue 12541
-static_field_test/02: Fail # Issue 12541
-static_field_test/03: Fail # Issue 12541
-static_field_test/04: Fail # Issue 12541
-static_initializer_type_error_test: StaticWarning
-string_escape4_negative_test: CompileTimeError
-string_interpolate1_negative_test: CompileTimeError
-string_interpolate2_negative_test: CompileTimeError
-string_interpolate_test: StaticWarning
-string_interpolation1_negative_test: CompileTimeError
-string_interpolation2_negative_test: CompileTimeError
-string_interpolation3_negative_test: CompileTimeError
-string_interpolation4_negative_test: CompileTimeError
-string_interpolation5_negative_test: CompileTimeError
-string_interpolation6_negative_test: CompileTimeError
-string_test: StaticWarning
-string_unicode1_negative_test: CompileTimeError
-string_unicode2_negative_test: CompileTimeError
-string_unicode3_negative_test: CompileTimeError
-string_unicode4_negative_test: CompileTimeError
-super_assign_test: StaticWarning
-super_call4_test: StaticWarning
-super_getter_setter_test: StaticWarning
-super_operator_index5_test: StaticWarning
-super_operator_index6_test: StaticWarning
-super_operator_index7_test: StaticWarning
-super_operator_index8_test: StaticWarning
-super_operator_test: StaticWarning
-super_setter_test: StaticWarning
-switch1_negative_test: CompileTimeError
-switch3_negative_test: CompileTimeError
-switch4_negative_test: CompileTimeError
-switch5_negative_test: CompileTimeError
-switch7_negative_test: CompileTimeError
-switch_fallthru_test: StaticWarning
-syntax_test/none: Fail # Issue 11575
-test_negative_test: CompileTimeError
-transitive_private_library_access_test: StaticWarning # This test is expected to generate a warning, since it's intentionally referring to a variable that's not in scope.
-try_catch4_test: StaticWarning # Note: test is in error but analyzer doesn't notice due to bug #24502 top_level_non_prefixed_library_test: StaticWarning
-try_catch5_test: StaticWarning # Note: test is in error but analyzer doesn't notice due to bug #24502 top_level_non_prefixed_library_test: StaticWarning
-type_argument_in_super_type_test: StaticWarning
-type_parameter_test/none: Fail # Issue 12160
-type_variable_bounds_test/none: Fail # Issue 11578
-type_variable_conflict2_test/02: MissingCompileTimeError
-type_variable_conflict2_test/06: MissingCompileTimeError
-type_variable_conflict2_test/08: MissingCompileTimeError
-type_variable_conflict2_test/10: MissingCompileTimeError
-type_variable_identifier_expression_test: StaticWarning
-type_variable_scope2_test: StaticWarning
-type_variable_scope_test/none: Fail # Issue 11578
-type_variable_static_context_negative_test: Fail # Issue 12161
-typed_selector2_test: StaticWarning
-unary_plus_negative_test: CompileTimeError
-unbound_getter_test: StaticWarning
-unhandled_exception_negative_test: CompileTimeError
-unresolved_in_factory_negative_test: Fail # Issue 12163
-unresolved_top_level_method_negative_test: StaticWarning
-unresolved_top_level_var_negative_test: Fail # Issue 12163
-vm/canonicalization_preserves_deopt_test: StaticWarning
-vm/debug_break_enabled_vm_test: Skip
-vm/debug_break_vm_test/*: Skip
-vm/reflect_core_vm_test: CompileTimeError # This test uses "const Symbol('_setAt')"
-vm/type_cast_vm_test: StaticWarning
-vm/type_vm_test: StaticWarning
-void_type_test: StaticWarning
-
-[ $compiler == dart2analyzer && $runtime == none ]
-arithmetic_test: CompileTimeError # int64
-bit_operations_test/01: CompileTimeError # int64
-bit_operations_test/02: CompileTimeError # int64
-bit_operations_test/03: CompileTimeError # int64
-bit_operations_test/04: CompileTimeError # int64
-bit_operations_test/none: CompileTimeError # int64
-deopt_inlined_function_lazy_test: CompileTimeError # int64
-guess_cid_test: CompileTimeError # int64
-identical_closure2_test: CompileTimeError # int64
-int2_test: CompileTimeError # int64
-mint_compares_test: CompileTimeError # int64
-number_identity_test: CompileTimeError # int64
-vm/regress_14903_test: CompileTimeError # int64
-
-[ $compiler == dart2analyzer && $runtime == none && $checked ]
-assertion_initializer_const_error2_test/cc10: Pass # Issue #31321
-assertion_initializer_const_error2_test/cc11: Pass # Issue #31321
-assertion_initializer_const_error2_test/none: Pass
-
-[ $compiler == dart2analyzer && $runtime == none && !$checked ]
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-
-[ $compiler == dart2analyzer && $strong ]
-*: Skip # Issue 28649
-
+*: Skip
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 0b99ca7..5ced098 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -1332,7 +1332,6 @@
 redirecting_constructor_initializer_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
-redirecting_factory_long_test: RuntimeError
 redirecting_factory_reflection_test: CompileTimeError
 regress_13462_0_test: CompileTimeError
 regress_13462_1_test: CompileTimeError
diff --git a/tests/language_2/assertion_initializer_const_error2_test.dart b/tests/language_2/assertion_initializer_const_error2_test.dart
index cf7788d..e406b4a 100644
--- a/tests/language_2/assertion_initializer_const_error2_test.dart
+++ b/tests/language_2/assertion_initializer_const_error2_test.dart
@@ -1,60 +1,83 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-
-// Dart test program testing assert statements.
+// VMOptions=--assert_initializer
+//
+// Test of asserts in initializer lists.
 
 import "package:expect/expect.dart";
 
 class C {
   final int x;
   // Const constructors.
-  const C.cc01(this.x, y)
-      : assert(x < y)  //# cc01: compile-time error
-      ;
-  const C.cc02(x, y) : x = x
-      , assert(x < y)  //# cc02: compile-time error
-      ;
-  const C.cc03(x, y) :
-      assert(x < y),  //# cc03: compile-time error
-      x = x;
-  const C.cc05(this.x, y) :
-      assert(x < y),   //# cc05: compile-time error
-      super();
-  const C.cc06(x, y) : x = x
-      , assert(x < y)  //# cc06: compile-time error
-      , super()
-      ;
-  const C.cc07(x, y) :
-      assert(x < y),  //# cc07: compile-time error
-      x = x, super();
-  const C.cc08(x, y) :
-      assert(x < y),  //# cc08: compile-time error
-      x = x
-      , assert(y > x)  //# cc08: continued
-      , super()
-      ;
-  const C.cc09(this.x, y)
-      : assert(x < y, "$x < $y")  //# cc09: compile-time error
-      ;
-  const C.cc10(this.x, y)
-      : assert(x < y,)  //# cc10: compile-time error
-      ;
-  const C.cc11(this.x, y)
-      : assert(x < y, "$x < $y",)  //# cc11: compile-time error
-      ;
+  const C.cc01(this.x, y) : assert(x < y);
+  const C.cc02(x, y)
+      : x = x,
+        assert(x < y);
+  const C.cc03(x, y)
+      : assert(x < y),
+        x = x;
+  const C.cc04(this.x, y)
+      : assert(x < y),
+        super();
+  const C.cc05(x, y)
+      : x = x,
+        assert(x < y),
+        super();
+  const C.cc06(x, y)
+      : assert(x < y),
+        x = x,
+        super();
+  const C.cc07(x, y)
+      : assert(x < y),
+        x = x,
+        assert(y > x),
+        super();
+  const C.cc08(this.x, y) : assert(x < y, "$x < $y");
+  const C.cc09(this.x, y) : assert(x < y,);
+  const C.cc10(this.x, y) : assert(x < y, "$x < $y",);
 }
 
 main() {
-  // Failing assertions in const invociations are compile-time errors.
-  const C.cc01(2, 1);  //# cc01: continued
-  const C.cc02(2, 1);  //# cc02: continued
-  const C.cc03(2, 1);  //# cc03: continued
-  const C.cc05(2, 1);  //# cc05: continued
-  const C.cc06(2, 1);  //# cc06: continued
-  const C.cc07(2, 1);  //# cc07: continued
-  const C.cc08(2, 1);  //# cc08: continued
-  const C.cc09(2, 1);  //# cc09: continued
-  const C.cc10(2, 1);  //# cc10: continued
-  const C.cc11(2, 1);  //# cc11: continued
+  const x = 3;
+  {
+    const x = 1; //# cc01: compile-time error
+    const C.cc01(2, x);
+  }
+  {
+    const x = 1; //# cc02: compile-time error
+    const C.cc02(2, x);
+  }
+  {
+    const x = 1; //# cc03: compile-time error
+    const C.cc03(2, x);
+  }
+  {
+    const x = 1; //# cc04: compile-time error
+    const C.cc04(2, x);
+  }
+  {
+    const x = 1; //# cc05: compile-time error
+    const C.cc05(2, x);
+  }
+  {
+    const x = 1; //# cc06: compile-time error
+    const C.cc06(2, x);
+  }
+  {
+    const x = 1; //# cc07: compile-time error
+    const C.cc07(2, x);
+  }
+  {
+    const x = 1; //# cc08: compile-time error
+    const C.cc08(2, x);
+  }
+  {
+    const x = 1; //# cc09: compile-time error
+    const C.cc09(2, x);
+  }
+  {
+    const x = 1; //# cc10: compile-time error
+    const C.cc10(2, x);
+  }
 }
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart
index a05d29c..11d9aa1 100644
--- a/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart
@@ -4,8 +4,6 @@
 
 import "package:expect/expect.dart";
 
-import "implicit_new_constructor_generic_named_test.dart" as prefix;
-
 // Test that an omitted `new` is allowed for a generic constructor invocation.
 
 class C<T> {
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart
index 8994682..aca30e2 100644
--- a/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart
@@ -4,8 +4,6 @@
 
 import "package:expect/expect.dart";
 
-import "implicit_new_constructor_generic_test.dart" as prefix;
-
 // Test that an omitted `new` is allowed for a generic constructor invocation.
 
 class C<T> {
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
index 31813f2..cd42c0f 100644
--- a/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
@@ -35,7 +35,7 @@
 
     Expect.identical(cd1, cd2);
     Expect.identical(cd1, cd3);
-    Expect.allDistinct([cd1, cd3, cd4]);
+    Expect.allDistinct([cd1, cd3, cd4, cd5]);
   }
 
   {
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart
index 1a4de2d..1f58aa5 100644
--- a/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart
@@ -82,7 +82,7 @@
   }
 
   // Test instance creation with type parameters.
-  new G<int>().testWithT();
+  new G<int>().testWithInt();
 }
 
 class D<T> {
@@ -97,7 +97,7 @@
 
 class G<T> {
   // Tests creation of D<T> where T is a type variable.
-  void testWithT() {
+  void testWithInt() {
     // Cannot create constants referencing T or x.
     var instances = [
       new D<T>(null),
@@ -113,7 +113,7 @@
       prefix.D<T>.named(null),
     ];
 
-    const dx = const D<T>(null);
+    const dx = const D<int>(null);
     Expect.allDistinct([dx]..addAll(instances));
     for (var i = 0; i < instances.length; i++) {
       var d = instances[i];
diff --git a/tests/language_2/import_nonexisting_dart_uri_test.dart b/tests/language_2/import_nonexisting_dart_uri_test.dart
new file mode 100644
index 0000000..1a4fd42
--- /dev/null
+++ b/tests/language_2/import_nonexisting_dart_uri_test.dart
@@ -0,0 +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:nonexisting/nonexisting.dart"; //# 01: compile-time error
+
+main() {}
diff --git a/tests/language_2/initializer_super_last_test.dart b/tests/language_2/initializer_super_last_test.dart
new file mode 100644
index 0000000..73f18d0d
--- /dev/null
+++ b/tests/language_2/initializer_super_last_test.dart
@@ -0,0 +1,167 @@
+// Copyright (c) 201, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=--assert_initializer
+//
+// Dart test program testing assert statements.
+
+import "package:expect/expect.dart";
+
+class S {
+  const S();
+  const S.named();
+}
+
+class C extends S {
+  final int x;
+  C.cc01(int x)
+      : x = x,
+        super();
+  C.cc02(int x)
+      : x = x,
+        super.named();
+  C.cc03(this.x) : super();
+  C.cc04(this.x) : super.named();
+  C.cc05(int x)
+      : x = x,
+        assert(x == x),
+        super();
+  C.cc06(int x)
+      : x = x,
+        assert(x == x),
+        super.named();
+  C.cc07(this.x)
+      : assert(x == x),
+        super();
+  C.cc08(this.x)
+      : assert(x == x),
+        super.named();
+  C.cc09(int x)
+      : //
+        super(), //# cc09: compile-time error
+        x = x;
+  C.cc10(int x)
+      : //
+        super.named(), //# cc10: compile-time error
+        x = x;
+  C.cc11(this.x)
+      : //
+        super(), //# cc11: compile-time error
+        assert(x == x);
+  C.cc12(this.x)
+      : //
+        super.named(), //# cc12: compile-time error
+        assert(x == x);
+  C.cc13(int x)
+      : //
+        super(), //# cc13: compile-time error
+        x = x,
+        assert(x == x);
+  C.cc14(int x)
+      : //
+        super.named(), //# cc14: compile-time error
+        x = x,
+        assert(x == x);
+  C.cc15(int x)
+      : x = x,
+        super(), //# cc15: compile-time error
+        assert(x == x);
+  C.cc16(int x)
+      : x = x,
+        super.named(), //# cc16: compile-time error
+        assert(x == x);
+
+  const C.cc17(int x)
+      : x = x,
+        super();
+  const C.cc18(int x)
+      : x = x,
+        super.named();
+  const C.cc19(this.x) : super();
+  const C.cc20(this.x) : super.named();
+  const C.cc21(int x)
+      : x = x,
+        assert(x == x),
+        super();
+  const C.cc22(int x)
+      : x = x,
+        assert(x == x),
+        super.named();
+  const C.cc23(this.x)
+      : assert(x == x),
+        super();
+  const C.cc24(this.x)
+      : assert(x == x),
+        super.named();
+  const C.cc25(int x)
+      : //
+        super(), //# cc25: compile-time error
+        x = x;
+  const C.cc26(int x)
+      : //
+        super.named(), //# cc26: compile-time error
+        x = x;
+  const C.cc27(this.x)
+      : //
+        super(), //# cc27: compile-time error
+        assert(x == x);
+  const C.cc28(this.x)
+      : //
+        super.named(), //# cc28: compile-time error
+        assert(x == x);
+  const C.cc29(int x)
+      : //
+        super(), //# cc29: compile-time error
+        x = x,
+        assert(x == x);
+  const C.cc30(int x)
+      : //
+        super.named(), //# cc30: compile-time error
+        x = x,
+        assert(x == x);
+  const C.cc31(int x)
+      : x = x,
+        super(), //# cc31: compile-time error
+        assert(x == x);
+  const C.cc32(int x)
+      : x = x,
+        super.named(), //# cc32: compile-time error
+        assert(x == x);
+}
+
+main() {
+  // Ensure that erroneous constructors are actually needed.
+  new C.cc01(42);
+  new C.cc02(42);
+  new C.cc03(42);
+  new C.cc04(42);
+  new C.cc05(42);
+  new C.cc06(42);
+  new C.cc07(42);
+  new C.cc08(42);
+  new C.cc09(42);
+  new C.cc10(42);
+  new C.cc11(42);
+  new C.cc12(42);
+  new C.cc13(42);
+  new C.cc14(42);
+  new C.cc15(42);
+  new C.cc16(42);
+
+  const C.cc17(42);
+  const C.cc18(42);
+  const C.cc19(42);
+  const C.cc20(42);
+  const C.cc21(42);
+  const C.cc22(42);
+  const C.cc23(42);
+  const C.cc24(42);
+  const C.cc25(42);
+  const C.cc26(42);
+  const C.cc27(42);
+  const C.cc28(42);
+  const C.cc29(42);
+  const C.cc30(42);
+  const C.cc31(42);
+  const C.cc32(42);
+}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 3e36e64..06cff1c 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -22,6 +22,28 @@
 stacktrace_demangle_ctors_test: SkipByDesign # Names are not scrubbed.
 type_checks_in_factory_method_test: SkipByDesign # Requires checked mode.
 
+[ $fasta ]
+initializer_super_last_test/cc04: MissingCompileTimeError
+initializer_super_last_test/cc09: MissingCompileTimeError
+initializer_super_last_test/cc10: MissingCompileTimeError
+initializer_super_last_test/cc11: MissingCompileTimeError
+initializer_super_last_test/cc12: MissingCompileTimeError
+initializer_super_last_test/cc13: MissingCompileTimeError
+initializer_super_last_test/cc14: MissingCompileTimeError
+initializer_super_last_test/cc15: MissingCompileTimeError
+initializer_super_last_test/cc16: MissingCompileTimeError
+initializer_super_last_test/cc25: MissingCompileTimeError
+initializer_super_last_test/cc26: MissingCompileTimeError
+initializer_super_last_test/cc27: MissingCompileTimeError
+initializer_super_last_test/cc28: MissingCompileTimeError
+initializer_super_last_test/cc29: MissingCompileTimeError
+initializer_super_last_test/cc30: MissingCompileTimeError
+initializer_super_last_test/cc31: MissingCompileTimeError
+initializer_super_last_test/cc32: MissingCompileTimeError
+
+[ $compiler == dart2js && !$strong ]
+initializer_super_last_test: Crash, CompileTimeError # Issue 31321
+
 [ $compiler != dart2js && $compiler != dartdevc && !$fasta && $strong ]
 type_promotion_functions_test: CompileTimeError # Issue 30895: This test requires a complete rewrite for 2.0.
 
@@ -40,6 +62,40 @@
 implicit_creation/implicit_new_prefix_constructor_generic_test: Fail # No support for implicit creation.
 implicit_creation/implicit_new_prefix_constructor_test: Fail # No support for implicit creation.
 
+[ $compiler != dart2js && !$strong ]
+initializer_super_last_test/cc01: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc02: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc03: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc04: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc05: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc06: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc07: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc08: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc09: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc10: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc11: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc12: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc13: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc14: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc15: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc16: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc17: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc18: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc19: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc20: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc21: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc22: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc23: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc24: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc25: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc26: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc27: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc28: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc29: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc30: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc31: MissingCompileTimeError # Was valid in Dart 1.
+initializer_super_last_test/cc32: MissingCompileTimeError # Was valid in Dart 1.
+
 [ $compiler != dartdevc && !$checked ]
 function_type/*: Skip # Needs checked mode.
 
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index a1008b0..325899a 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -654,6 +654,7 @@
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc03: MissingCompileTimeError # Not reporting failed assert() at compile time.
+assertion_initializer_const_error2_test/cc04: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc05: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc06: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc07: MissingCompileTimeError # Not reporting failed assert() at compile time.
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 572064c..e525517 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -1396,6 +1396,7 @@
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
+assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
 async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
@@ -1517,9 +1518,7 @@
 const_switch_test/02: RuntimeError
 const_switch_test/04: RuntimeError
 const_types_test/34: MissingCompileTimeError
-const_types_test/35: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
-const_types_test/40: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
 constructor12_test: RuntimeError
 constructor_named_arguments_test/none: RuntimeError
@@ -1963,7 +1962,6 @@
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_default_values_test/03: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: CompileTimeError
 regress_13462_0_test: CompileTimeError
@@ -2164,6 +2162,7 @@
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
+assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
 async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
@@ -2726,7 +2725,6 @@
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_default_values_test/03: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
-redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: CompileTimeError
 regress_13462_0_test: CompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index fa770e2..c86380f 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -64,6 +64,7 @@
 generic_local_functions_test: CompileTimeError
 generic_methods_generic_function_parameter_test: CompileTimeError
 generic_methods_generic_function_result_test/none: CompileTimeError # Issue #30208
+generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
 generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
 generic_no_such_method_dispatcher_test: CompileTimeError
 getter_setter_in_lib_test: CompileTimeError
@@ -337,6 +338,8 @@
 compile_time_constant_static5_test/16: CompileTimeError # Issue 31537
 compile_time_constant_static5_test/21: CompileTimeError # Issue 31537
 compile_time_constant_static5_test/23: CompileTimeError # Issue 31537
+conditional_import_string_test: CompileTimeError # Test is broken
+conditional_import_test: CompileTimeError # Test is broken
 config_import_test: CompileTimeError
 const_constructor2_test/20: MissingCompileTimeError
 const_constructor2_test/22: MissingCompileTimeError
@@ -399,6 +402,8 @@
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
 function_propagation_test: RuntimeError
+function_subtype_cast0_test: RuntimeError # CastError: Casting value of type '(int) => void' to type '(dynamic) => void' which is incompatible
+function_subtype_closure0_test: RuntimeError # Expect.throws(TypeError) fails: Did not throw
 function_type_call_getter2_test/00: MissingCompileTimeError
 function_type_call_getter2_test/01: MissingCompileTimeError
 function_type_call_getter2_test/02: MissingCompileTimeError
@@ -421,12 +426,15 @@
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
 implicit_this_test/01: MissingCompileTimeError
 implicit_this_test/04: MissingCompileTimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_call_wrong_argument_count_negative_test: Fail
 instantiate_tearoff_of_call_test: CompileTimeError
+instantiate_type_variable_test/01: CompileTimeError
 invocation_mirror_test: CompileTimeError # Issue 31402 Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Invocation'.
 issue18628_2_test/01: MissingCompileTimeError
 issue31596_override_test/07: MissingCompileTimeError
@@ -438,6 +446,9 @@
 issue31596_super_test/05: RuntimeError
 issue_25671a_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 issue_25671b_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
+library_env_test/has_io_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
+library_env_test/has_mirror_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
+library_env_test/has_no_html_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 local_function_test/01: MissingCompileTimeError
 local_function_test/02: MissingCompileTimeError
 malbounded_instantiation_test/01: MissingCompileTimeError
@@ -548,6 +559,8 @@
 mixin_type_parameters_errors_test/03: MissingCompileTimeError
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
+mock_writable_final_field_test: RuntimeError # Expect.listEquals(list length, expected: <1>, actual: <0>) fails: Next element <123>
+mock_writable_final_private_field_test: RuntimeError
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
 named_constructor_test/01: MissingCompileTimeError
@@ -605,14 +618,19 @@
 redirecting_factory_default_values_test/03: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
+redirecting_factory_reflection_test: RuntimeError # UnimplementedError: node <InvalidExpression> `invalid-expression`
 regress_23089_test: Crash # Crashes in KernelClassBuilder.buildTypeArguments
 regress_23408_test: CompileTimeError # Issue 31533
+regress_24283_test: RuntimeError # Expect.equals(expected: <-1>, actual: <4294967295>) fails.
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError # Issue 31402 Error: A value of type '#lib2::Foo' can't be assigned to a variable of type '(#lib2::Foo) → void'.
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError
+regress_30339_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
+runtime_type_function_test: RuntimeError # Expect.fail('Type print string does not match expectation
 setter4_test: MissingCompileTimeError
+setter_no_getter_call_test/01: CompileTimeError
 setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/01: MissingCompileTimeError
@@ -638,6 +656,7 @@
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
+syncstar_yield_test/copyParameters: RuntimeError # Expect.equals(expected: <2>, actual: <3>) fails.
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -645,6 +664,7 @@
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
 try_catch_test/01: MissingCompileTimeError
+type_literal_test: RuntimeError # Expect.equals(expected: <Func>, actual: <(bool) => int>) fails.
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
 type_promotion_functions_test/04: CompileTimeError # Issue 31537
@@ -673,6 +693,10 @@
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError, Crash
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
+[ $compiler == dartdevc && $runtime == none ]
+instantiate_type_variable_test/01: CompileTimeError
+setter_no_getter_call_test/01: CompileTimeError
+
 [ $compiler == dartdevc && $runtime != none ]
 assertion_test: RuntimeError # Issue 30326; Expect.equals(expected: <1>, actual: <0>) fails.
 async_star_test/01: RuntimeError
@@ -690,7 +714,6 @@
 expect_test: RuntimeError # Issue 29920
 f_bounded_quantification3_test: RuntimeError # Issue 29920
 forwarding_stub_tearoff_generic_test: RuntimeError
-generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
 getter_closure_execution_order_test: RuntimeError # Issue 29920
 implicit_downcast_during_compound_assignment_test: RuntimeError
 implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
@@ -720,25 +743,6 @@
 super_operator_index8_test: RuntimeError
 truncdiv_test: RuntimeError # Issue 29920
 
-[ $compiler == dartdevk && $runtime != none ]
-conditional_import_string_test: CompileTimeError # Test is broken
-conditional_import_test: CompileTimeError # Test is broken
-function_subtype_cast0_test: RuntimeError # CastError: Casting value of type '(int) => void' to type '(dynamic) => void' which is incompatible
-function_subtype_closure0_test: RuntimeError # Expect.throws(TypeError) fails: Did not throw
-implicit_creation/implicit_new_or_const_composite_test: RuntimeError
-implicit_creation/implicit_new_or_const_test: RuntimeError
-library_env_test/has_io_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-library_env_test/has_mirror_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-library_env_test/has_no_html_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-mock_writable_final_field_test: RuntimeError # Expect.listEquals(list length, expected: <1>, actual: <0>) fails: Next element <123>
-mock_writable_final_private_field_test: RuntimeError
-redirecting_factory_reflection_test: RuntimeError # UnimplementedError: node <InvalidExpression> `invalid-expression`
-regress_24283_test: RuntimeError # Expect.equals(expected: <-1>, actual: <4294967295>) fails.
-regress_30339_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
-runtime_type_function_test: RuntimeError # Expect.fail('Type print string does not match expectation
-syncstar_yield_test/copyParameters: RuntimeError # Expect.equals(expected: <2>, actual: <3>) fails.
-type_literal_test: RuntimeError # Expect.equals(expected: <Func>, actual: <(bool) => int>) fails.
-
 [ $compiler == dartdevk && $checked ]
 assertion_initializer_const_error2_test/*: MissingCompileTimeError
 assertion_initializer_const_error2_test/none: Pass
@@ -751,27 +755,26 @@
 # for all runtimes including $runtime == none.  They are organized by: shared
 # expectations for dartdevc and dartdevk, then expectations for dartdevc, and
 # then expectations for dartdevk.
-[ $runtime == none && ($compiler == dartdevc || $compiler == dartdevk) ]
-closure_call_wrong_argument_count_negative_test: Fail
-unhandled_exception_negative_test: Fail
-
-# Runtime tests for dartdevc and dartdevk.  These contain expectations for tests
-# that fail at run time, so they should not include $runtime == none which
-# cannot fail at run time.  They are organized by: shared expectations for
-# dartdevc and dartdevk, then expectations for dartdevc, and then expectations
-# for dartdevk.
-[ $runtime != none && ($compiler == dartdevc || $compiler == dartdevk) ]
+[ $compiler == dartdevc || $compiler == dartdevk ]
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue #30568
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue #30568
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
 async_star_cancel_while_paused_test: RuntimeError # Issue 29920; Uncaught Expect.listEquals(list length, expected: <4>, actual: <3>) fails: Next element <*3>
 async_star_pause_test: RuntimeError # Uncaught Expect.listEquals(at index 2, expected: <0+>, actual: <0!>) fails
 async_star_test/02: RuntimeError
 asyncstar_throw_in_catch_test: Skip # Times out. Issue 29920
 bit_operations_test: RuntimeError # No bigints on web.; Expect.equals(expected: <-25>, actual: <4294967271>) fails.
+bit_operations_test/01: MissingCompileTimeError
+bit_operations_test/02: MissingCompileTimeError
 branch_canonicalization_test: RuntimeError # Issue 29920; Expect.equals(expected: <0>, actual: <1>) fails.
+built_in_identifier_prefix_test: CompileTimeError
 call_closurization_test: RuntimeError # Issue 29920; TypeError: Cannot read property '0' of undefined
 call_test: RuntimeError # Expect.throws(NoSuchMethodError) fails: Did not throw
 canonical_const2_test: RuntimeError # Ints and doubles are unified.; Expect.isFalse(true) fails.
+closure_call_wrong_argument_count_negative_test: Fail
 compile_time_constant_d_test: RuntimeError # Issue 30876; Expect.isTrue(false) fails.
 compile_time_constant_e_test: RuntimeError # Issue 30876; Expect.identical(expected: <A 3 499 99 100>, actual: <A 3 499 99 100>) fails.
+config_import_corelib_test: CompileTimeError
 config_import_test: RuntimeError # Expect.equals(expected: <b>, actual: <a>) fails.
 const_list_test: RuntimeError # Expect.equals(expected: <false>, actual: <true>) fails.
 const_map4_test: RuntimeError # Expect.equals(expected: <true>, actual: <false>) fails.
@@ -797,6 +800,7 @@
 exception_test: RuntimeError # DDC doesn't implement NullThrownError?; Expect.isTrue(false) fails.
 expect_test: RuntimeError # Issue 29920; Expect.identical did not fail
 f_bounded_quantification3_test: RuntimeError # Issue 29920; Uncaught Error: type arguments should not be null: (F1, F2) => {
+field3_test/01: MissingCompileTimeError
 field_increment_bailout_test: RuntimeError # Issue 29920; UnimplementedError: JsInstanceMirror.delegate unimplemented
 field_initialization_order_test/none: RuntimeError # Expect.equals(expected: <b.a.ai.bi.>, actual: <b.bi.a.ai.>) fails.
 flatten_test/05: MissingRuntimeError # Issue 29920
@@ -806,13 +810,19 @@
 for_variable_capture_test: RuntimeError # Issue 29920; Expect.equals(expected: <1>, actual: <0>) fails.
 function_subtype_inline2_test: RuntimeError # Expect.fail('Missing type error: 'new C.c1(m2)'.')
 function_type_alias6_test/none: RuntimeError # Expect.isTrue(false) fails.
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 29920
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 29920
 generic_instanceof2_test: RuntimeError # Issue 29920; ReferenceError: FooOfK$String is not defined
 generic_is_check_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
+generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
+generic_tearoff_test: CompileTimeError
 identical_closure2_test: RuntimeError # Issue 29920; Expect.isFalse(true) fails.
 infinite_switch_label_test: RuntimeError # Issue 29920; NoSuchMethodError: method not found: '<Unexpected Null Value>'
 infinity_test: RuntimeError # Issue 29920; Expect.isFalse(true) fails.
 instance_creation_in_function_annotation_test: RuntimeError # Issue 29920; UnimplementedError: JsClosureMirror.function unimplemented
+int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 integer_division_by_zero_test: RuntimeError # Issue 29920; Expect.throws: Unexpected 'Unsupported operation: Infinity'
+internal_library_test/02: Crash
 invocation_mirror2_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
 invocation_mirror_empty_arguments_test: RuntimeError # Expect.throws(UnsupportedError) fails: Did not throw
 invocation_mirror_invoke_on2_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
@@ -832,8 +842,13 @@
 local_function3_test/none: RuntimeError # Expect.equals(expected: <true>, actual: <false>) fails.
 local_function_test/none: RuntimeError # Expect.equals(expected: <true>, actual: <false>) fails.
 many_overridden_no_such_method_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented; UnimplementedError: JsInstanceMirror.delegate unimplemented
+method_override7_test/03: MissingCompileTimeError # Issue 30514
 mint_arithmetic_test: RuntimeError # Issue 29920; Expect.equals(expected: <4294967297>, actual: <1>) fails.
 modulo_test: RuntimeError # Ints and doubles are unified.; Expect.throws fails: Did not throw
+multiline_newline_test/04: MissingCompileTimeError
+multiline_newline_test/04r: MissingCompileTimeError
+multiline_newline_test/05: MissingCompileTimeError
+multiline_newline_test/05r: MissingCompileTimeError
 named_parameter_clash_test: RuntimeError # Issue 29920; Expect.throws(NoSuchMethodError) fails: Did not throw
 named_parameters_default_eq_test/none: RuntimeError # Expect.isTrue(false) fails.
 nan_identical_test: RuntimeError # Issue 29920; Unsupported operation: Uint64 accessor not supported by dart2js.
@@ -844,41 +859,6 @@
 number_identity2_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
 numbers_test: RuntimeError # Issue 29920; Expect.equals(expected: <false>, actual: <true>) fails.
 overridden_no_such_method_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented; UnimplementedError: JsInstanceMirror.delegate unimplemented
-private3_test: RuntimeError # Type 'PrivateSymbol' is not a subtype of type 'Symbol' in strong mode
-regress_16640_test: RuntimeError # Issue 29920; Uncaught Error: type arguments should not be null: E => {
-regress_22443_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
-stack_overflow_stacktrace_test: RuntimeError # Issue 29920; RangeError: Maximum call stack size exceeded
-stack_overflow_test: RuntimeError # Issue 29920; RangeError: Maximum call stack size exceeded
-stacktrace_demangle_ctors_test: RuntimeError # Issue 31089; Expect.isTrue(false) fails.
-stacktrace_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
-string_interpolation_and_buffer_test: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
-string_literals_test: RuntimeError # Expect.equals(expected: <\x00\x0A\x0D\x7F\xFF\u{FFFF}\u{D800}\u{DC00}\u{DBFF}\u{DFFF}>, actual: <\x00\x0A\x0D\x7F\xFF\u{FFFF}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}>) fails.
-super_test: RuntimeError # Expect.equals(expected: <0>, actual: <2>) fails.
-switch_label2_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
-switch_label_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
-switch_try_catch_test: RuntimeError # Issue 29920; Expect.throws: Unexpected 'UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
-truncdiv_test: RuntimeError # Issue 29920; Expect.throws fails: Did not throw
-
-[ $compiler == dartdevc || $compiler == dartdevk ]
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue #30568
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue #30568
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
-bit_operations_test/01: MissingCompileTimeError
-bit_operations_test/02: MissingCompileTimeError
-built_in_identifier_prefix_test: CompileTimeError
-config_import_corelib_test: CompileTimeError
-field3_test/01: MissingCompileTimeError
-generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 29920
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 29920
-generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
-generic_tearoff_test: CompileTimeError
-int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
-internal_library_test/02: Crash
-method_override7_test/03: MissingCompileTimeError # Issue 30514
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
 override_field_test/03: MissingCompileTimeError
 override_inheritance_abstract_test/02: MissingCompileTimeError
 override_inheritance_abstract_test/03: MissingCompileTimeError
@@ -901,10 +881,20 @@
 override_inheritance_abstract_test/26: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError
+private3_test: RuntimeError # Type 'PrivateSymbol' is not a subtype of type 'Symbol' in strong mode
+regress_16640_test: RuntimeError # Issue 29920; Uncaught Error: type arguments should not be null: E => {
+regress_22443_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
 regress_27617_test/1: MissingCompileTimeError
+stack_overflow_stacktrace_test: RuntimeError # Issue 29920; RangeError: Maximum call stack size exceeded
+stack_overflow_test: RuntimeError # Issue 29920; RangeError: Maximum call stack size exceeded
+stacktrace_demangle_ctors_test: RuntimeError # Issue 31089; Expect.isTrue(false) fails.
+stacktrace_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
+string_interpolation_and_buffer_test: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
+string_literals_test: RuntimeError # Expect.equals(expected: <\x00\x0A\x0D\x7F\xFF\u{FFFF}\u{D800}\u{DC00}\u{DBFF}\u{DFFF}>, actual: <\x00\x0A\x0D\x7F\xFF\u{FFFF}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}\u{FFFD}>) fails.
+super_test: RuntimeError # Expect.equals(expected: <0>, actual: <2>) fails.
+switch_label2_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
+switch_label_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
+switch_try_catch_test: RuntimeError # Issue 29920; Expect.throws: Unexpected 'UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
+truncdiv_test: RuntimeError # Issue 29920; Expect.throws fails: Did not throw
 vm/*: SkipByDesign # VM only tests.; VM only tests.
 
-[ $compiler == dartdevk || $compiler == dartdevc && $runtime == none ]
-instantiate_type_variable_test/01: CompileTimeError
-setter_no_getter_call_test/01: CompileTimeError
-
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 84243f6..ab0002a 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -122,7 +122,6 @@
 implicit_creation/implicit_const_context_prefix_constructor_named_test: CompileTimeError
 implicit_creation/implicit_const_context_prefix_constructor_test: CompileTimeError
 implicit_creation/implicit_new_constructor_generic_named_test: CompileTimeError
-implicit_creation/implicit_new_constructor_generic_test: CompileTimeError
 implicit_creation/implicit_new_or_const_generic_test: CompileTimeError
 implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
 implicit_this_test/01: MissingCompileTimeError
@@ -839,6 +838,7 @@
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc03: MissingCompileTimeError # Not reporting failed assert() at compile time.
+assertion_initializer_const_error2_test/cc04: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc05: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc06: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc07: MissingCompileTimeError # Not reporting failed assert() at compile time.
@@ -1314,7 +1314,6 @@
 compile_time_constant_k_test/03: MissingCompileTimeError
 compile_time_constant_static2_test/04: MissingCompileTimeError
 compile_time_constant_static3_test/04: MissingCompileTimeError
-generic_function_bounds_test: CompileTimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
@@ -2081,7 +2080,6 @@
 type_variable_static_context_test: MissingCompileTimeError
 typed_selector2_test: MissingCompileTimeError
 unbound_getter_test: MissingCompileTimeError
-unhandled_exception_negative_test: Fail
 unresolved_default_constructor_test/01: MissingCompileTimeError
 unresolved_in_factory_test: MissingCompileTimeError
 unresolved_top_level_method_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_spec_parser.status b/tests/language_2/language_2_spec_parser.status
index 55eb1d2..9976a28 100644
--- a/tests/language_2/language_2_spec_parser.status
+++ b/tests/language_2/language_2_spec_parser.status
@@ -90,8 +90,6 @@
 switch1_negative_test: Fail # Negative, `default` clause not last.
 test_negative_test: Fail # Negative, uses non-terminated string literal.
 unary_plus_negative_test: Fail # Negative, uses non-existing unary plus.
-unhandled_exception_negative_test: Fail # Negative, defaults required parameter.
-unhandled_exception_negative_test: Skip # Negative, not syntax.
 vm/debug_break_enabled_vm_test/01: Fail # Uses debug break.
 vm/debug_break_enabled_vm_test/none: Fail # Uses debug break.
 void_type_function_types_test: Skip # Not yet supported.
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 219b1d4..9d8d97d 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -7,6 +7,7 @@
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc03: MissingCompileTimeError # Not reporting failed assert() at compile time.
+assertion_initializer_const_error2_test/cc04: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc05: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc06: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc07: MissingCompileTimeError # Not reporting failed assert() at compile time.
diff --git a/tests/language_2/unhandled_exception_negative_test.dart b/tests/language_2/unhandled_exception_negative_test.dart
deleted file mode 100644
index 914505a..0000000
--- a/tests/language_2/unhandled_exception_negative_test.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// Dart test program for testing unhandled exceptions.
-
-class MyException {
-  const MyException(String message) : message_ = message;
-  String getMessage() { return message_; }
-  final String message_;
-}
-
-class Helper {
-  static int f1(int i) {
-    int j;
-    j = i + 200;
-    j = j + 300;
-    throw new MyException("Unhandled Exception");
-    return i;
-  }
-}
-
-class UnhandledExceptionNegativeTest {
-  static testMain() {
-    Helper.f1(1);
-  }
-}
-
-main() {
-  UnhandledExceptionNegativeTest.testMain();
-}
diff --git a/tests/lib/analyzer/analyze_library.status b/tests/lib/analyzer/analyze_library.status
index b3b42a8..0dd8e28 100644
--- a/tests/lib/analyzer/analyze_library.status
+++ b/tests/lib/analyzer/analyze_library.status
@@ -3,35 +3,4 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2analyzer ]
-lib/_blink/dartium/_blink_dartium: Skip # TODO: Remove Dartium
-lib/_chrome/dart2js/chrome_dart2js: CompileTimeError # Issue 16522
-lib/html/dart2js/html_dart2js: CompileTimeError # Issue 16522
-lib/html/dartium/html_dartium: Skip # TODO: Remove Dartium
-lib/html/html_common/html_common: StaticWarning # Issue 21647
-lib/html/html_common/html_common_dart2js: CompileTimeError # Issue 16522
-lib/indexed_db/dart2js/indexed_db_dart2js: CompileTimeError # Issue 16522
-lib/indexed_db/dartium/indexed_db_dartium: Skip # TODO: Remove Dartium
-lib/js/dart2js/js_dart2js: CompileTimeError # Issue 16522
-lib/js/dartium/js_dartium: Skip # TODO: Remove Dartium
-lib/js_util/dartium/js_util_dartium: Skip # TODO: Remove Dartium
-lib/svg/dart2js/svg_dart2js: CompileTimeError # Issue 16522
-lib/svg/dartium/svg_dartium: Skip # TODO: Remove Dartium
-lib/typed_data/dart2js/native_typed_data_dart2js: CompileTimeError # Issue 16522
-lib/typed_data/dart2js/typed_data_dart2js: CompileTimeError # Issue 16522
-lib/web_audio/dart2js/web_audio_dart2js: CompileTimeError # Issue 16522
-lib/web_audio/dartium/web_audio_dartium: Skip # TODO: Remove Dartium
-lib/web_gl/dart2js/web_gl_dart2js: CompileTimeError # Issue 16522
-lib/web_gl/dartium/web_gl_dartium: Skip # TODO: Remove Dartium
-lib/web_sql/dart2js/web_sql_dart2js: CompileTimeError # Issue 16522
-lib/web_sql/dartium/web_sql_dartium: Skip # TODO: Remove Dartium
-
-[ $compiler == dart2analyzer && $strong ]
-*: Skip # Issue 28649
-
-[ $compiler == dart2analyzer && $use_sdk ]
-lib/*: Skip # Issue 28620
-lib/analysis_server: Skip # Issue 28620
-lib/analyzer: Skip # Issue 28620
-lib/dev_compiler: Skip # Issue 28620
-lib/front_end: Skip # Issue 28620
-
+*: Skip
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 689a0ba..9a42a66 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -12,22 +12,7 @@
 mirrors/*: Skip # Issue 27929: Triage
 
 [ $compiler == dart2analyzer ]
-async/stream_event_transformed_test: StaticWarning
-convert/base64_test/01: CompileTimeError # int64
-convert/utf82_test: CompileTimeError # int64
-math/double_pow_test: CompileTimeError # int64
-mirrors/generic_f_bounded_mixin_application_test: StaticWarning # Test Issue
-mirrors/immutable_collections_test: StaticWarning, OK # Expect failure for any type of Iterable.
-mirrors/inference_and_no_such_method_test: StaticWarning, OK # Expect to trigger noSuchMethod.
-mirrors/mirrors_nsm_mismatch_test: StaticWarning, OK # Expect to trigger noSuchMethod.
-mirrors/mirrors_nsm_test: StaticWarning, OK # Expect to trigger noSuchMethod.
-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/removed_api_test: StaticWarning, OK # Deliberately refers to undeclared members.
-mirrors/repeated_private_anon_mixin_app_test: StaticWarning, OK # Intentional library name conflict.
-profiler/metrics_num_test: Fail # Issue 20309
-profiler/metrics_test: Fail # Issue 20309
-typed_data/int32x4_bigint_test: CompileTimeError # int64
+*: Skip
 
 [ $compiler != dart2analyzer ]
 async/stream_controller_async_test: StaticWarning
@@ -233,12 +218,6 @@
 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 == dart2analyzer && $checked ]
-mirrors/regress_16321_test/01: MissingCompileTimeError # Issue 16391
-
-[ $compiler == dart2analyzer && $strong ]
-*: Skip # Issue 28649
-
 [ $compiler == dart2js && $mode == debug ]
 mirrors/native_class_test: Pass, Slow
 
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 8dafc68..4191543 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -75,6 +75,7 @@
 html/xhr_test/json: Fail # IE10 returns string, not JSON object
 
 [ $runtime == safari ]
+async/periodic_timer3_test: Pass, RuntimeError # Flaky. Issue 32094
 convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
 html/audiobuffersourcenode_test/functional: RuntimeError
 html/canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index f32ce9e..3f6fc2e 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -10,11 +10,7 @@
 io/raw_datagram_socket_test: SkipByDesign
 
 [ $compiler == dart2analyzer ]
-io/directory_invalid_arguments_test: StaticWarning
-io/file_constructor_test: Fail # Issue 11518
-io/process_invalid_arguments_test: StaticWarning
-io/raw_secure_server_socket_argument_test: StaticWarning
-io/stdout_bad_argument_test: StaticWarning
+*: Skip
 
 # Overriding these flags are not supported in product mode.
 [ $mode == product ]
@@ -30,9 +26,6 @@
 [ $builder_tag == swarming && $system == macos ]
 io/*: Skip # Issue 30618
 
-[ $compiler == dart2analyzer && $strong ]
-*: Skip # Issue 28649
-
 [ $compiler == dartk && $strong ]
 *: SkipByDesign
 
diff --git a/tools/VERSION b/tools/VERSION
index 6752539..17fcce9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 26
+PRERELEASE 27
 PRERELEASE_PATCH 0
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 6976275..728288d 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -29,7 +29,10 @@
       builders { name: "dart2js-linux-chrome-try"}
       builders { name: "ddc-linux-release-chrome-try"}
       builders { name: "vm-linux-product-x64-try"}
-      builders { name: "dart-sdk-windows-try"}
+      builders {
+        name: "dart-sdk-windows-try"
+        experiment_percentage: 100
+      }
       builders { name: "vm-kernel-mac-release-x64-try"}
       builders { name: "benchmark-linux-try"}
     }
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index 1a1c66d..0791d9d 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -646,6 +646,7 @@
       case Compiler.dartkp:
         return Runtime.dartPrecompiled;
       case Compiler.specParser:
+      case Compiler.fasta:
         return Runtime.none;
       case Compiler.none:
         return Runtime.vm;
@@ -654,6 +655,20 @@
     throw "unreachable";
   }
 
+  Mode get defaultMode {
+    switch (this) {
+      case Compiler.dart2analyzer:
+      case Compiler.dart2js:
+      case Compiler.dartdevc:
+      case Compiler.dartdevk:
+      case Compiler.fasta:
+        return Mode.release;
+
+      default:
+        return Mode.debug;
+    }
+  }
+
   String toString() => "Compiler($name)";
 }
 
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index 451d8d7..03fe413 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -86,9 +86,7 @@
 class OptionsParser {
   static final List<_Option> _options = [
     new _Option('mode', 'Mode in which to run the tests.',
-        abbr: 'm',
-        values: ['all']..addAll(Mode.names),
-        defaultsTo: Mode.debug.name),
+        abbr: 'm', values: ['all']..addAll(Mode.names)),
     new _Option(
         'compiler',
         '''How the Dart code should be compiled or statically processed.
@@ -613,7 +611,7 @@
         // Expand compilers.
         for (var compiler in compilers) {
           // Expand modes.
-          var modes = data["mode"] as String;
+          String modes = data["mode"] ?? compiler.defaultMode.name;
           if (modes == "all") modes = "debug,release,product";
           for (var modeName in modes.split(",")) {
             var mode = Mode.find(modeName);
